Пользователям предоставляется возможность привязать к профлю новую карту с помощью вызова пополнения счета на 1 рубль с непосредственным вводом данных карты. После успешного пополнения на 1 рубль средства возвращаются обратно пользователю на счет, а в БД фиксируется новый ребилл.
Метод является частичным реюзом метода w_creditcard_init.
Работа осуществляется с использованием протокола https, все параметры передаются на сервер процессинга в кодировке UTF-8.
Работа ведется асинхронно:
- с сервера ЛитРес запрашивается URL для https-запроса и параметры этого запроса;
- от пользователя получается вся необходимая информация;
- посылается https-запрос на сервер карточного процессинга. Процессинг проверяет корректность введенных данных и возвращает «ок» (что не означает списание средств, но только факт приема транзакции «в обработку»);
- приложение проверяет статус транзакции, периодически опрашивая сервер ЛитРес (r_check_order). Как правило, транзакция закрывается (либо мы получаем отказ) в течение 5-30 секунд;
- после получения ответа от сервера ЛитРес о статусе транзакции пользователь уведомляется о результатах операции. Если транзакция не была закрыта (статус все еще pending, см. r_check_order) в течение 5 минут, следует сообщить пользователю об ошибке.
В случае, если в ответе процессинга получен ErrorCode со значением «6001», то это означает, что плательщик должен пройти дополнительную 3DS-авторизацию на сайте банка-эмитента. Для этого необходимо перенаправить плательщика на сайт банка-эмитента, дождаться авторизации, а затем корректно завершить процесс списания средств на стороне мобильного приложения. Документацию по 3DS-авторизации, описывающую, куда именно необходимо перенаправлять пользователя и с какими параметрами, можно получить в поддержке платежной системы PayOnline (http://www.payonline.ru/feedback/) или в технической поддержке ЛитРес.
ID функции
w_add_new_creditcard
Кто может вызывать
Авторизованный пользователь.
Авторизованное приложение.
Принимаемые параметры
Нет
Возвращаемые значения
url – https адрес сервера, на который следует отправлять запрос. Приложение обязано проверить, что URL указывает именно на HTTPS ресурс. Для каждого обращения к оплате следует заново совершать этот запрос и заново получать URL;
method – метод запроса. Может принимать значения:
- POST – на url надо отправить POST запрос;
- GET – на url надо отправить GET запрос;
- Redirect – необходимо перенаправить пользователя на url для проведения оплаты;
name – имя кредитного процессинга. Можно продемонстрировать пользователю вместе с доменом из URL;
homepage – домашняя страница кредитного процессинга;
order_id – номер заказа, к которому будет привязана данная транзакция;
term_url – (параметр используется при 3DS-авторизации) – это URL страницы на сервере ЛитРес, которая умеет обрабатывать результат авторизации плательщика на сайте банка-эмитента и выдавать результат в виде веб-формы с «автосабмитом» на адрес платежной системы;
params – массив параметров для трансляции на процессинг-сервер:
- name – имя параметра, которое следует передать на сервер процессинга. Обязательный атрибут;
- substitute – необязательный атрибут, указывающий, что данный параметр приложению следует заполнить самостоятельно, используя введенные пользователем данные. Если атрибута substitute нет, приложению следует транслировать значение параметра на сервер процессинга (т .е. даже пустой параметр следует передать как пустой, а не пропускать, остальные передать, при необходимости кодируя в UTF-8). При запросе типа операции rebill параметров с атрибутом substitute быть не должно. Приложение при этом просто транслирует запрос на процессинг-сервер. Может принимать следующие значения:
- name – имя владельца карты в том виде, как оно написано на карте, например «vasily pupkin»;
- number – номер кредитной карты, 13-19 цифр, без пробелов и тире;
- expires – дата истечения срока действия карты. Строка в формате MMYY – две цифры месяца и две цифры года;
- cvv – cvv-код карты (печатается на обратной стороне);
- bank – наименование банка, выдавшего карту;
- mail – e-mail пользователя карты, передаваемый в процессинговый центр;
- phone – телефон пользователя карты;
- country – страна плательщика, 2 символа из ISO-3166, например, RU.
Помимо этого существует несколько параметров, которые могут присутствовать в зависимости от текущих настроек безопасности. Приложению следует запрашивать их у пользователя и передавать на сервер только в том случае, если они присутствовали среди узлов param. Если сервер ЛитРес эти поля не потребовал, приложение их может не запрашивать у пользователя и точно не должно передавать на сервер. Возможные необязательные параметры:
- city – город плательщика. Строка, максимальная длина – 50 символов;
- address – адрес плательщика. Длина – до 150 символов;
- zip – почтовый индекс, только если указали регион – США;
- state – штат, только если указали регион – США;
- security_key – (параметр используется при 3DS-авторизации) – открытый ключ, подтверждающий целостность параметров запроса.
Возможные ошибки
error_code | error_message | Описание |
---|---|---|
101005 | Method not allowed to user | Метод доступен только авторизованным пользователям и приложениям |
Пример запроса на сервер
{ "app": "4", "time": "2020-11-07T16:21:02+03:00", "sha": "b79d8e9993d20da6abe78838d3c7fbf640a4c52956569bef3c685d3453316b5c", "sid": "f121e02084344f06da1a5213999e8fcG", "requests": [ { "func": "w_add_new_creditcard", "id": "new_creditcard" } ] }
Пример ответа сервера
{ "success": true, "time": "2020-11-07T16:21:02+03:00", "new_creditcard": { "success": true, { "catalit-paycard-processing": { "url": "https://secure.payonlinesystem.com/payment/transaction/auth/", "method": "POST", "name": "PayOnline", "homepage": "http://www.payonlinesystem.com/", "terms_url": "http://robot.litres.ru/pages/catalit_credit_card_3ds_result/862703672/", "params": [ {"name":"merchant_id","value":"666"}, {"name":"order_id","value":"555"}, {"name":"amount","value":"100500"}, {"name":"currency","value":"RUR"}, {"name":"security_key","value":"1bc29b36f623ba82aaf6724fd3b16718"}, {"name":"email","value":"","substitute":"mail"}, {"name":"cardholdername","value":"","substitute":"name"}, {"name":"cardnumber","value":"","substitute":"number"}, {"name":"cardexpdate","value":"","substitute":"expires"}, {"name":"cardcvv","value":"","substitute":"cvv"}, {"name":"country","value":"","substitute":"country"}, {"name":"city","value":"","substitute":"city"}, {"name":"zip","value":"","substitute":"zipcode"}, {"name":"address","value":"","substitute":"address"}, {"name":"state","value":"","substitute":"state"}, {"name":"phone","value":"","substitute":"phone"}, {"name":"issuer","value":"","substitute":"issuer"} ] } } } }