SDK для Android

SDK для Android — это набор средств разработки для подключения мобильных приложений, работающих на платформе Android, к платежной платформе PSPHost. В этом разделе представлена информация о работе с SDK для Android с примерами кода на языках программирования Java и Kotlin.

SDK для Android может встраиваться в мобильные приложения, работающие на платформе Android версии 4.4 (уровень API — 19) или выше и поддерживающие AndroidX. Для корректного отображения платежной формы разрешение экрана мобильного устройства должно быть не менее 480x800 пикселей.

SDK для Android можно загрузить с GitHub по следующим ссылкам:

Общая информация

Возможности

SDK для Android позволяет проводить платежи с использованием платежных карт, а также альтернативных платежных методов. Для платежей с использованием карт доступны проведение разовых и повторяемых оплат, проверка действительности карт (подробнее).

Также поддерживается проведение платежей с использованием методов, информация о которых представлена в разделе Платежные методы. По вопросам, связанным с подключением этих платежных методов, следует обращаться к курирующему менеджеру PSPHost.

При работе с SDK для Android используется платежная форма PSPHost, которая предоставляет следующие возможности:
  • Поддержка русского и английского языков (русского — при его выборе в настройках мобильного устройства и английского — в остальных случаях; со стороны мерчанта также возможно выбрать язык платежной формы).
  • Поддержка индивидуального дизайна и настройка цветового оформления платежной формы (подробнее).
  • Поддержка разных способов ввода данных карты (подробнее):
    • вручную,
    • сканирование карты,
    • выбор сохраненной карты,
    • предварительный выбор карты.
  • Сбор или указание дополнительных данных о пользователе (подробнее).
  • Уточнение дополнительных параметров, обязательных для проведения оплаты (подробнее).
  • Поддержка аутентификации 3‑D Secure 2. Протокол 3‑D Secure 2 является новой версией протокола 3‑D Secure (Three-Domain Secure), который обеспечивает безопасное проведение интернет-оплат с использованием платежных карт (подробнее).
  • Поддержка повторных попыток оплаты в случае ошибок (подробнее).
  • Получение информации о платеже: на всех страницах платежной формы доступна кнопка информации, при выборе которой отображаются данные о сумме, идентификаторе и дате проведения платежа, а также описание платежа.
  • Отправка электронного товарного чека пользователю (подробнее).

Состав

SDK для Android содержит файл с библиотеками psphostSDK.aar и примеры работы на языках программирования Java и Kotlin.

Схема работы

Проведение платежей с использованием SDK для Android выполняется следующим образом:

  1. В клиентской части мобильного приложения формируется объект с необходимыми параметрами для проведения платежа.
  2. В серверной части мобильного приложения вычисляется подпись на основании параметров платежа.
  3. В клиентской части формируется итоговый запрос на проведение платежа и с помощью библиотеки отправляется в платежную платформу PSPHost.
  4. В платежной платформе выполняется обработка платежа.
  5. От платежной платформы к клиентской части отправляется результат выполнения платежа.
  6. От платежной платформы на заданный URL отправляется оповещение.
Рис. 1. Схема взаимодействия

Подключение и использование

Для использования SDK для Android необходимо:

  1. Решить организационные вопросы, касающиеся взаимодействия с PSPHost:
    • Если у компании нет идентификатора и ключа для взаимодействия с PSPHost — отправить заявку на подключение.
    • Если у компании есть идентификатор и ключ для взаимодействия с PSPHost — сообщить специалистам технической поддержки о намерении интеграции с использованием SDK для Android и согласовать с ними порядок тестирования и запуска.
  2. Выполнить подготовительные технические работы:
    1. Обеспечить подписывание данных на стороне серверной части мобильного приложения.
    2. Скачать и подключить SDK для Android.
    3. Доработать клиентскую часть мобильного приложения для инициирования платежей необходимых типов и обработки результатов этих платежей.
  3. Протестировать и запустить в работу обновленное приложение.
    1. Для тестирования следует использовать тестовый идентификатор проекта и данные тестовых карт, предоставленные специалистами технической поддержки PSPHost.
    2. Для перевода в рабочий режим следует изменить тестовое значение идентификатора проекта на рабочее значение, полученное от PSPHost.

При возникновении вопросов о работе с SDK для Android следует обращаться в службу технической поддержки PSPHost support@psphost.com.

Интерфейс платежной формы

Рис. 2. Отображение списка доступных платежных методов
Рис. 3. Проверка действительности карты
Рис. 4. Выбор сохраненной карты
Рис. 5. Генерация токена карты
Рис. 6. Использование предварительно выбранной карты
Рис. 7. Уточнение дополнительных параметров, обязательных для проведения оплаты
Рис. 8. Возможность повторных попыток оплаты в случае ошибок

Обеспечение работы с подписью

Для обеспечения защиты информации при взаимодействиях с PSPHost передаваемые сообщения должны подписываться. Получение данных для подписывания должно выполняться в клиентской части приложения с помощью SDK для Android, а генерация подписи — в серверной части с использованием секретного ключа.

Рис. 9. Процесс подписывания данных
Получив строку для подписывания, необходимо выполнить следующие действия:
  1. Вычислить код HMAC для полученной строки на основе алгоритма SHA-512 и секретного ключа.
  2. Выполнить кодировку результата по алгоритму Base64.
Для проверки результата подписывания в серверной части приложения можно использовать следующий пример:
  • Строка для подписывания.
    customer_id:5;payment_amount:30;payment_currency:RUB;payment_id:payment1;project_id:115
  • Значение секретного ключа — 12345.
  • Результат генерации подписи.
    pVmAtGFBQJD2NgLToP1B2elR4QROiYGi3IobPD9PFDfrkjBqdSCFgrVSEtebVJUzOUUHX5tPnHQq9RMn61679A==

Реализацию алгоритмов следует выбирать с учетом технологий, используемых в серверной части приложения. Подробная информация о генерации подписи представлена в разделе Использовании подписи к данным.

Подключение библиотек

Подключение библиотек к проекту

Для подключения библиотек к проекту мобильного приложения необходимо:
  1. Загрузите файл psphostSDK.aar.
  2. Добавьте в проект библиотеки из загруженного файла. В Android Studio 3.0 для этого в меню выберите File > New > New Module, а затем выберите Import .JAR/.AAR Package и укажите расположение файла psphostSDK.aar.
  3. Откройте файл модуля приложения (build.gradle).
  4. Добавьте параметры компиляции в раздел android {}:
    compileOptions {
                    sourceCompatibility JavaVersion.VERSION_1_8
                    targetCompatibility JavaVersion.VERSION_1_8
                    }
  5. Добавьте зависимости в раздел dependencies {}:
    implementation project(path: ':psphostSDK')
     
    implementation 'io.card:android-sdk:5.5.1'
     
    implementation 'com.squareup.retrofit2:retrofit:2.3.0'
    implementation 'com.squareup.okhttp3:logging-interceptor:3.10.0'
    implementation 'androidx.appcompat:appcompat:1.0.0'
    implementation 'androidx.legacy:legacy-support-v4:1.0.0'
    implementation 'androidx.recyclerview:recyclerview:1.0.0'
    
    implementation 'com.squareup.retrofit2:converter-gson:2.3.0'
    implementation 'com.google.code.gson:gson:2.8.4'
    
    implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version'
    
    implementation 'androidx.lifecycle:lifecycle-viewmodel:2.0.0'
    implementation 'androidx.lifecycle:lifecycle-extensions:2.0.0'
    annotationProcessor 'androidx.lifecycle:lifecycle-compiler:2.0.0'
    
  6. Добавьте разрешения в файл манифеста AndroidManifest.xml.
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

Вызов платежной формы

Вызов в Java

Для вызова платежной формы необходимо выполнить следующие действия:

  1. Создать объект PSPHOSTPaymentInfo. Этот объект должен содержать обязательные параметры для открытия платежной формы:
    • projectID — идентификатор проекта, полученный от PSPHost при интеграции;
    • paymentID — идентификатор платежа, уникальный в рамках проекта;
    • paymentAmount — сумма платежа в дробных единицах валюты без десятичной точки и пробелов;
    • paymentCurrency — валюта платежа в формате ISO-4217 alpha-3.

    Пример объекта PSPHOSTPaymentInfo, который содержит только обязательные параметры:

    PSPHOSTPaymentInfo paymentInfo = new PSPHOSTPaymentInfo(
                   115, // идентификатор проекта, полученный от PSPHost при интеграции
                   "internal_payment_id_1", // идентификатор платежа, уникальный в рамках проекта
                   1999, // сумма платежа в дробных единицах валюты
                   "USD" // валюта платежа в формате ISO-4217 alpha-3
                   );
    Дополнительно могут использоваться следующие объекты и параметры:
    • recurrentInfo — объект с информацией о повторяемой оплате (подробнее).
    • paymentDescription — описание платежа (данный параметр доступен не только мерчанту, но и пользователю; если параметр paymentDescription передан в запросе, он отображается в платежной форме в диалоговом окне с информацией о платеже; если параметр не передан в запросе, пользователю он не виден).
    • customerID — идентификатор пользователя, уникальный в рамках проекта.
    • regionCode — код страны пользователя в формате ISO 3166 alpha-2.
    • ActionType — тип действия. Допустимые значения: Sale (по умолчанию), Auth, Verify и Tokenize.
    • token — токен карты.
    • forcePaymentMethod — идентификатор платежного метода, который следует открыть в платежной форме. Если этот параметр задан, то страница выбора метода не отображается и пользователю не предоставляется возможность выбрать платежный метод. Список идентификаторов платежных методов приведен в разделе Коды поддерживаемых платежных методов на Payment Page.
    • hideSavedWallets — параметр, позволяющий управлять отображением сохраненных ранее платежных инструментов и при необходимости скрывать сохраненные платежные инструменты в платежной форме. Возможные значения:
      • true — сохраненные ранее платежные инструменты скрыты, они не отображаются при открытии платежной формы.
      • false — сохраненные ранее платежные инструменты отображаются при открытии платежной формы.
    • PSPHOSTScreenDisplayMode — объект, позволяющий управлять отображением финальной страницы оплаты и при необходимости скрывать ее. В объекте возможно передавать следующие параметры:
      • hide_success_final_page — финальная страница с сообщением о совершенном платеже не отображается в платежной форме,
      • hide_decline_final_page — финальная страница с сообщением об отклоненном платеже не отображается в платежной форме.

      Пример передачи в запросе параметров hide_success_final_page и hide_decline_final_page:

      // Init PSPHOSTPaymentInfo
       
      paymentInfo.addPsphostScreenDisplayMode("hide_success_final_page")
                 .addPsphostScreenDisplayMode("hide_decline_final_page");
    Пример объекта PSPHOSTPaymentInfo, который содержит необязательные параметры (описание платежа, идентификатор и страну пользователя):
    PSPHOSTPaymentInfo paymentInfo = new PSPHOSTPaymentInfo(
                      115, // идентификатор проекта, полученный от PSPHost при интеграции
                      "internal_payment_id_1", // идентификатор платежа, уникальный в рамках проекта
                      1999, // сумма платежа в дробных единицах валюты
                      "USD" // валюта платежа в формате ISO-4217 alpha-3
                      "T-shirt with dog print", // описание платежа
                      "10", // идентификатор пользователя, уникальный в рамках проекта
                      "US" // код страны в формате ISO 3166 alpha-2
                       );
  2. Получить строку для подписывания указанных параметров.
    paymentInfo.getParamsForSignature();
  3. Передать сгенерированную строку в серверную часть приложения.
  4. Сгенерировать подпись на стороне серверной части приложения и передать ее в клиентскую часть.
  5. Добавить подпись в объект paymentInfo.
    paymentInfo.setSignature(signature);
  6. Вызвать платежную форму.
    startActivityForResult(PSPHOSTActivity.buildIntent(this,
                        paymentInfo),
                        PAY_ACTIVITY_REQUEST);

Вызов в Kotlin

Для вызова платежной формы необходимо выполнить следующие действия:

  1. Создать объект PSPHOSTPaymentInfo. Этот объект должен содержать обязательные параметры для открытия платежной формы:
    • projectID — идентификатор проекта, полученный от PSPHost при интеграции;
    • paymentID — идентификатор платежа, уникальный в рамках проекта;
    • paymentAmount — сумма платежа в дробных единицах валюты без десятичной точки и пробелов;
    • paymentCurrency — валюта платежа в формате ISO-4217 alpha-3.

    Пример объекта PSPHOSTPaymentInfo, который содержит только обязательные параметры:

    val paymentInfo = PSPHOSTPaymentInfo(
                        115, // идентификатор проекта, полученный от PSPHost при интеграции
                        "internal_payment_id", // идентификатор платежа, уникальный в рамках проекта
                        1999, // сумма платежа в дробных единицах валюты
                        "USD") // валюта платежа в формате ISO-4217 alpha-3
    Дополнительно могут использоваться следующие объекты и параметры:
    • recurrentInfo — объект с информацией о повторяемой оплате (подробнее).
    • paymentDescription — описание платежа (данный параметр доступен не только мерчанту, но и пользователю; если параметр paymentDescription передан в запросе, он отображается в платежной форме в диалоговом окне с информацией о платеже; если параметр не передан в запросе, пользователю он не виден).
    • customerID — идентификатор пользователя, уникальный в рамках проекта.
    • regionCode — код страны пользователя в формате ISO 3166 alpha-2.
    • ActionType — тип действия. Допустимые значения: Sale (по умолчанию), Auth, Verify и Tokenize.
    • token — токен карты.
    • forcePaymentMethod — идентификатор платежного метода, который следует открыть в платежной форме. Если этот параметр задан, то страница выбора метода не отображается и пользователю не предоставляется возможность выбрать платежный метод. Список идентификаторов платежных методов приведен в разделе Коды поддерживаемых платежных методов на Payment Page.
    • hideSavedWallets — параметр, позволяющий управлять отображением сохраненных ранее платежных инструментов и при необходимости скрывать сохраненные платежные инструменты в платежной форме. Возможные значения:
      • true — сохраненные ранее платежные инструменты скрыты, они не отображаются при открытии платежной формы.
      • false — сохраненные ранее платежные инструменты отображаются при открытии платежной формы.
    • PSPHOSTScreenDisplayMode — объект, позволяющий управлять отображением финальной страницы оплаты и при необходимости скрывать ее. В объекте возможно передавать следующие параметры:
      • hide_success_final_page — финальная страница с сообщением о совершенном платеже не отображается в платежной форме,
      • hide_decline_final_page — финальная страница с сообщением об отклоненном платеже не отображается в платежной форме.

      Пример передачи в запросе параметров hide_success_final_page и hide_decline_final_page:

      // Init PSPHOSTPaymentInfo
       
      paymentInfo.addPsphostScreenDisplayMode("hide_success_final_page")
                 .addPsphostScreenDisplayMode("hide_decline_final_page");
    Пример объекта PSPHOSTPaymentInfo, который содержит необязательные параметры (описание платежа, идентификатор и страну пользователя):
    val paymentInfo = PSPHOSTPaymentInfo(
                       115, // идентификатор проекта, полученный от PSPHost при интеграции
                       "internal_payment_id", // идентификатор платежа, уникальный в рамках проекта
                       1999, // сумма платежа в дробных единицах валюты
                       "USD", // валюта платежа в формате ISO-4217 alpha-3
                       "T-shirt with dog print", // описание платежа
                       "10", // идентификатор пользователя, уникальный в рамках проекта
                       "US")  // код страны в формате ISO 3166 alpha-2
  2. Получить строку для подписывания указанных параметров.
    paymentInfo.getParamsForSignature();
  3. Передать сгенерированную строку в серверную часть приложения.
  4. Сгенерировать подпись на стороне серверной части приложения и передать ее в клиентскую часть.
  5. Добавить подпись в объект paymentInfo.
    paymentInfo.signature = signature
  6. Вызвать платежную форму.
    startActivityForResult(
                        PSPHOSTActivity.buildIntent(this,
                        paymentInfo),
                        PAY_ACTIVITY_REQUEST)

Прием результатов

Для получения кода ответа о проведении платежа необходимо переопределить метод onActivityResult в том окне (activity), где вызывается PSPHOSTActivity.

Рис. 10. Прием результатов в Java
@Override
 protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
     super.onActivityResult(requestCode, resultCode, data);
     if (requestCode == PAY_ACTIVITY_REQUEST) {
         switch (resultCode) {
             case PSPHOSTActivity.RESULT_SUCCESS:
                 // В случае успешной оплаты
             case PSPHOSTActivity.RESULT_CANCELLED:
                 // В случае отмены оплаты пользователем
             case PSPHOSTActivity.RESULT_DECLINE:
                 // В случае получения общей ошибки
             case PSPHOSTActivity.RESULT_FAILED:
                 // В случае получения внутренней ошибки
                 break;
         }
 
         if(data != null && data.hasExtra(PSPHOSTActivity.DATA_INTENT_EXTRA_ERROR)) {
            String error = data.getStringExtra(PSPHOSTActivity.DATA_INTENT_EXTRA_ERROR);
         }
 
         if(data != null && data.hasExtra(PSPHOSTActivity.DATA_INTENT_EXTRA_TOKEN)) {
             String token = data.getStringExtra(PSPHOSTActivity.DATA_INTENT_EXTRA_TOKEN);
         }
     }
 }
Рис. 11. Прием результатов в Kotlin
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
      super.onActivityResult(requestCode, resultCode, data)
      if(requestCode == PAY_ACTIVITY_REQUEST) {
          when (resultCode) {
              PSPHOSTActivity.RESULT_SUCCESS -> {}   // В случае успешной оплаты
              PSPHOSTActivity.RESULT_CANCELLED -> {} // В случае отмены оплаты пользователем
              PSPHOSTActivity.RESULT_DECLINE -> {}   // В случае получения общей ошибки
              PSPHOSTActivity.RESULT_FAILED -> {}   // В случае получения внутренней ошибки
          }
 
          val error = data?.getStringExtra(PSPHOSTActivity.DATA_INTENT_EXTRA_ERROR)
          val token = data?.getStringExtra(PSPHOSTActivity.DATA_INTENT_EXTRA_TOKEN)
      }
  }
Табл. 1. Допустимые коды ответов
Код результата Константа результата Значение Описание
0 RESULT_SUCCESS Success Платеж проведен
100 RESULT_DECLINE General decline Платежа отклонен из-за получения общей ошибки от платежной платформы
301 RESULT_CANCELLED Cancelled Платеж отменен пользователем
501 RESULT_FAILED Internal error Возникла внутренняя ошибка

Обработка оповещений

Обзор

При работе с SDK для Android поддерживается использование оповещений, отправляемых платежной платформой PSPHost напрямую к веб-сервису мерчанта, и оповещений, передаваемых вначале от платежной формы к SDK для Android, а затем — от SDK для Android к мобильному приложению мерчанта. В первом случае набор параметров, передаваемых в оповещении, может отличаться в зависимости от установленных настроек (подробнее: Как выглядит оповещение в PSPHost). Во втором случае передается строго определенный набор параметров — данные о статусе, типе и идентификаторе платежа, дате проведения платежа, используемом платежном методе, сумме и валюте платежа:

{
    "payment": {
        "status": "success",
        "type": "purchase",
        "id": "12345",
        "date": "2020-09-11T14:49:18+0000",
        "method": "card",
        "sum": 1000,
        "currency": "USD"
         }
}

Далее представлена информация об этих оповещениях.

Оповещения платежной платформы

При проведении платежа платежная платформа отправляет оповещения на указанный URL. Этот URL необходимо сообщить службе технической поддержки PSPHost. Подробная информация об оповещениях представлена в разделе Оповещения (callbacks) в Payment Page.

Оповещения SDK для Android

Мобильное приложение мерчанта может принимать от SDK для Android оповещения, которые передаются к SDK для Android от платежной платформы. Оповещение отправляется мерчанту до того, как пользователю в платежной форме отображается страница с информацией о результате проведения платежа.

Информация о платеже передается через широковещательные сообщения, которые поступают в приложение мерчанта от SDK для Android. Для получения этой информации мерчанту необходимо выполнить следующие шаги:

  1. Создать приемник широковещательных сообщений — объект BroadcastReceiver.
  2. При поступлении в BroadcastReceiver широковещательных сообщениях от SDK для Android, с помощью ключа PSPHOSTCallbackType.PSPHOST_CALLBACK_PAYMENT_RESULT.getValue() получать из объекта Intent информацию о платеже. Ключ представляет собой константу, предоставляемую PSPHOSTActivity.

Далее представлены примеры реализации BroadcastReceiver для получения информации о результате проведения платежа.

Рис. 12. Java
class YourClass {   
    private BroadcastReceiver mReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            PSPHOSTPaymentData paymentData = intent.getParcelableExtra(PSPHOSTCallbackType.PSPHOST_CALLBACK_PAYMENT_RESULT.getValue());
        }
    };
}
Рис. 13. Kotlin
class YourClass {  
    private val mReceiver: BroadcastReceiver = object : BroadcastReceiver() {
        override fun onReceive(context: Context, intent: Intent) {
            val paymentData: PSPHOSTPaymentData = intent.getParcelableExtra(PSPHOSTCallbackType.PSPHOST_CALLBACK_PAYMENT_RESULT.value)
        }
    }
}

Управление платежными данными

При оплате с помощью платежной карты пользователю необходимо ввести данные карты на платежной форме. Кроме традиционного способа ввода данных (вручную) SDK для Android позволяет сканировать карту, использовать сохраненную карту или токен карты для оплаты.

Оплата с использованием сохраненных данных

Пользователь может сохранить реквизиты карты при совершении оплаты. Тогда при проведении последующих платежей пользователю достаточно лишь выбрать карту из списка сохраненных и ввести значение CVV.

Для обеспечения возможности сохранения данных карты и проведения оплаты по сохраненным данным пользователя в объект PSPHOSTPaymentInfo необходимо добавить параметр customerID, который позволяет привязать список карт к определенному пользователю на стороне платежной платформы. При проведении данного типа платежей SDK для Android отправляет запрос в платежную платформу на получение списка сохраненных карт пользователя и при наличии таковых выводит их на платежной форме. Если пользователь исключает карту из списка сохраненных, то SDK для Android отправляет запрос в платежную платформу на удаление данных из списка сохраненных платежных инструментов.

Оплата с использованием токенов

SDK для Android предоставляет возможность проводить платежи по токену карты. В этом случае на стороне серверной части приложения необходимо обеспечить хранение данных карты пользователя и ее токена. Если заданный токен соответствует карте пользователя, то при проведении оплаты пользователю отображается форма оплаты с предварительно выбранной картой и заполненными данными этой карты, кроме CVV.

При использовании токена для проведения оплат параметр token должен быть включен в список параметров для подписывания.

Для оплаты по токену необходимо задать токен в объекте paymentInfo:

paymentInfo.setToken(token);

Автоматическая генерация токена

Автоматическая генерация токена происходит при проведении первой успешной оплаты по карте, а также при успешной блокировке средств. Сгенерированный токен и время его создания возвращаются в оповещении о проведении платежа.

Рис. 14. Фрагмент оповещения с токеном
"account": {
            "number": "546942******3838",
            "token": "7e12077a71faf915bc4bda60f059854c7df4a46e7573057e52ece0801245666b",
            "type": "mastercard",
            "card_holder": "JOHN SMITH",
            "id": 7279487,
            "expiry_month": "11",
            "expiry_year": "2021"
        },

Генерация токена по запросу

Другим способом генерации токена является отправка запроса на генерацию токена. Для генерации токена необходимо задать Tokenize в типе действия:
Рис. 15. Java
paymentInfo.setAction(PSPHOSTPaymentInfo.ActionType.Tokenize);
Рис. 16. Kotlin
paymentInfo.setAction(PSPHOSTPaymentInfo.ActionType.Tokenize)

Сгенерированный токен и время его создания возвращаются в оповещении о генерации токена.

Проведение платежей

Базовый вариант оплаты

По умолчанию в SDK для Android настроено проведение разовых одностадийных оплат (тип действия Sale). Для проведения данного типа оплат можно использовать приведенные примеры и дополнительно ничего не настраивать.

Разовая двухстадийная оплата

Для проведения разовых двухстадийных оплат необходимо:
  1. Задать значение Auth в типе действия.
    Рис. 17. Java
    paymentInfo.setAction(PSPHOSTPaymentInfo.ActionType.Auth);
    Рис. 18. Kotlin
    paymentInfo.setAction(PSPHOSTPaymentInfo.ActionType.Auth)
  2. Подтвердить списание средств через Dashboard или с помощью запроса на /v2/payment/card/capture.

Подробная информация о проведении оплат с предварительной блокировкой представлена в разделе Блокировка средств.

Повторяемая оплата

SDK для Android поддерживает проведение повторяемых оплат. Такие оплаты бывают трех типов: OneClick, автооплаты и регулярные оплаты. Подробнее о повторяемых оплатах — в разделе Общая информация.

Для проведения повторяемой оплаты необходимо:
  1. Создать объект PSPHOSTRecurrentInfo.
    Рис. 19. Java
    PSPHOSTRecurrentInfo recurrentInfo = new PSPHOSTRecurrentInfo(
                     "R", // тип повторяемой оплаты
                     "20", // день окончания действия подписки
                     "11", // месяц окончания действия подписки
                     "2020", // год окончания действия подписки
                     "M", // периодичность проведения повторяемых оплат
                     "12:00:00", // время проведения повторяемых оплат
                     "12-02-2019", // дата проведения первой повторяемой оплаты
                     "your_recurrent_id"); // идентификатор повторяемой оплаты в проекте
    Рис. 20. Kotlin
    val recurrentInfo = PSPHOSTRecurrentInfo(
                     "R", // тип повторяемой оплаты
                     "20", // день окончания действия подписки
                     "11", // месяц окончания действия подписки
                     "2020", // год окончания действия подписки
                     "M", // периодичность проведения повторяемых оплат
                     "12:00:00", // время проведения повторяемых оплат
                     "12-02-2019", // дата проведения первой повторяемой оплаты
                     "your_recurrent_id"); // идентификатор повторяемой оплаты в проекте
  2. Дополнительно можно задать:

    • Сумму списания. По умолчанию сумма списания равна сумме платежа. Задать другую сумму списания можно в объекте recurrentInfo:
      Рис. 21. Java
      recurrentInfo.setAmount(1000);
      Рис. 22. Kotlin
      recurrentInfo.setAmount(1000)
    • Дат и сумм списания. По умолчанию при повторяемых оплатах средства списываются с карты строго фиксированно по времени и сумме, но можно задать собственное расписание в объекте recurrentInfo:
      Рис. 23. Java
      recurrentInfo.setSchedule(new PSPHOSTRecurrentInfoSchedule[]{
                     new PSPHOSTRecurrentInfoSchedule("10-10-2020",1200),
                     new PSPHOSTRecurrentInfoSchedule("10-11-2020",1000),
                     .....
      });
      Рис. 24. Kotlin
      recurrentInfo.setSchedule(arrayOf(PSPHOSTRecurrentInfoSchedule("10-10-2020",1200),
                                        PSPHOSTRecurrentInfoSchedule("10-11-2020",1000),
                                        .....
      ))
  3. Добавить объект PSPHOSTRecurrentInfo в объект PSPHOSTPaymentInfo.
    Рис. 25. Java
    paymentInfo.setRecurrent(recurrentInfo);
    Рис. 26. Kotlin
    paymentInfo.setRecurrent(recurrentInfo)

Проверка действительности карты

Проверка действительности платежного инструмента используется в случае необходимости проверки карты пользователя без списания средств, а также для сохранения данных карты с целью дальнейшего использования. При проверке карты выполняется списание с карты нулевой суммы.

Для проведения верификации карты необходимо задать Verify в типе действия:

Рис. 27. Java
paymentInfo.setAction(PSPHOSTPaymentInfo.ActionType.Verify);
Рис. 28. Kotlin
paymentInfo.setAction(PSPHOSTPaymentInfo.ActionType.Verify)

Сбор данных о пользователе

Для проведения платежа с использованием платежной формы обычно требуется минимальный набор параметров, при этом для сбора данных о пользователях можно передавать и (или) запрашивать дополнительные данные, например, телефон или электронную почту пользователя. Подробнее — Сбор данных о пользователе.

Для передачи дополнительных данных о пользователе в объекте paymentInfo необходимо задать список дополнительных параметров и их значение. В этом случае переданные данные отображаются на платежной форме в соответствующих полях.
Рис. 29. Java
paymentInfo.setPSPHOSTAdditionalFields(new PSPHOSTAdditionalField[]{
     new PSPHOSTAdditionalField(PSPHOSTAdditionalField.AdditionalFieldType.customer_first_name, "Mark"),
     new PSPHOSTAdditionalField(PSPHOSTAdditionalField.AdditionalFieldType.billing_country, "US"),
     PSPHOSTAdditionalField(aps_account_number, ""),
     PSPHOSTAdditionalField(aps_account_security_code, "")
     .....
});
Рис. 30. Kotlin
paymentInfo.PSPHOSTAdditionalFields = arrayOf(PSPHOSTAdditionalField(
             PSPHOSTAdditionalField.AdditionalFieldType.customer_first_name, "Mark"),
             PSPHOSTAdditionalField(PSPHOSTAdditionalField.AdditionalFieldType.billing_country, "US"),
             PSPHOSTAdditionalField(aps_account_number, ""),
             PSPHOSTAdditionalField(aps_account_security_code, "")
             .....
)

Индивидуальный дизайн

Дизайн платежной формы SDK для Android можно менять:
  • использовать светлую или темную тему,
    Рис. 31. Светлая тема платежной формы
    Рис. 32. Темная тема платежной формы
  • настраивать оформление отдельных элементов.

Использование темы

SDK для Android позволяет использовать две темы платежной формы: светлую (по умолчанию) и темную. Для смены темы необходимо установить:
Рис. 33. Java
PSPHOSTTheme theme = PSPHOSTTheme.getDarkTheme();
startActivityForResult(PSPHOSTActivity.buildIntent(this,
               paymentInfo,
               theme),
               PAY_ACTIVITY_REQUEST);
Рис. 34. Kotlin
val theme = PSPHOSTTheme.getDarkTheme()
startActivityForResult(
   PSPHOSTActivity.buildIntent(
               this,
               paymentInfo,
               theme
    ),
    PAY_ACTIVITY_REQUEST
 )

Настройка оформления отдельных элементов

Также можно настраивать цветовое оформление отдельных элементов. Например:
Рис. 35. Java
theme.fullScreenBackgroundColor = Color.GREEN;
theme.showShadow = false;
Рис. 36. Kotlin
theme.fullScreenBackgroundColor = Color.GREEN
theme.showShadow = false
Оформление платежной формы можно настраивать с помощью следующих параметров:
  • overlayColor — цвет затемнения открытой области платежной формы,
  • statusBarColor — цвет строки состояния,
  • modalBackgroundColor — цвет фона модального окна,
  • fullScreenBackgroundColor — цвет фона платежной формы в полноэкранном режиме,
  • headingTextColor — цвет текста заголовка,
  • menuTextColor — цвет текста кнопок в заголовке модального окна,
  • fieldTextColor — цвет текста дополнительных полей, названий платежных методов и данных на странице с информацией о результате проведения платежа,
  • fieldPlaceholderTextColor — цвет заполнителей полей,
  • fieldImageTintColor — цвет иконок в полях ввода при оплате новой картой и в поле CVV,
  • fieldBackgroundColor — цвет кнопок платежных систем и поля CVV,
  • fieldUnderlineSelectedColor — цвет нижней линии полей ввода при выборе поля в фокус,
  • fieldUnderlineDefaultColor — цвет нижней линии полей ввода по умолчанию,
  • fieldUnderlineErrorColor — цвет нижней линии полей ввода при неуспешной проверке заполненного поля,
  • navigationBarItemsColor — цвет кнопок панели навигации,
  • navigationBarColor — цвет панели навигации,
  • primaryTintColor — основной цвет кнопок и иконок платежной формы,
  • secondaryTintColor — вспомогательный цвет платежной формы,
  • actionButtonDisableBackgroundColor — цвет заблокированной кнопки,
  • actionButtonDisableTextColor — цвет текста на заблокированной кнопке,
  • actionButtonTextColor — цвет текста на активной кнопке,
  • supportiveTextColor — цвет вспомогательного текста,
  • secureKeyboardTextColor — цвет цифр экранной клавиатуры,
  • showShadow — включение тени кнопок платежных методов и сохраненных карт на странице выбора платежных методов,
  • showLightLogo — включение светлых логотипов при использовании темной темы.