Отличие от обычной схемы работы заключается в том, что платеж инициируется вызовами методов API без вывода дополнительных WEB страниц. Для этого передается дополнительный параметр background cо значением “1”. На данный момент по описанной схеме возможно проведение оплаты по токенам карт, через QIWI и мобильный платеж для операторов Билайн, МТС, Мегафон и ТЕЛЕ2.
Для получения списка доступных способов которые могут иницироваться в фоновом режиме необходимо отправить GET запрос на: https://partner.rficb.ru/alba/pay_types
Со следующими параметрами:
Ответ сервиса приходит в виде JSON-строки
где types – доступные для данного сервиса способы оплаты
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(); } |
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)) |
1 2 3 | AlbaService service = new AlbaService(SERVICE_ID, "SERVICE_SECRET"); Set<String> paymentTypes = service.paymentTypes(); |
Инициация платежа идет методом отправки формы из кода кнопки плюс параметра background=1 и параметров для аутентификации POST запрос необходимо отправлять на: https://partner.rficb.ru/alba/input/
invoice_data – Данные в формате json для фискального чека (см. API для АТОЛ)
Для аутентификации необходимо передать один из следующих наборов параметров:
или
ВАЖНО: результат инициализации означает создание платежной транзакции. Оплата транзакции отложена по времени, результат оплаты необходимо получать обрабатывая нотификации (сокращенная нотификация, расширенная нотификация) от системы РФИ или формировать запрос на получение статуса транзакции.
ВАЖНО: для операций проведения повторного списания по рекуррентам, операция выполняется синхронно. Положительный ответ гарантирует успешное проведение операции, при этом рекомендуется в любом случае обрабатывать нотификации отправляемые от системы РФИ.
Положительный ответ
{‘status’: ‘success’, ‘tid’: <TID>, 'help':"<текст, который описывает процедуру оплаты через мобильную коммерцию или терминал>"}
{‘status’: ‘success’, ‘tid’: <TID>}
Ответ c ошибкой
{‘status’: ‘error’, ‘code’: ‘<type|auth|data|common|unique>’, ‘msg’: ”}
Где message это текстовое описание ошибки, а code – тип:
Положительный ответ для шлюза 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"} |
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(); } |
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)) |
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) |
После того как транзакция создана, партнер имеет возможность получить информацию по транзакции отправив POST запрос на https://partner.rficb.ru/alba/details В запросе необходимо передать (версия протокола 2.0):
Либо можно отправить GET запрос по тому же адресу с параметрами (УСТАРЕВШЕЕ):
Ответ c ошибкой:
1 | {'status': 'error', 'code': '<auth|common|method>', 'msg': ''} |
Где msg это текстовое описание ошибки, а code – тип:
Положительный ответ:
1 | {"status": "success", "order_id": "<order_id>", "partner_income": <доход магазина>, "help": "<текст, который описывает процедуру оплаты через мобильную коммерцию или терминал>", "service": "<название сервиса>", "transaction_status": '<open|error|payed|success>', "tid": "<TID>", "service_id": "<id сервиса>", "income_total": <сумма операции>} |
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(); } |
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)) |
1 2 | // response - ответ, полученный при инициации платежа TransactionDetails details = alba.transactionDetails(response.getSessionKey()); |
см. Передача данных от системы Банка