Подключение Unity-плагина

Требования к подключению

Версия Android: Android 7.0 (API Level 24) и выше.
Версия Unity: Unity 2022.3 и выше.

Перед началом интеграции получите и добавьте в проект несколько идентификаторов:

  • Merchant ID
  • SHA256 Fingerprints
  • Client ID (YANDEX_CLIENT_ID)
  • Android package name (applicationId)

Шаг 1. Получите необходимые идентификаторы

  1. Получите значение хеша SHA256 Fingerprints с помощью утилиты keytool:

    keytool -list -v -alias <your-key-name> -keystore <path-to-production-keystore>
    

    После ввода команды значение хеша отобразится в блоке Certificate fingerprints: SHA256.

  2. Для регистрации приложения перейдите в сервис Яндекс OAuth.

  3. В поле Название вашего сервиса укажите название, которое будет видно пользователям на экране авторизации.

  4. В разделе Платформы приложения выберите Android-приложение и укажите его параметры:

    • Android package name — уникальное имя приложения из applicationId в конфигурационном файле проекта;
    • SHA256 Fingerprints — значение хеша SHA256, полученное в пункте 1. Все буквы в хеше должны быть заглавными.
  5. Убедитесь, что на Яндекс OAuth у вашего приложения добавлен доступ к Яндекс Пэй. Для этого в блоке Доступ к данным в поле Название доступа выберите Оплата через Yandex Pay.

  6. Нажмите кнопку Создать приложение и скопируйте значение поля Client ID.

  7. На странице Настройки личного кабинета Яндекс Пэй укажите значения Client ID, SHA256 и Android package name в полях Client ID, SHA256 Fingerprint и Android package name соответственно.

Шаг 2. Подключите плагин Yandex Pay InApps

  1. Подключите External Dependency Manager согласно документации.

  2. Добавьте плагин Yandex Pay InApps в зависимости в Packages/manifest.json:

{
  "dependencies": {
    "com.yandex.pay.inapps": "https://github.com/yandex-pay-mobile/inapps-unity-plugin.git#v1.0.0-alpha"
  }
}

Шаг 3. Укажите Client ID

Укажите полученный Client ID в сборочном скрипте Assets/Plugins/Android/launcherTemplate.gradle в manifestPlaceholders в качестве значения YANDEX_CLIENT_ID:

android {
    defaultConfig {
        // Подставьте ваш Client ID
        manifestPlaceholders["YANDEX_CLIENT_ID"] = "12345678901234567890"
    }
}
Если такой файл отсутствует
  1. В окне Unity-редактора выберите пункт меню EditProject SettingsPlayer и откройте вкладку Android.
  2. Откройте раздел Publishing Settings.
  3. В разделе Build включите опцию Custom Launcher Gradle Template.

Примечание

Для следующего шага также потребуется кастомный AndroidManifest.xml. Чтобы его создать, в разделе Build включите опцию Custom Main Manifest.

Шаг 4. Добавьте Android Activity в манифест

Добавьте YPayActivity с указанной темой в манифест Assets/Plugins/Android/AndroidManifest.xml:

<manifest
    xmlns:android="http://schemas.android.com/apk/res/android">
    <application>
        ...
        <activity android:name="com.yandex.pay.inapps.YPayActivity"
            android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen" />
    </application>
</manifest>

Если такой файл отсутствует
  1. В окне Unity-редактора выберите пункт меню EditProject SettingsPlayer и откройте вкладку Android.
  2. Откройте раздел Publishing Settings.
  3. В разделе Build включите опцию Custom Main Manifest.

Шаг 5. Разрешите Android-зависимости с помощью External Dependency Manager

В окне Unity-редактора выберите пункт меню: AssetsExternal Dependency ManagerAndroidForce Resolve.

Шаг 6. Разместите кнопку оплаты на сцене

  1. Во вкладке Project Unity-редактора раскройте папку Packages.
  2. В списке подключенных пакетов найдите Yandex Pay InApps.
  3. Найдите шаблон кнопки в директории Yandex Pay InApps/Runtime/Prefabs/YPay Button и перетащите его на сцену.

Важно

Кнопка оплаты, как и все UI-элементы, должна находиться внутри объекта Canvas. Также для работы Canvas необходим дополнительный объект EventSystem. Подробнее об этом см. в документации Unity.

prefab

Шаг 7. Укажите данные продавца

button

В инспекторе Unity выберите объект YPay Button. В редакторе кнопки заполните следующие данные:

  • Merchant Id — уникальный идентификатор продавца. Его можно получить при регистрации продавца в сервисе Яндекс Пэй;
  • Merchant Name — наименование продавца, которое будет отображаться у пользователя;
  • Merchant Url — URL продавца, который будет отображаться у пользователя.

Включите опцию Sandbox, если хотите использовать тестовое окружение.

Шаг 8. Сформируйте данные для оплаты

Разработайте класс, реализующий интерфейс IYPayDataProvider. Этот класс должен генерировать ключ платежной сессии и получать платежную ссылку из сервиса Яндекс Пэй.

Пример реализации
using System.Threading.Tasks;
using UnityEngine;
using YPay;

public class YPayDataProvider : MonoBehaviour, IYPayDataProvider
{
    public string GetPaymentSessionKey()
    {
        // Генерация ключа платежной сессии
        var sessionKeyGenerator = new SomeSessionKeyGenerator();
        var sessionKey = sessionKeyGenerator.GenerateSessionKey();

        return sessionKey;
    }

    public async Task<string> GetPaymentUrlAsync()
    {
        // Получение платежной ссылки из Pay API
        var networkManager = new SomeNetworkManager();
        var paymentUrl = await networkManager.GetPaymentUrlAsync();

        return paymentUrl;
    }
}

Добавьте созданный скрипт в качестве компонента к кнопке оплаты.

Примечание

Подробнее про генерацию платежной ссылки можно посмотреть в документации бэкенда.

Шаг 9. Обработайте результат оплаты

Разработайте класс, реализующий интерфейс IYPayResultListener.

Пример реализации
using UnityEngine;
using YPay;

public class YPayResultListener : MonoBehaviour, IYPayResultListener
{
    public void OnPaymentResult(IYPayResult result)
    {
        // Обработка результата оплаты
        switch (result)
        {
            case IYPayResult.Success success:
                HandleSuccess(success.OrderId);
                break;
            case IYPayResult.Failure failure:
                HandleError(failure.ErrorMessage);
                break;
            case IYPayResult.Cancelled cancelled:
                HandleCancellation();
                break;
        }
    }
}
Коды ошибок

В случае неуспешной оплаты, дополнительно возвращается код ошибки errorMsg:

Код ошибки Описание
incorrect payment url Неверная платежная ссылка
transaction error Ошибка проведения транзакции
failed to parse order ID Не удалось получить orderId при возврате результата
invalid intent parsing Не удалось получить результат оплаты
invalid result code Неверный код результата оплаты
unresolved payment strategy Не удалось обработать результат оплаты, так как ваше приложение было закрыто в фоновом режиме
session key not provided Не был предоставлен ключ сессии
config data not provided Не был предоставлен объект СonfigData
payment data not provided Не был предоставлен объект PaymentData

Добавьте созданный скрипт в качестве компонента к кнопке оплаты.

Шаг 10. Кастомизируйте кнопку оплаты

Кастомизируйте средствами Unity-редактора внешний вид кнопки оплаты в соответствии с вашими требованиями к дизайну.

Предыдущая