Отличие от обычной схемы работы заключается в том, что платеж инициируется вызовами методов API без вывода дополнительных WEB страниц. Для этого передается дополнительный параметр background cо значением “1”. На данный момент по описанной схеме возможно проведение оплаты по токенам карт, через QIWI и мобильный платеж для операторов Билайн, МТС, Мегафон и ТЕЛЕ2.
Получение списка доступных для сервиса способов оплаты
Для получения списка доступных способов которые могут иницироваться в фоновом режиме необходимо отправить GET запрос на: https://partner.rficb.ru/alba/pay_types
Со следующими параметрами:
- service_id – id сервиса, по которому необходимо получить список доступных способов оплаты
- version – “2.0”
- check – Электронная подпись запроса. См. алгоритм формирования подписи.
Ответ сервиса приходит в виде JSON-строки
- Ответ с ошибкой: {‘status’: ‘error’, ‘code’=’auth’, ‘message’: ‘неверная подпись’}
- Положительный ответ: {‘status’: ‘success’, ‘types’: [‘mc’, ‘qiwi’, 'mtsmoney', 'mtsmoney_test']}
где types – доступные для данного сервиса способы оплаты
- php
1 2 3 4 5 6 7 8 | $service = new AlbaService(SERVICE_ID, 'SERVICE_SECRET'); try { $payTypes = $service->payTypes(); // $payTypes - массив допустимых способов оплаты } catch (AlbaException $e) { echo $e->getMessage(); } |
- python
1 2 3 4 5 6 7 8 | from alba_client import AlbaService, AlbaException service = AlbaService(SERVICE_ID, 'SERVICE_SECRET') try: pay_types = service.pay_types() # pay_types - список допустимых способов оплаты except AlbaException, e: print("Произошла ошибка: {}".format(e)) |
- java
1 2 3 | AlbaService service = new AlbaService(SERVICE_ID, "SERVICE_SECRET"); Set<String> paymentTypes = service.paymentTypes(); |
init_payment
Инициация платежа идет методом отправки формы из кода кнопки плюс параметра background=1 и параметров для аутентификации POST запрос необходимо отправлять на: https://partner.rficb.ru/alba/input/
- cost – стоимость товара/услуги
- name – название платежа
- email – email клиента (для мобильной коммерции параметр не обязательный)
- order_id – уникальный номер заказа или 0
- phone_number – номер телефона клиента
- background – всегда 1
- type – способ оплаты (‘mc’, ‘qiwi’, 'mtsmoney', 'mtsmoney_test'), должен быть доступен.
invoice_data – Данные в формате json для фискального чека (см. API для АТОЛ)
- test – опциональный параметр для тестирования оплаты с счета телефона или кошельков, для тестирования оплаты по картам используйте тестовые наборы карт. Может принимать значения ok или operator_cancel. При наличии параметра, реальных вызовов провайдеров не осуществляется - сразу формируется успешная оплата (для ok) или отказ провайдера (для operator_cancel). Создаваемая транзакция тестовая и выплат по ней не производится.
Для аутентификации необходимо передать один из следующих наборов параметров:
- key – уникальный ключ для сервиса, генерируемый вместе с кнопкой,
или
- service_id – id сервиса
- version – “2.0”
- check – Электронная подпись запроса. См. алгоритм формирования подписи
init_result
ВАЖНО: результат инициализации означает создание платежной транзакции. Оплата транзакции отложена по времени, результат оплаты необходимо получать обрабатывая нотификации (сокращенная нотификация, расширенная нотификация) от системы РФИ или формировать запрос на получение статуса транзакции.
ВАЖНО: для операций проведения повторного списания по рекуррентам, операция выполняется синхронно. Положительный ответ гарантирует успешное проведение операции, при этом рекомендуется в любом случае обрабатывать нотификации отправляемые от системы РФИ.
Положительный ответ
{‘status’: ‘success’, ‘tid’: <TID>, 'help':"<текст, который описывает процедуру оплаты через мобильную коммерцию или терминал>"}
{‘status’: ‘success’, ‘tid’: <TID>}
Ответ c ошибкой
{‘status’: ‘error’, ‘code’: ‘<type|auth|data|common|unique>’, ‘msg’: ”}
Где message это текстовое описание ошибки, а code – тип:
- type – даннный тип оплаты не доступен
- auth – неправильная подпись
- data – неправильно сформированы данные (формат телефона, email)
- common – другие ошибки
- unique - транзакция с таким order_id уже существует
Положительный ответ для шлюза mc:
1 | {'status': 'success', 'tid': 12332, 'help': 'текст, который описывает процедуру оплаты через мобильную коммерцию'} |
Положительный ответ для шлюза spg (рекуррентный платеж по картам):
1 | {"status": "success", "tid": "36619984"} |
Пример отрицательного ответа для шлюза spg (рекуррентный платеж по картам):
1 | {"status": "error", "msg": "Recurrent for service XXXXX/ order YYYYYY has status 'canceled'", "code": "common"} |
- php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | $service = new AlbaService(SERVICE_ID, 'SERVICE_SECRET'); try { $result = $service->initPayment( 'mc', // способ оплаты 10, // сумма 'Test', // название платежа '71111111111' // телефон клиента False, // order_id (необязательный параметр) 'partner', // комиссия (необязательный параметр) ); if ("success" === $result->status) { echo "Успешная инициация транзакции id = " . $result->tid; } else { echo $result->message; } } catch (AlbaException $e) { echo $e->getMessage(); } |
- python
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | from alba_client import AlbaService, AlbaException service = AlbaService(SERVICE_ID, 'SERVICE_SECRET') try: result = service.init_payment( pay_type='mc', cost=10, name='Test', phone='71111111111', commission='partner' ) if result['status'] == "success": print("Успешная инициация транзакции {}".format(result['tid'])) else: print(result['message']) except AlbaException, e: print("Произошла ошибка: {}".format(e)) |
- java
1 2 3 4 5 6 7 8 9 10 11 12 | AlbaService service = new AlbaService("SERVICE_KEY"); InitPaymentRequest request = new InitPaymentRequest() .builder() .setPaymentType("mc") .setCost(new BigDecimal(10.5)) .setName("Test") .setPhone("71111111111") .build(); InitPaymentResponse response = service.initPayment(request) |
tr_status
После того как транзакция создана, партнер имеет возможность получить информацию по транзакции отправив POST запрос на https://partner.rficb.ru/alba/details В запросе необходимо передать (версия протокола 2.0):
- version – “2.0”
- tid - id транзакции
- check – Электронная подпись запроса. См. приложение №1
Либо можно отправить GET запрос по тому же адресу с параметрами (УСТАРЕВШЕЕ):
- api_key – ключ авторизации (https://home.rficb.ru/apikeys/)
- tid – id транзакции
Ответ c ошибкой:
1 | {'status': 'error', 'code': '<auth|common|method>', 'msg': ''} |
Где msg это текстовое описание ошибки, а code – тип:
- auth – неправильная подпись
- common – другие ошибки
Положительный ответ:
1 | {"status": "success", "order_id": "<order_id>", "partner_income": <доход магазина>, "help": "<текст, который описывает процедуру оплаты через мобильную коммерцию или терминал>", "service": "<название сервиса>", "transaction_status": '<open|error|payed|success>', "tid": "<TID>", "service_id": "<id сервиса>", "income_total": <сумма операции>} |
- php
1 2 3 4 5 6 7 8 | $service = new AlbaService(SERVICE_ID, SERVICE_SECRET); try { $details = $service->transactionDetails(TRANSACTION_ID); echo 'Статус транзакции: ' . $details->transaction_status; } catch (AlbaException $e) { echo $e->getMessage(); } |
- python
1 2 3 4 5 6 7 8 | from alba_client import AlbaService, AlbaException service = AlbaService(SERVICE_ID, 'SERVICE_SECRET') try: details = service.transaction_details(TRANSACTION_ID) print('Статус транзакции: {}'.format(details['transaction_status'])) except AlbaException, e: print("Произошла ошибка: {}".format(e)) |
- java
1 2 | // response - ответ, полученный при инициации платежа TransactionDetails details = alba.transactionDetails(response.getSessionKey()); |