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

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

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

Шаг 1. Подготовка идентификаторов

Перед началом интеграции получите идентификаторы, которые понадобятся при подключении SDK:

1.1 Получение SHA256 Fingerprints

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

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

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

1.2 Получение Client ID

Чтобы получить Client ID, зарегистрируйте приложение в сервисе Яндекс OAuth — это нужно, чтобы покупатели при оплате через Яндекс Пэй могли авторизоваться с помощью своего Яндекс ID.

Важно

Аккаунт, с которого вы регистрируете приложение в Яндекс OAuth, должен в Яндекс ID состоять в организации и иметь права разработчика. Добавить аккаунт в организацию и выдать права может сотрудник с ролью Владелец или Администратор.

Как проверить наличие прав
  • Если аккаунт состоит организации, в Яндекс OAuth при нажатии на фото профиля отображается название организации:

  • Чтобы проверить наличие прав разработчика, в Яндекс ID перейдите в список сотрудников организации → профиль сотрудника → Права в сервисах → Яндекс ID для сайта:

  1. Перейдите в сервис Яндекс OAuth, нажмите кнопку Создать, выберите вариант Для авторизации пользователей и перейдите к созданию.

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

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

    • Android package name — уникальное имя приложения из applicationId в конфигурационном файле проекта;
    • SHA256 Fingerprints — значение хеша SHA256. Все буквы в хеше должны быть заглавными.

  4. Добавьте доступ к Яндекс Пэй: в разделе Права доступа к данным пользователей в поле Название доступа укажите и выберите Оплата через Yandex Pay.

    Примечание

    Доступ Управление заказами Yandex Pay Checkout не требуется. Если он у вас добавлен, удалите его.

  5. Нажмите кнопку ПродолжитьВсё верно, создать приложение и скопируйте значение поля Client ID.

  6. В разделе Настройки личного кабинета Яндекс Пэй нажмите Добавить Client ID и укажите значение Client ID.

    Там же в разделе Настройки нажмите Добавить приложения, выберите нужный Client ID, платформу приложения и укажите SHA256 и Android package name в полях SHA256 Fingerprint и Android package name соответственно.

Шаг 2. Настройка проекта

Подготовьте Android-проект к работе с Яндекс Пэй SDK: подключите полученный Client ID и инициализируйте Firebase и AppMetrica.

2.1 Подключение Client ID

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

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

2.2 Инициализация 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)
    }
}

Шаг 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"), // Merchant ID магазина из личного кабинета Яндекс Пэй
      name = MerchantName("merchantName"), // Наименование продавца (магазина)
      url = MerchantUrl("https://merchant.com/"), // URL сайта продавца (магазина)
    ),
    environment = YPayApiEnvironment.PROD, // Необходимое окружение: SANDBOX — для тестовой среды, 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"), // Merchant ID магазина из личного кабинета Яндекс Пэй
          new MerchantName("merchantName"), // Наименование продавца (магазина)
          new MerchantUrl("https://merchant.com/") // URL сайта продавца (магазина)
      ),
        YPayApiEnvironment.PROD // Необходимое окружение: SANDBOX — для тестовой среды, 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 — данные продавца:

    • idMerchant ID магазина из личного кабинета Яндекс Пэй;
    • name — наименование продавца (магазина);
    • url — URL сайта продавца (магазина).
  • environment — среда выполнения Yandex Pay SDK: PROD или 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.

Предыдущая