Руководство по Android SDK

Yandex Pay SDK — это библиотека, которая позволяет встроить Yandex Pay в ваше приложение и начать принимать платежи от пользователей.

Подключение Yandex Pay в Android-приложении

Схема работы

  1. Пользователь нажимает кнопку оплаты в приложении.
  2. Пользователь переходит на экран платежной формы Yandex Pay, где отображается информация о заказе, список карт пользователя и кнопка подтверждения заказа.
  3. Пользователь выбирает карту из списка или оставляет карту по умолчанию и нажимает кнопку подтверждения заказа.
  4. Сервис Yandex Pay проводит платеж.

flow

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

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

Шаг 1. Получите YANDEX_CLIENT_ID

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

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

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

  2. Перейдите по ссылке https://oauth.yandex.ru/.

  3. Нажмите кнопку Создать приложение.

  4. Укажите название сервиса.

  5. Выберите платформу Android и укажите Android package name (уникальное имя приложения applicationId) и значение хеша в поле SHA256 Fingerprints.

  6. В блоке Какие данные вам нужны? выберите Yandex PayОплата через Yandex Pay.

  7. Нажмите кнопку Создать приложение.

Шаг 2. Подключите SDK

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

    dependencies {
      // актуальную версию вам сообщим дополнительно
      implementation 'com.yandex.pay:pay:0.0.1'
    }
    
  2. Укажите полученный YANDEX_CLIENT_ID в сборочном скрипте build.gradle в качестве значения в manifestPlaceholders:

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

Шаг 3. Инициализируйте библиотеку

До первого использования SDK выполните следующий код:

import com.yandex.pay.Locale
import com.yandex.pay.MerchantData
import com.yandex.pay.MerchantId
import com.yandex.pay.YPayApiEnvironment
import com.yandex.pay.YPayConfig
import com.yandex.pay.YPaySdk

// Application
override fun onCreate() {
  super.onCreate()

  YPaySdk.init(
    context = this,
    config = YPayConfig(
      merchantData = MerchantData(
        id = MerchantId("bbb9c171-2fab-45e6-b1f8-bbbbbbbb"),
        name = "MERCHANT_NAME",
        url = "https://merchant.com/",
      ),
    environment = YPayApiEnvironment.SANDBOX,
    locale = Locale.SYSTEM,
    )
  )
}

При инициализации SDK передайте YPayConfig:

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

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

    • PROD — production окружение.
    • SANDBOX— тестовое окружение.
  • locale — выбор локализации для Yandex Pay SDK:

    • SYSTEM — согласно системным настройкам: RU или EN.
    • RU — всегда RU вне зависимости от системных настроек.
    • EN — всегда EN вне зависимости от системных настроек.

Шаг 4. (опционально) Разместите кнопку Yandex Pay на экране

<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools">

    <com.yandex.pay.YPayButton
        android:id="@+id/y_pay_button"
        android:layout_width="300dp"
        android:layout_height="54dp"
        android:layout_marginTop="4dp"
        app:ypay_color_scheme="by_theme"
        app:ypay_corner_radius="4dp"
      />

При создании кнопки можно передать значения атрибутов:

  • ypay_color_scheme — позволяет определить цветовую гамму кнопки. Возможные значения:
    • by_theme — цветовая гамма адаптируется в зависимости от темы в системе.
    • light — всегда светлая цветовая гамма.
    • dark — всегда темная цветовая гамма.
  • ypay_corner_radius — позволяет определить закругление кнопки, значение передается в dp.

Шаг 5. Зарегистрируйте контракт запуска Yandex Pay

Более подробно узнать о подходе можно узнать в документации.

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

import com.yandex.pay.YPayResult
import com.yandex.pay.YandexPayContract

private val yandexPayLauncher = registerForActivityResult(YandexPayContract()) { 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: ${result.details}")
       }
   }

Шаг 6. Запустите сервис и передайте платежные данные

import com.yandex.pay.Metadata
import com.yandex.pay.OrderId
import com.yandex.pay.PaymentCart
import com.yandex.pay.PaymentData
import com.yandex.pay.Product
import com.yandex.pay.Quantity


  // детали платежа, если есть orderId
  val paymentData: PaymentData = PaymentData.OrderIdBased(
    orderId = OrderId("12345678901234567890"),
    // (опционально) данные о корзине
    cart = PaymentCart(
      // список продуктов/услуг
      items = listOf(
        // данные продукта
        Product(
          // идентификатор продукта
          id = "0",
          // количество
          quantity = Quantity(count = "1")
        )
    )
  ),
  // ваши метаданные, может быть любая строка
  metadata = Metadata("any metadata"),
 )


  // или детали платежа, если нет orderId, но есть платежная корзина
  val paymentData: PaymentData = PaymentData.CartBased(
    // данные о корзине
    cart = PaymentCart(
      // список продуктов/услуг
      items = listOf(
        // данные продукта
        Product(
          // идентификатор продукта
          id = "0",
          // количество
          quantity = Quantity(count = "1")
        )
    )
  ),
  // ваши метаданные, может быть любая строка
  metadata = Metadata("any metadata"),
 )

  // запустите сервис с помощью лаунчера, передав сформированный paymentData
  yandexPayLauncher.launch(paymentData)

  // результат будет получен с помощью контракта запуска (см. пункт 4)

}