Платежи с банковских карт без авторизации

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

API предназначено для:
  • оплаты товаров и услуг с любой банковской карты — без авторизации пользователя в Яндекс.Деньгах;
  • сохранения информации о банковских картах — для повторных платежей без ввода полных данных карточки;
  • использования на персональных устройствах пользователей и встраивания в различные приложения для мобильных устройств.
API позволяет:
  • проводить оплату товаров и услуг в магазинах, подключенных к Яндекс.Деньгам;
  • пополнять счета пользователей Яндекс.Денег;
  • сохранять информацию об одной или нескольких банковских картах и использовать ее при следующих платежах.
Что нужно для начала работы:
  1. Зарегистрировать приложение и получить client_id (идентификатор приложения).
  2. Подключиться к Яндекс.Кассе (для юридических лиц и ИП) или создать кошелек в Яндекс.Деньгах (для частных лиц).

Сценарии использования

Регистрация экземпляра приложения

Перед проведением первого платежа нужно зарегистрировать в Яндекс.Деньгах копию приложения, установленную на устройстве, и получить идентификатор экземпляра приложения — instance_id. Для регистрации экземпляра следует вызвать метод instance-id.

Что нужно знать об идентификаторе:
  • получается только один раз;
  • запоминается в устройстве в безопасном месте (нельзя сохранять на SD-карту, следует использовать KeyChain или SharedPreferences);
  • передается как параметр для всех остальных функций;
  • удаляется с устройства вместе с приложением.

Общий сценарий платежа

  1. Платежи проводятся на основе шаблона платежа с указанием пользовательских параметров. У каждого магазина свой набор таких параметров, поэтому приложение должно отобразить пользователю форму с запросом той информации, которая нужна конкретному магазину. Например: сумма платежа, номер телефона, номер договора и так далее.
  2. Приложение отправляет запрос платежа request-external-payment, содержащий идентификатор шаблона платежа и параметры, введенные пользователем. Сервер Яндекс.Денег проверяет параметры платежа и возвращает идентификатор контекста платежа (request_id).
  3. Если пользователь подтвердил платеж, приложение отправляет запрос на проведение платежа (process-external-payment) c указанием идентификатора контекста платежа (request_id).
Обратите внимание: приложению может потребоваться повторный вызов метода process-external-payment. Метод следует вызывать вплоть до завершения процесса оплаты. Это может потребовать дополнительных действий пользователя в WebView. Повторные вызовы нужны, если:
  • требуется ввод данных банковской карты на странице Яндекс.Денег в WebView;
  • требуется переход на страницу банка-эквайера для подтверждения транзакции по 3-D Secure;
  • обработка платежа еще не завершена;
  • в процессе оплаты оборвалось интернет-соединение.
Правила обработки платежа:
  1. Деньги списываются с банковской карты при вызове метода process-external-payment.
  2. При повторном вызове process-external-payment метод возвращает состояние ранее проведенного платежа.
  3. В случаях обрыва интернет-соединения, таймаутов или иных сетевых ошибок приложению следует повторять вызов с теми же параметрами.

Первый платеж

  1. Приложение отправляет запрос платежа request-external-payment, содержащий идентификатор шаблона платежа и пользовательские параметры. Сервер Яндекс.Денег проверяет параметры платежа и возвращает идентификатор контекста платежа (request_id).
  2. Приложение отправляет запрос на проведение платежа (process-external-payment) c указанием идентификатора контекста платежа (request_id). Сервер Яндекс.Денег отвечает требованием открыть WebView по ссылке (status=ext_auth_required, acs_uri, acs_params).
  3. Приложение открывает WebView и переходит на адрес acs_uri. После этого:
    1. Пользователь вводит данные банковской карты на странице Яндекс.Денег.
    2. При необходимости — проходит аутентификацию по технологии 3-D Secure на странице банка-эквайера.
    3. Пользователь возвращается на ext_auth_success_uri (если данные банковской карты приняты к обработке) или ext_auth_fail_uri (если данные карты отвергнуты платежным шлюзом).
  4. Приложение повторяет вызовы process-external-payment до получения окончательного статуса платежа (success/refused).
  5. Приложение отображает для пользователя результат оплаты и запрашивает разрешение сохранить данные банковской карты.
  6. Если пользователь согласен сохранить данные карты, приложение повторно отправляет запрос process-external-payment с параметром request_token=true. После этого:
    1. Сервер Яндекс.Денег возвращает данные банковской карты и токен для повторов платежей.
    2. Приложение сохраняет данные банковской карты и токен для повторов платежей в безопасном месте на устройстве.
Данные банковской карты и токен для повторов платежей:
  • запоминаются в устройстве в безопасном месте (нельзя сохранять на SD-карту, можно — в KeyChain и SharedPreferences);
  • удаляются с устройства вместе с приложением.

Платеж по сохраненным данным банковской карты

Такой платеж может потребовать аутентификацию по технологии 3-D Secure в зависимости от политики банка-эквайера, данных об устройстве пользователя или о конкретной транзакции.

Платеж по сохраненным данным банковской карты без аутентификации по 3-D Secure:
  1. Приложение отправляет запрос платежа request-external-payment, содержащий идентификатор шаблона платежа и пользовательские параметры. Сервер Яндекс.Денег проверяет параметры платежа, возвращает идентификатор контекста платежа (request_id).
  2. Приложение повторяет запросы на проведение платежа (process-external-payment) c указанием идентификатора контекста платежа (request_id), токена для повторов и кода CVV2/CVC2 банковской карты до получения окончательного статуса платежа.
Платеж по сохраненным данным банковской карты c аутентификацией по 3-D Secure:
  1. Приложение отправляет запрос платежа request-external-payment, содержащий идентификатор шаблона платежа и пользовательские параметры. Сервер Яндекс.Денег проверяет параметры платежа и возвращает идентификатор контекста платежа (request_id).
  2. Приложение отправляет запрос на проведение платежа (process-external-payment) c указанием идентификатора контекста платежа (request_id), токена для повторов и кода CVV2/CVC2 банковской карты. Сервер Яндекс.Денег отвечает требованием открыть WebView по ссылке (status=ext_auth_required, acs_uri, acs_params).
  3. Приложение открывает WebView и переходит на адрес acs_uri. После этого:
    1. Пользователь проходит аутентификацию по технологии 3-D Secure на странице банка-эквайера.
    2. Пользователь возвращается на ext_auth_success_uri (если транзакция принята к обработке) или ext_auth_fail_uri (если транзакция отвергнута).
  4. Приложение повторяет вызовы process-external-payment до получения окончательного статуса платежа (success/refused).

Список методов