Подключение оплаты по платежной ссылке

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

Поддерживаемая версия: Android 7.0 и выше.

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

  • 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. Подключите Client ID

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

   android {
     defaultConfig {
       manifestPlaceholders = [
         // Подставьте ваш Client ID
         YANDEX_CLIENT_ID: "12345678901234567890",
       ]
     }
   }

Шаг 3. Инициализируйте FirebaseApp во всех процессах приложения

Мобильный SDK использует службы AppMetrica, которые необходимы для стабильной работы SDK. Этот шаг позволяет исправить проблемы совместимости сервисов Firebase и сервисов метрик.

При использовании Firebase вместе с Яндекс Пэй SDK необходимо вызывать FirebaseApp.initialize(context) во всех процессах приложения.

Если вы используете AppMetrica в своем приложении, активировать YandexMetrica необходимо после инициализации Firebase.

Пример

// Не забудьте объявить MyApplication в AndroidManifest.xml в блоке <application/>, используя android:name
class MyApplication: Application() {

    override fun onCreate() {
        // Инициализируется в каждом процессе приложения
        FirebaseApp.initializeApp(this)
    }
}

Подробнее о взаимодействии можно прочитать в статье После обновления Firebase до версии 31+ перестала работать AppMetrica.

Шаг 4. Подключите Yandex Pay SDK

Укажите зависимость в ваших сборочных скриптах build.gradle:

dependencies {
    implementation 'com.yandex.pay.inapps:inapps:1.2.0'
}

Шаг 5. Получите объект платежной сессии

При помощи функции getYandexPaymentSession получите объект платежной сессии:

  private val yaPayConfig = YPayConfig(
    merchantData = MerchantData(
        id = MerchantId("merchantId"),
        name = MerchantName("merchantName"),
        url = MerchantUrl("https://merchant.com/"),
    ),
    environment = YPayApiEnvironment.PROD,
  )

  private val paymentSessionKey = PaymentSessionKey(
    generateSessionKey()
  )

  private val paymentSession: PaymentSession = YPay.getYandexPaymentSession(
    context = this,
    config = yaPayConfig,
    sessionKey = paymentSessionKey  // Необязательный в реализации на Kotlin
  )
  private YPayConfig getPayConfig() {
    return new YPayConfig(
        new MerchantData(
            new MerchantId("merchantId"),
            new MerchantName("MERCHANT_NAME"),
            new MerchantUrl("https://merchant.com/")
        ),
        YPayApiEnvironment.PROD
    );
  }

  private PaymentSessionKey getPaymentSessionKey() {
    return new PaymentSessionKey(
        generateSessionKey()
    );
  }

  private PaymentSession getPaymentSession() {
    return YPay.INSTANCE.getYandexPaymentSession(
        this,
        getPaymentSessionKey(),
        getPayConfig()
    );
  }

При получении PaymentSession необходимо передать:

  • Context — контекст приложения или Activity;
  • PaymentSessionKey — ключ платежной сессии;
  • YPayConfig — данные конфигурации Yandex Pay SDK.

При создании YPayConfig необходимо передать:

  • merchantData — данные продавца:

    • id — уникальный идентификатор продавца. Его можно получить при регистрации продавца в сервисе Яндекс Пэй;
    • name — наименование продавца, которое будет отображаться у пользователя;
    • url — URL продавца, который будет отображаться у пользователя.
  • environment — среда выполнения Yandex Pay SDK:

    • PROD — production окружение;
    • SANDBOX— тестовое окружение.

Шаг 6. Инициализируйте контракт запуска Яндекс Пэй

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

private val yandexPayLauncher = YPayLauncher(this) { result: YPayResult ->
    when (result) {
        is YPayResult.Success -> showToast("Finished with success")
        is YPayResult.Cancelled -> showToast("Finished with cancelled event")
        is YPayResult.Failure -> showToast("Finished with domain error")
    }
}
private final YPayLauncher launcher = new YPayLauncher(this, yPayResult -> {
    if (yPayResult instanceof YPayResult.Success) {
        handleResult("Finished with success");
    } else if (yPayResult instanceof YPayResult.Cancelled) {
        handleResult("Finished with cancelled event");
    } else if (yPayResult instanceof YPayResult.Failure) {
        handleResult("Finished with domain error");
    }
});

В случае неуспешной оплаты, дополнительно возвращается код ошибки 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

Шаг 7. Сформируйте данные для запуска Яндекс Пэй

Перед запуском Яндекс Пэй сформируйте платежные данные при помощи класса PaymentData.PaymentUrlFlowData, а также данные платежной сессии. Сформируйте YPayContractParams на их основе.

val paymentData = PaymentData.PaymentUrlFlowData(
    // Ссылка на оплату заказа, полученная из Pay API
    paymentUrl = "payment-url"
)

val params = YPayContractParams(
    paymentSession = paymentSession,
    paymentData = paymentData,
)
final PaymentData paymentData = new PaymentData.PaymentUrlFlowData(
    // Ссылка на оплату заказа, полученная из Pay API
    "payment-url"
);

// Параметры запуска Яндекс Пэй
final YPayContractParams params = new YPayContractParams(
    getPaymentSession(),
    paymentData
);

Примечание

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

Шаг 8. Запустите сервис Яндекс Пэй

Запустите сервис с помощью лаунчера, передав параметры запуска YPayContractParams:

val params = YPayContractParams(...)
yandexPayLauncher.launch(params)
final YPayContractParams params = new YPayContractParams(...);
yandexPayLauncher.launch(params);

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

После запуска сервиса Яндекс Пэй, SDK запустит платежную форму, в рамках которой будет проведена оплата. Результат будет получен с помощью контракта запуска YPayLauncher.

Предыдущая