Общая информация (API Reference)
Введение (intro)
Точка входа для создания транзакций
https://secure.mandarinpay.com/api/transactions
Точка входа для создания привязок
https://secure.mandarinpay.com/api/card-bindings
API Mandarinpay базируется на технологии REST API. В системе используются ресурсо-ориентированные точки входа (endpoints), а все ответы, возвращаемые системой имеют формат JSON.
API Mandarinpay является асинхронным (незначительная часть запросов работает синхронно) - на ваш запрос вы синхронно получите id платежа (запроса), а затем в асинхронном режиме получите callback уведомление, включающее полученный ранее id платежа (запроса), а также статус операции и прочие данные по ней.
Для того, чтобы вы могли максимально протестировать API, проекты в системе имеют тестовый (sandbox) и боевой режим. Авторизационные данные (merchant id, secret) находятся в настройках проекта в вашем Личном кабинете на сайте mandarinpay.com (Подробная инструкция). Запросы, создаваемые в рамках sandbox-режима не никогда передаются в банковские информационные системы и, как следствие, не приводят к возникновению затрат.
Тестовые карты (test cards)
Данные тестовых карт для проверки работоспособности в sandbox-режиме (срок действия любой, позднее текущего месяца в формате ММ/ГГ)
| Параметр | Значение | Комментарий |
|---|---|---|
| Номер карты | 4929509947106878 | Для имитации успешных транзакций без 3DSecure |
| Номер карты | 4692065455989192 | Для имитации успешных транзакций с 3DSecure |
| Номер карты | 4485913187374384 | Для имитации неуспешных транзакций без 3DSecure |
| Номер карты | 4556058936309366 | Для имитации неуспешных транзакций с 3DSecure |
| Номер карты | 5192618384533242 | Для имитации интерактивной оплаты с принудительным переводом карты в payout-only |
| Имя держателя карты | CARD HOLDER | |
| CVV | 123 |
Мониторинг во время отладки (heartbeat)
Для мониторинга транзакци/колбэков во время отладки лучше всего использовать HeartBeat.
Для входа используйте MerchantID и Secret в качестве логина и пароля соответственно.
HeartBeat - Транзакции - Мониторинг транзакций
HeartBeat - Привязки - Мониторинг привязок банковских карт
HeartBeat - Уведомления - Мониторинг callback-уведомлений, по которым наша система не получила от вашей 200й ответ - подробнее
Авторизация (Authentication)
Авторизация запросов к API Mandarinpay осуществляется двумя способами:
Все запросы к API должны осуществляться через HTTPS. Запросы с HTTP будут отклоняться без создания транзакции.
HTTP Basic Auth
Подробнее о Basic Auth можно прочитать в Wikipedia.
В случае Mandarinpay в качестве логина используется merchantId, а в качестве пароля значение secret.
Авторизация через хэш (X-auth)
Пример расчета X-Auth
<?php
function gen_auth($merchantId, $secret)
{
$reqid = time() ."_". microtime(true) ."_". rand();
$hash = hash("sha256", $merchantId ."-". $reqid ."-". $secret);
return $merchantId ."-".$hash ."-". $reqid;
}
?>
public static string GenerateXAuth(string secret)
{
var requestId = Guid.NewGuid().ToString("N");
string hash;
using (var sha256 = System.Security.Cryptography.SHA256.Create())
hash = BitConverter.ToString(sha256.ComputeHash(Encoding.UTF8.GetBytes($"{merchantId}-{requestId}-{secret}"))).ToLower().Replace("-", "");
return $"{merchantId}-{hash}-{requestId}";
}
Запрос должен быть с заголовком Content-Type: application/json
Авторизация запросов к API происходит путем использования API Secret Key и вашего Merchant ID для формирования заголовка X-Auth следующего содержания:
merchantId-SHA256(merchantId-requestId-secret)-requestId
requestId - уникальный номер запроса, представляющий из себя текущий таймстамп в миллисекундах, либо набор байт, сгенерированный криптографически-надёжным генератором случайных числел.
API запросы без заголовка или с некорректным заголовком, в том числе некорректным X-Auth будут отклонены без создания транзакций.
Для проверки корректности расчета X-Auth можете воспользоваться данной утилитой.
Синхронные ответы (Response codes)
Примеры ответов
200-OK - Запрос обработан корректно, транзакция создана
Для транзакции
{
"id": "43913ddc000c4d3990fddbd3980c1725",
"userWebLink": "https://secure.mandarinpay.com/Pay?transaction=0eb51e74-e704-4c36-b5cb-8f0227621518",
"jsOperationId": "9874694yr87y73e7ey39ed80"
}
Для привязки
{
"id": "0eb51e74-e704-4c36-b5cb-8f0227621518",
"userWebLink": "https://secure.mandarinpay.com/CardBindings/New?id=0eb51e74-e704-4c36-b5cb-8f0227621518",
"jsOperationId": "binding-4994591t5-194t694159t-43t5345"
}
400-Bad Request - Запрос некорректен, транзакция не создана
{
"error": "Invalid request"
}
Mandarinpay использует стандартные HTTP коды для индикации успешности или неуспешности API запросов. В общем случае коды формата 2хх означают успешность, коды формата 4xx говорят о неуспешности запроса в связи с предоставленной информацией (отсутствие нужного формата, неверно сформированный заголовок и т.д.), коды в формате 5хх говорят о неисправности на стороне сервера Mandarinpay (довольно редкий случай).
Перечень полей и их описание
| Поле | Описание |
|---|---|
| id | id созданной операции |
| userWebLink | Ссылка для перенаправления пользователя при работе с платежной страницей |
| jsOperationId | Идентификатор операции для использования с CustomPay |
| error | Текстовое описание ошибки |
После получения прямого ответа существует три варианта развития событий:
- Для использования платежной страницы - Перенаправить пользователя по ссылке, полученной в качестве
userWebLink- см. здесь - Для использования встроенной формы CustomPay - Использовать значение из
jsOperationIdв качествеOperationIdв соответствии с описанием - см. здесь - В отдельных ситуациях дальнейшие действия не требуются. В этом случае в синхронном ответе будет получен только
id.
Асинхронные ответы (Callback)
Пример callback-уведомления об оплате
merchantId=1&orderId=03917&email=sadukin%40mail.ru&price=11040&action=pay&customer_fullName=%20%20&customer_phone=%2B79189271304&customer_email=sadykin%40mail.ru&transaction=60a186c112e24b90ad839bb7bc65a9ff&object_type=transaction&status=success&payment_system=mandarinpayv1&card_number=403841XXXXXX6022&cb_customer_creditcard_number=403841XXXXXX6022&card_holder=RUSLAN%20SADYKOV&card_expiration_year=19&card_expiration_month=05&transaction_rrn=718791158407&d000d97e-a0db-4e56-9460-6934e4bec050=4d3bb82f-fd4f-43c6-b809-2aec91e0de8a&sign=ca3f0443a3fc60d96d2197f8dbf93deb5d6e3922a5854ed526e2c11ca723eb3
Пример callback-уведомления о привязке
card_binding=abbd431d-fb01-4bf9-9eb9-773b794c2df9&card_holder=RULSAN%20MALYGIN&card_number=427638XXXXXX3811&card_expiration_year=2018&card_expiration_month=11&object_type=card_binding&status=success&merchantId=1&initial_hold_amount=1&orderId=1147710&f9d6c9d1-f4d4-4a3e-8ccf-9421eb483792=0ac5dff9-7aea-4d2f-90ac-c16d730cf2a1&sign=ee8d74a8b80c407a662dcf3ddf2260ba9de0cbb0bb455e8a429b7035205782c6
Пример callback-уведомления со статусом payout-only
card_binding=abbd431d-fb01-4bf9-9eb9-773b794c2df9&card_holder=RULSAN%20MALYGIN&card_number=427638XXXXXX3811&card_expiration_year=2018&card_expiration_month=11&object_type=card_binding&status=payout-only&merchantId=1&initial_hold_amount=1&orderId=1147710&f9d6c9d1-f4d4-4a3e-8ccf-9421eb483792=0ac5dff9-7aea-4d2f-90ac-c16d730cf2a1&sign=ee8d74a8b80c407a662dcf3ddf2260ba9de0cbb0bb455e8a429b7035205782c6
Пример проверки
sign
<?php
function check_sign($secret, $req)
{
$sign = $req['sign'];
unset($req['sign']);
$to_hash = '';
if (!is_null($req) && is_array($req)) {
ksort($req);
$to_hash = implode('-', $req);
}
$to_hash = $to_hash .'-'. $secret;
$calculated_sign = hash('sha256', $to_hash);
return $calculated_sign == $sign;
}
check_sign("123", $_POST);
?>
public static string Calculate(string secret, IDictionary<string, string> values)
{
using (var sha256 = System.Security.Cryptography.SHA256.Create())
return BitConverter.ToString(sha256.ComputeHash(Encoding.UTF8.GetBytes(string.Join("-", values.OrderBy(x => x.Key, StringComparer.Ordinal).Select(x => x.Value)) + "-" + secret))).ToLower().Replace("-", "");
}
public static bool CheckSign(string secret, HttpRequest request)
{
var sign = request.Form["sign"];
if(string.IsNullOrWhiteSpace(sign))
return false;
return sign ==
Calculate(secret, request.Form.Keys.Where(k => k != "sign").ToDictionary(k => k, k => request.Form[k]));
}
Уведомления высылаются на CallbackUrl, указанный в клиентском интерфейсе или переданный в теле API запроса, в теле POST-запроса с Content-Type: application/x-www-urlencoded.
Для подтверждения того, что уведомление пришло именно от системы MandarinPay, а также тот факт, что данные переданные в уведомлении не были искажены, необходимо проверять значение поля sign.
Поле sign представляет из себя SHA256-сумму от значений всех параметров уведомления, отсортированных алфавитно по именам и Secret, разделённых символом -.
Для проверки правильности расчета sign можете воспользоваться данной утилитой.

- Вставьте тело
callbackв поле (1); - Вставьте
Secretв поле (2); - Значение
Signбудет рассчитано автоматически в поле (3).
В качестве ответа, обозначающего, что callback успешно обработан на вашей стороне, необходимо вернуть в MandarinPay ответ с HTTP-код 200 и телом OK.
В зависимости от значения object_type уведомления бывают следующих видов:
| Тип | Описание |
|---|---|
card_binding |
привязка карты |
transaction |
транзакция |
Перечень и описание полей, передаваемых в составе callback-уведомления
| Поле | Пример | Описание |
|---|---|---|
merchantId |
1 |
Id мерчанта |
orderId |
1234OR |
Уникальный номер заказа в системе Продавца. |
price |
12.34 |
Сумма платежа. Обязательна к передаче в текущей версии системы. |
action |
pay, payout |
Действие (покупка или выплата на карту) - актуально только для транзакций |
transaction |
05991602ed7c47d996ca7ab119b07f66 |
ID транзакции в системе - актуально только для транзакций |
card_binding |
38467cb0-da73-4755-84da-2acb7f638a59 |
ID привязки в системе - актуально только для привязок |
status |
success, failed, payout-only |
Статус операции |
customer_email |
user@example.com |
Email пользователя |
customer_phone |
+71234567890 |
Телефон пользователя |
card_holder |
VASILY PUPKIN |
Держатель карты |
card_number |
123456XXXXXX7890 |
Номер карты |
card_expiration_year |
18 |
Год срока действия карты |
card_expiration_month |
9 |
Месяц срока действия карты |
error_code |
59 |
Код ошибки |
error_description |
Transaction Declined |
Описание ошибки |
transaction_rrn |
704191744222 |
Retrieval Reference Number - уникальный идентифкатор транзакции в системе Банка-эмитента банковской карты |
ID Платежа (PaymentID)
Каждый вызов API имеет ассоциируемый с ним идентификатор, который называется ID платежа (PaymentID) и передается в составе прямого ответа в качестве id. Он также присутствует в составе callback-уведомления в качестве значения transaction или card_binding.
ID платежа также доступен в таблице транзакций в вашем личном кабинете на сайте mandarinpay.com (см. скриншот) и в интерфейсе Heartbeat.
При обращении в Службу поддержки касаемо конкретного платежа наличие данного идентификатора существенно ускорит получение ответа
Пользовательский интерфейс (User Interfaces)
Платежная страница (Payment Page)
Платежная страница Mandarinpay имеет адаптивный дизайн, содержит ваш логотип, а также информацию о платеже, переданную вами в API запросе.
Для работы с платежной страницей вам необходимо использовать перенаправление пользователя на userWebLink, полученный в синхронном ответе на ваш API запрос см. здесь
Встроенная форма оплаты (CustomPay)
Пример формы
<form id="form-hosted-pay">
<div style="margin: 10px; padding: 10px; border: 1px solid gray">
Card Number:
<div class="mandarinpay-field-card-number hosted-field"><div class="glyphicon glyphicon-check"></div></div>
Card Holder:
<div class="mandarinpay-field-card-holder hosted-field"><div class="glyphicon glyphicon-check"></div></div>
Card Expiration:
<div class="mandarinpay-field-card-expiration hosted-field"><div class="glyphicon glyphicon-check"></div></div>
CVV:
<div class="mandarinpay-field-card-cvv hosted-field"><div class="glyphicon glyphicon-check"></div></div>
<br/>
<a href="#" onclick="return mandarinpay.hosted.process(this);" class="btn btn-default">Оплатить</a>
</div>
</form>
Инициализация (подключение) скрипта
<script>
mandarinpay.hosted.setup("#form-hosted-pay", {
operationId: "9874694yr87y73e7ey39ed80",
onsuccess: function(data) {
alert("Success, id: " + data.transaction.id);
},
onerror: function(data) {
alert("Error: " + data.error);
}
});
</script>
CSS для полей
.hosted-field
{
background: #f0f0f0;
height: 40px;
padding: 5px;
border: 1px solid gray;
border-radius: 10px;
}
.hosted-field {
position: relative;
}
.hosted-field .glyphicon {
visibility: hidden;
position: absolute;
right: 5px;
top: 5px;
color: green;
float: right;
}
.mandarinpay-field-state-error
{
background: #fff0f0;
border: 1px solid #900000;
}
.mandarinpay-field-state-focused
{
background: #ffffff;
border: 1px solid yellowgreen;
}
.mandarinpay-field-state-valid {
background: #c0ffc0 !important;
border: 1px solid green !important;
}
.mandarinpay-field-state-valid .glyphicon{
visibility: visible;
}
Встроенная форма оплаты CustomPay позволяет осуществить полноценную интеграцию в ваш интерфейс, при этом отсутствует требование к Вам по соответствию стандарту безопасности банковских карт PCI DSS.
CustomPay базируется на форме с полями, которые на самом деле являются отдельными страницами в iframe-ах. Соответственно, вы можете стилизовать всё, что эти самые iframe-ы окружает.
Логически такая форма состоит из 2 частей:
- набор div-ов с классами
mandarinpay-field-card-number,mandarinpay-field-card-holder,mandarinpay-field-card-expirationиmandarinpay-field-card-cvv, внутрь этих div-ов будут помещены iframe-ы - Javascript-а, запускающего процесс установки iframe-ов и обрабатывающего нажатие на кнопку
Для начала работы необходимо подключить <script src="https://secure.mandarinpay.com/api/hosted.js"></script>, затем вызвать mandarinpay.hosted.setup, передав ему селектор формы, а так же функции для вызова при успехе либо ошибке. В обработчике события нажатия на кнопку следует вызвать return mandarinpay.hosted.process(this); (вместо this можно использовать селектор формы).
В качестве operationId необходимо передать значение, полученное в прямом ответе Mandarinpay в поле jsOperationid - см. здесь
По мере взаимодействия формы с пользователем div-ам могут быть присвоены классы mandarinpay-field-state-error, mandarinpay-field-state-focused и mandarinpay-field-state-valid.
Пример:

Стилизация текстовых полей
Стилизация осуществляется посредством добавления соответствующего поля в объект, передаваемый mandarinpay.hosted.setup. Для изменения доступны плейсхолдер и ряд CSS-стилей
Пример стилизации
mandarinpay.hosted.setup("#form-hosted-pay",
{
onsuccess: function(data) {alert("Success, id: " + data.transaction.id);},
onerror: function(data) {alert("Error: " + data.error);},
fields:
{
"card-number": {
settings: {
placeholder: "НОМЕР КАРТЫ",
styles: {
"font-size": "20px",
"font-family": "Helvetica",
"color": "#0000c0"
},
placeholderStyles: {
"color": "pink"
},
}
}
}
});
Для использования доступны
colorв формате#000000font-sizeс единицамиpxиptfont-family(можно использовать запятые и кавычки)font-style
Прием платежей (Payin)
Типы операций (Transaction types)
Для совершения транзакций необходимо отправить POST запрос на https://secure.mandarinpay.com/api/transactions
Типы транзакций и их описание/назначение представлены в таблице
| Тип транзакции | Описание |
|---|---|
| Purchase | Списание денег с банковской карты |
| Rebill | Рекуррентный платеж, повторное списание денежных средств на основании ранее совершенной успешной транзакции оплаты/блокировки |
| Refund | Отмена операции списания денежных средств с карты |
| Preauth | Блокировка (предавторизация) суммы денежных средств на карте - нефинансовая операция |
| ConfirmAuth | Подтверждение списания заблокированной (предавторизованной) суммы денежных средств на карте |
| Reversal | Возврат заблокированной (предавторизованной) суммы денежных средств на карте |
Все транзакции осуществляются в асинхронном режиме. В результате запроса вам синхронно придет id транзакции, и асинхронно придет Callback-уведомление. Описание Callback-уведомлений представлено ниже
Списание денежных средств с карты можно осуществить в рамках одностадийной схемы оплаты или двухстадийной схемы оплаты.
Одностадийная оплата (Purchase)
Одностадийная оплата предполагает, что денежные средства списываются с карты в рамках одного запроса.
- Purchase
Создание транзакции типа Purchase
POST на https://secure.mandarinpay.com/api/transactions
{
"payment":
{
"orderId": "123321",
"action": "pay",
"price": "10.00",
"orderActualTill": "2016-10-29 12:34:56+00:00"
},
"customerInfo":
{
"email": "user@example.com",
"phone": "+79001234567"
},
"customValues":
[
{"name": "custom field 0", "value": "123321"},
{"name": "custom field 1", "value": "123321"}
],
"urls":
{
"callback": "http://...",
"return": "http://..."
}
}
Ответ в случае успешного создания транзакции (Standard HTTP 200 JSON response):
{
"id": "43913ddc000c4d3990fddbd3980c1725",
"userWebLink": "https://secure.mandarinpay.com/Pay?transaction=0eb51e74-e704-4c36-b5cb-8f0227621518",
"jsOperationId": "9874694yr87y73e7ey39ed80"
}
Ответ в случае, если транзакция не создана (Standard HTTP 400 Bad request):
{
"error": "Invalid request"
}
Для списания денежных средств с карты в рамках одностадийной схемы оплаты необходимо создать транзакцию с типом Purchase путем отправки POST запроса на https://secure.mandarinpay.com/api/transactions
Перечень и описание возможных блоков и элементов запроса, а также обязательность их передачи приведены ниже:
Блок PAYMENT
Данный блок является ОБЯЗАТЕЛЬНЫМ
| Элемент | Обяз-ть | Описание |
|---|---|---|
| action | да | Для создания транзакции purchase передается значение pay |
| price | Да | Сумма платежа. Обязательна к передаче в текущей версии системы. |
| orderId | Да | Номер заказа в системе Клиента. |
| orderActualTill | Нет | Срок резервирования товара/услуги. После указанной даты оплата будет невозможна |
Блок CUSTOMERINFO
Данный блок является ОБЯЗАТЕЛЬНЫМ
| Элемент | Обяз-ть | Описание |
|---|---|---|
| Да | Email пользователя | |
| phone | Нет | Телефон пользователя в формате +79999999999 российского образца |
Блок CUSTOMVALUES
Данный блок является НЕОБЯЗАТЕЛЬНЫМ и позволяет передать любую дополнительную информацию вместе с платежом. Вы можете передать до 8 пар параметров.
| Элемент | Обяз-ть | Описание |
|---|---|---|
| name | Нет | Заголовок параметра, который используется для прикрепления дополнительной информации к данным Платежа. В случае использования платежной страницы отображается Плательщику в правом блоке платежной страницы. |
| value | Нет | Значение параметра, который используется для прикрепления дополнительной информации к данным Платежа. В случае использования платежной страницы отображается Плательщику в правом блоке платежной страницы |
Блок URLS
Блок является НЕОБЯЗАТЕЛЬНЫМ
Данный блок позволяет передать ссылки для отправки callback-уведомления и возврата пользователя с платежной страницы после оплаты.
| Элемент | Обяз-ть | Описание |
|---|---|---|
| callback | Нет | Url для отправки callback-уведомления о статусе трназакции |
| return | Нет | Url для редиректа пользователя после оплаты |
Транзакция будет осуществлена в асинхронном режиме. В результате запроса вам синхронно придет id транзакции см. здесь, и асинхронно придет Callback-уведомление см. здесь.
Полученные в синхронном ответе userWebLink используйте для работы с платежной страницей (см. здесь), а jsOperationId для работы через CustomPay (см. здесь)
Двухстадийная оплата (Preauth, ConfirmAuth, Reversal)
Двухстадийная оплата предполагает, что денежные средства списываются с карты в рамках двух последовательных запросов - блокировка (предавторизация) суммы и последующее списание/возврат.
- Preauth
Создание транзакции типа Preauth
{
"payment":
{
"orderId": "123321",
"action": "preauth",
"price": "10.00",
"orderActualTill": "2016-10-29 12:34:56+00:00"
},
"customerInfo":
{
"email": "user@example.com",
"phone": "+79001234567"
},
"customValues":
[
{"name": "custom field 0", "value": "123321"},
{"name": "custom field 1", "value": "123321"}
],
"urls":
{
"callback": "http://...",
"return": "http://..."
}
}
Ответ в случае успешного создания транзакции (Standard HTTP 200 JSON response):
{
"id": "43913ddc000c4d3990fddbd3980c1725",
"userWebLink": "https://secure.mandarinpay.com/Pay?transaction=0eb51e74-e704-4c36-b5cb-8f0227621518",
"jsOperationId": "9874694yr87y73e7ey39ed80"
}
Ответ в случае, если транзакция не создана (Standard HTTP 400 Bad request):
{
"error": "Invalid request"
}
Двухстадийная схема работы предполагает первичную блокировку (preauth) денежных средств на банковской карте, а затем ее полное или частичное подтверждение (ConfirmAuth).
В случае отсутствия операции подтверждения списания денежных средств сумма будет автоматически разблокирована через определенное время (от 7 до 30 дней).
Также возможна операция принудительной разблокировки ВСЕЙ заблокированной суммы (Reversal)
Для блокировки денежных средств с карты в рамках двухстадийной схемы оплаты необходимо создать транзакцию с типом Preauth
Перечень и описание возможных блоков и элементов запроса, а также обязательность их передачи приведены ниже:
Блок PAYMENT
Данный блок является ОБЯЗАТЕЛЬНЫМ
| Элемент | Обяз-ть | Описание |
|---|---|---|
| action | да | Для создания транзакции preauth передается значение preauth, для ее подтверждения - pay, а разблокировки - reversal |
| price | Да | Сумма платежа. Обязательна к передаче в текущей версии системы. |
| orderId | Да | Номер заказа в системе Клиента. |
| orderActualTill | Нет | Срок резервирования товара/услуги. После указанной даты оплата будет невозможна |
Блок CUSTOMERINFO
Данный блок является ОБЯЗАТЕЛЬНЫМ
| Элемент | Обяз-ть | Описание |
|---|---|---|
| Да | Email пользователя | |
| phone | Нет | Телефон пользователя в формате +79999999999 российского образца |
Блок CUSTOMVALUES
Данный блок является НЕОБЯЗАТЕЛЬНЫМ и позволяет передать любую дополнительную информацию вместе с платежом. Вы можете передать до 8 пар параметров.
| Элемент | Обяз-ть | Описание |
|---|---|---|
| name | Нет | Заголовок параметра, который используется для прикрепления дополнительной информации к данным Платежа. В случае использования платежной страницы отображается Плательщику в правом блоке платежной страницы. |
| value | Нет | Значение параметра, который используется для прикрепления дополнительной информации к данным Платежа. В случае использования платежной страницы отображается Плательщику в правом блоке платежной страницы |
Блок URLS
Блок является НЕОБЯЗАТЕЛЬНЫМ
Данный блок позволяет передать ссылки для отправки callback-уведомления и возврата пользователя с платежной страницы после оплаты.
| Элемент | Обяз-ть | Описание |
|---|---|---|
| callback | Нет | Url для отправки callback-уведомления о статусе трназакции |
| return | Нет | Url для редиректа пользователя после оплаты |
Транзакция будет осуществлена в асинхронном режиме. В результате запроса вам синхронно придет id транзакции см. здесь, и асинхронно придет callback-уведомления см. здесь.
Полученные в синхронном ответе userWebLink используйте для работы с платежной страницей (см. здесь), а jsOperationId для работы через CustomPay (см. здесь)
После того как придёт callback-уведомления об успехе предавторизации полученый в нём Id транзакции можно использовать для полного или частичного списания (action->pay), а также разблокировки (action->reversal) денежных средств через REST API в качестве значения для target->transaction
- ConfirmAuth
Создание транзакции на списание заблокированной суммы ConfirmAuth
{
"payment":
{
"orderId": "123321",
"action": "pay",
"price": "10.00"
},
"customerInfo":
{
"email": "user@example.com",
"phone": "+79001234567"
},
"customValues":
[
{"name": "custom field 0", "value": "123321"},
{"name": "custom field 1", "value": "123321"}
],
"urls":
{
"callback": "http://...",
"return": "http://..."
},
"target":
{
"transaction": "43913ddc000c4d3990fddbd3980c1725"
}
}
Для полного или частичного списания используйте action->pay и полученный в уведомлении об успешной предавторизации Id в качестве значения для target->transaction
Значение price может быть любым в пределах значения, переданного в изначальной транзакции preauth
Транзакция будет осуществлена в асинхронном режиме. В результате запроса вам синхронно придет id транзакции см. здесь, и асинхронно придет callback-уведомления см. здесь.
- Reversal
Создание транзакции на разблокировку заблокированной суммы Reversal
{
"payment":
{
"orderId": "123321",
"action": "reversal"
},
"customerInfo":
{
"email": "user@example.com",
"phone": "+79001234567"
},
"customValues":
[
{"name": "custom field 0", "value": "123321"},
{"name": "custom field 1", "value": "123321"}
],
"urls":
{
"callback": "http://...",
"return": "http://..."
},
"target":
{
"transaction": "43913ddc000c4d3990fddbd3980c1725"
}
}
Ответ в случае успешного создания транзакции (Standard HTTP 200 JSON response):
{
"id": "43913ddc000c4d3990fddbd3980c1725"
}
Ответ в случае, если транзакция не создана (Standard HTTP 400 Bad request):
{
"error": "Invalid request"
}
Для разблокировки предавторизованной суммы используйте action->reversal и полученный в уведомлении об успешной предавторизации Id в качестве значения для target->transaction
Транзакция будет осуществлена в асинхронном режиме. В результате запроса вам синхронно придет id транзакции см. здесь, и асинхронно придет callback-уведомления см. здесь.
Отмена успешной оплаты (Refund)
Создание транзакции Refund
{
"payment":
{
"orderId": "123321",
"action": "reversal",
"price": "10.00"
},
"customValues":
[
{"name": "custom field 0", "value": "123321"},
{"name": "custom field 1", "value": "123321"}
],
"urls":
{
"callback": "http://...",
"return": "http://..."
},
"target":
{
"transaction": "43913ddc000c4d3990fddbd3980c1725"
}
}
Ответ в случае успешного создания транзакции (Standard HTTP 200 JSON response):
{
"id": "43913ddc000c4d3990fddbd3980c1725"
}
Ответ в случае, если транзакция не создана (Standard HTTP 400 Bad request):
{
"error": "Invalid request"
}
Для отмены успешной транзакции на списание средств с карты (pay/rebill/confirmauth) используйте actiion->reversal и Id ранее проведённой транзакции в качестве target->transaction
Отмена возможна как на всю сумму транзакции, так и на часть суммы (частичная отмена). Допускается неограниченное количество частичных отмен одной операции оплаты в пределах суммы оплаты.
Перечень и описание возможных блоков и элементов запроса, а также обязательность их передачи приведены ниже:
Блок PAYMENT
Данный блок является ОБЯЗАТЕЛЬНЫМ
| Элемент | Обяз-ть | Описание |
|---|---|---|
| action | да | Для отмены успешной транзакции оплаты и возврата денежных средств передается значение reversal |
| price | Да | Сумма платежа. Обязательна к передаче в текущей версии системы. |
| orderId | Да | Номер заказа в системе Клиента. |
Блок CUSTOMVALUES
Данный блок является НЕОБЯЗАТЕЛЬНЫМ и позволяет передать любую дополнительную информацию вместе с платежом. Вы можете передать до 8 пар параметров.
| Элемент | Обяз-ть | Описание |
|---|---|---|
| name | Нет | Заголовок параметра, который используется для прикрепления дополнительной информации к данным Платежа. В случае использования платежной страницы отображается Плательщику в правом блоке платежной страницы. |
| value | Нет | Значение параметра, который используется для прикрепления дополнительной информации к данным Платежа. В случае использования платежной страницы отображается Плательщику в правом блоке платежной страницы |
Блок URLS
Блок является НЕОБЯЗАТЕЛЬНЫМ
Данный блок позволяет передать ссылки для отправки callback-уведомления и возврата пользователя с платежной страницы после оплаты.
| Элемент | Обяз-ть | Описание |
|---|---|---|
| callback | Нет | Url для отправки callback-уведомления о статусе трназакции |
| return | Нет | Url для редиректа пользователя после оплаты |
Транзакция будет осуществлена в асинхронном режиме. В результате запроса вам синхронно придет id транзакции см. здесь, и асинхронно придет callback-уведомления см. здесь.
Рекуррентные платежи (Recurring payments)
Рекуррентный платеж (Rebill) - это операция списания денежных средств, совершаемая без ввода реквизитов банковской карты, на основании ранее совершенной привязки карты или операции оплаты/блокировки (pay/preauth/rebill/confirmauth)
Подробнее про лучшие практики применения рекуррентных платежей смотрите здесь
- Привязанная карта (Binded rebill)
Создание транзакции Rebill с использованием привязанной карты (для случаев, когда ваш софт НЕ УМЕЕТ работать с интерактивным режимом)
{
"payment":
{
"orderId": "123321",
"action": "pay",
"price": "10.00"
},
"customValues":
[
{"name": "custom field 0", "value": "123321"},
{"name": "custom field 1", "value": "123321"}
],
"urls":
{
"callback": "http://...",
"return": "http://..."
},
"target":
{
"card": "0eb51e74-e704-4c36-b5cb-8f0227621518"
}
}
Ответ в случае успешного создания транзакции (Standard HTTP 200 JSON response):
{
"id": "43913ddc000c4d3990fddbd3980c1725"
}
Ответ в случае, если транзакция не создана (Standard HTTP 400 Bad request):
{
"error": "Invalid request"
}
Ответ в случае, если автосписание невозможно:
{
"error": "Card binding is payout-only"
}
Создание транзакции Rebill с использованием привязанной карты (для случаев, когда ваш софт УМЕЕТ работать с интерактивным режимом)
{
"payment":
{
"orderId": "123321",
"action": "pay",
"price": "10.00"
},
"customValues":
[
{"name": "custom field 0", "value": "123321"},
{"name": "custom field 1", "value": "123321"}
],
"urls":
{
"callback": "http://...",
"return": "http://..."
},
"target":
{
"card": "0eb51e74-e704-4c36-b5cb-8f0227621518"
},
"allowinteractive": true
}
Ответ в случае успешного создания транзакции автосписания (Standard HTTP 200 JSON response):
{
"id": "43913ddc000c4d3990fddbd3980c1725"
}
Ответ в случае успешного создания транзакции в интерактивном режиме (Standard HTTP 200 JSON response):
{
"id": "43913ddc000c4d3990fddbd3980c1725",
"jsOperationId": "9874694yr87y73e7ey39ed80"
}
Ответ в случае, если транзакция не создана (Standard HTTP 400 Bad request):
{
"error": "Invalid request"
}
Перечень и описание возможных блоков и элементов запроса, а также обязательность их передачи приведены ниже:
Блок PAYMENT
Данный блок является ОБЯЗАТЕЛЬНЫМ
| Элемент | Обяз-ть | Описание |
|---|---|---|
| action | да | Для создания транзакции rebill передается значение pay |
| price | Да | Сумма платежа. Обязательна к передаче в текущей версии системы. |
| orderId | Да | Номер заказа в системе Клиента. |
Блок CUSTOMVALUES
Данный блок является НЕОБЯЗАТЕЛЬНЫМ и позволяет передать любую дополнительную информацию вместе с платежом. Вы можете передать до 8 пар параметров.
| Элемент | Обяз-ть | Описание |
|---|---|---|
| name | Нет | Заголовок параметра, который используется для прикрепления дополнительной информации к данным Платежа. В случае использования платежной страницы отображается Плательщику в правом блоке платежной страницы. |
| value | Нет | Значение параметра, который используется для прикрепления дополнительной информации к данным Платежа. В случае использования платежной страницы отображается Плательщику в правом блоке платежной страницы |
Блок URLS
Блок является НЕОБЯЗАТЕЛЬНЫМ
Данный блок позволяет передать ссылки для отправки callback-уведомления и возврата пользователя с платежной страницы после оплаты.
| Элемент | Обяз-ть | Описание |
|---|---|---|
| callback | Нет | Url для отправки callback-уведомления о статусе трназакции |
| return | Нет | Url для редиректа пользователя после оплаты |
Для создания повторного списания средств с карты используйте action->pay и Id ранее проведённой успешной привязки карты в качестве target->card
Транзакция будет осуществлена в асинхронном режиме. В результате запроса вам синхронно придет id транзакции см. здесь, и асинхронно придет callback-уведомления см. здесь.
Такая привязка может быть использована для переводов на нее (см. здесь) или для оплаты в интерактивном режиме (см. здесь)
Возможна ситуация, при которой привязка принудительно переводится в режим payout-only. Это происходит в случаях, когда от платежной системы приходит ответ с кодом, при котором дальнейшее проведение рекуррентных платежей невозможно.
В этом случае вы получите callback с ошибкой, а также флагом о том, что дальнейшее проведение рекуррентных платежей невозможно. Дополнительно вам будет направлен callback для транзакции привязки карты с новым статусом payout-only. Дальнейшие попытки автосписаний будут проходить без создания транзакции, в результате запроса вам будет возвращаться ответ Card binding is payout-only.
В случае, если ваш софт умеет работать в “интерактивном режиме”, рекомендуем добавить в запрос флаг allowinteractive : true. Суть данного флага заключается в том, что в случае, если карта была переведена в режим payout-only, то в ответ на запрос вы получите jsOperationId для проведения транзакции в “интерактивном режиме”, вместо ошибки Card binding is payout-only.
Для тестирования данного режима используйте режим sandbox и номер карты 5192618384533242 для привязки. Далее вам необходимо провести списание с привязанной карты, после чего привязка будет переведена в статус payout-only, а вам будет предложено провести операцию в интерактивном режиме, как это описано выше.
- Ранее совершенная оплата (Success pay rebill)
Создание транзакции повторного списания Rebill на основании успешной оплаты/блокировки
{
"payment":
{
"orderId": "123321",
"action": "pay",
"price": "10.00"
},
"customValues":
[
{"name": "custom field 0", "value": "123321"},
{"name": "custom field 1", "value": "123321"}
],
"urls":
{
"callback": "http://...",
"return": "http://..."
},
"target":
{
"rebill": "43913ddc000c4d3990fddbd3980c1725"
}
}
Ответ в случае успешного создания транзакции (Standard HTTP 200 JSON response):
{
"id": "43913ddc000c4d3990fddbd3980c1725"
}
Ответ в случае, если транзакция не создана (Standard HTTP 400 Bad request):
{
"error": "Invalid request"
}
POST на https://secure.mandarinpay.com/api/transactions
Помимо использования привязанной карты, создание rebill возможно на основании любой ранее совершенной успешной операции оплаты (pay/rebill/confirmauth), а также блокировки (preauth) денежных средств.
Для создания повторного списания средств с карты используйте action->pay и Id ранее проведённой успешной транзакции (pay/preauth) в качестве target->rebill
Блок PAYMENT
Данный блок является ОБЯЗАТЕЛЬНЫМ
| Элемент | Обяз-ть | Описание |
|---|---|---|
| action | да | Для отмены успешной транзакции оплаты и возврата денежных средств передается значение reversal |
| price | Да | Сумма платежа. Обязательна к передаче в текущей версии системы. |
| orderId | Да | Номер заказа в системе Клиента. |
Блок CUSTOMVALUES
Данный блок является НЕОБЯЗАТЕЛЬНЫМ и позволяет передать любую дополнительную информацию вместе с платежом. Вы можете передать до 8 пар параметров.
| Элемент | Обяз-ть | Описание |
|---|---|---|
| name | Нет | Заголовок параметра, который используется для прикрепления дополнительной информации к данным Платежа. В случае использования платежной страницы отображается Плательщику в правом блоке платежной страницы. |
| value | Нет | Значение параметра, который используется для прикрепления дополнительной информации к данным Платежа. В случае использования платежной страницы отображается Плательщику в правом блоке платежной страницы |
Блок URLS
Блок является НЕОБЯЗАТЕЛЬНЫМ
Данный блок позволяет передать ссылки для отправки callback-уведомления и возврата пользователя с платежной страницы после оплаты.
| Элемент | Обяз-ть | Описание |
|---|---|---|
| callback | Нет | Url для отправки callback-уведомления о статусе трназакции |
| return | Нет | Url для редиректа пользователя после оплаты |
Транзакция будет осуществлена в асинхронном режиме. В результате запроса вам синхронно придет id транзакции см. здесь, и асинхронно придет callback-уведомления см. здесь.
Интерактивная оплата (Interactive payments)
“Интерактивная оплата” подразумевает под собой оплату с использованием ранее привязанной карты, при которой осуществляется взаимодействие с пользователем, а именно: ввод пользователем CVV (защитный код). Для совершения такой оплаты используется технология CustomPay
Таким образом, вы можете использовать карту, привязанную в режиме payout-only, а также полноценные привязки для создания операций типа purchase и preauth.
Существует два варианта вызова данного метода:
- Передать в запросе флаг
interactive:true- в этом случае, независимо от статуса привязки карты будет применен режим “интерактивной оплаты” - Передать в запросе флаг
allowinteractive:true- в этом случае в зависимости от статуса привязки, оплата будет произведена через автосписание, либо с применением “интерактивного режима”, если автосписание невозможно.
Транзакции создаются в 2 этапа:
- Инициация транзакции в интерактивном режиме через REST API - см. здесь
- Создание транзакции с применением CustomPay - см. здесь
- Инициация транзакции (Init interactive request)
Инициация транзакции Purchase/Preauth
{
"payment":
{
"orderId": "123321",
"action": "pay/preauth",
"price": "10.00"
},
"customValues":
[
{"name": "custom field 0", "value": "123321"},
{"name": "custom field 1", "value": "123321"}
],
"urls":
{
"callback": "http://...",
"return": "http://..."
},
"target":
{
"card": "0eb51e74-e704-4c36-b5cb-8f0227621518"
},
"interactive": true
}
Ответ в случае успешного создания транзакции (Standard HTTP 200 JSON response):
{
"id": "43913ddc000c4d3990fddbd3980c1725",
"jsOperationId": "9874694yr87y73e7ey39ed80"
}
Ответ в случае, если транзакция не создана (Standard HTTP 400 Bad request):
{
"error": "Invalid request"
}
В данном случае к стандартному набору полей, используемому для оплаты с привязанной карты добавляется параметр interactive: true, а в ответе будет содержаться id транзакции и jsOperationId для создания транзакции через CustomPay.
- Создание транзакции (Transaction interactive request)
Создание транзакции через CustomPay
<form id="form-hosted-pay">
<div style="margin: 10px; padding: 10px; border: 1px solid gray">
CVV:
<div class="mandarinpay-field-card-cvv hosted-field"><div class="glyphicon glyphicon-check"></div></div>
<br/>
<a href="#" onclick="return mandarinpay.hosted.process(this);" class="btn btn-default">Оплатить</a>
</div>
</form>
<script>
mandarinpay.hosted.setup("#form-hosted-pay", {
operationId: "9874694yr87y73e7ey39ed80",
onsuccess: function(data) {
alert("Success, id: " + data.transaction.id);
},
onerror: function(data) {
alert("Error: " + data.error);
}
});
</script>
Полученный в синхронном ответе jsOperationId в рамках предыдущего запроса необходимо использовать для создания транзакции через CustomPay. В отличие от стандартного создания транзакции через CustomPay в этом случае необходимо передать только значение CVV.
Подробную информацию о создании транзакции через CustomPay смотрите в соответствующем разделе.
Кредитование MandarinPOS (MandarinPos merchant)
Тестирование (testing)
Для тестирования необходимо осуществить подачу заявки от имени покупателя и довести ее до подписания.
В общем виде процесс выглядит следующим образом:
- Отправка запроса на займ
- Заполнение анкеты в Личном кабинете
- Ожидание решения кредитора на странице Покупки
- Выбор подходящих условий
- Привязка карты или оплата первоначального взноса
- Подписание займа через смс
Изначально при подключении вам будет установлен тестовый режим кредитования. Это означает, что весь процесс будет выглядеть как настоящий, но при этом в системе кредиторов займ будет помечен как тестовый, по нему не будет реального движения денежных средств.
В рамках тестирования необходимо выбирать варианты с 0 предоплатой. В этом случае необходимо использовать реальную карту, на которой будет заблокирован 1 рубль и произведен его возврат после подписания.
Тестирование режима “первоначального взноса” возможно с использованием данных тестовых карт. Но для этого необходимо, чтобы ваш Проект был переведен в тестовый режим использования банковских карт - для этого необходимо обратиться в Службу поддержки
Для тестирования рекомендуется использовать следующие данные:
| Параметр | Значение |
|---|---|
| ФИО | Шариков Полиграф Полиграфович |
| Пол | мужской |
| Дата рождени | 19.05.1975 |
| Серия и номер паспорта | 7709 543987 |
| Выпустивший орган | УПРАВЛЕНИЕ ФЕДЕРАЛЬНОЙ МИГРАЦИОННОЙ СЛУЖБЫ РОССИИ ПО ГОР.МОСКВЕ |
| Дата выпуска | 01.01.2011 |
| Код подразделения | 770-001 |
| Адрес проживания | Москва, пр. Мира 111, кв. 11 |
| Данные о занятости | Любые |
Подача заявки (Paybyloan)
POST на https://secure.mandarinpay.com/api/transactions
Перечень и описание возможных блоков и элементов запроса, а также обязательность их передачи приведены ниже:
Блок PAYMENT
Данный блок является ОБЯЗАТЕЛЬНЫМ
| Элемент | Обяз-ть | Описание |
|---|---|---|
| action | да | Для создания запроса на кредит/рассрочку передается значение pay |
| price | Да | Сумма платежа. Обратите внимание, что если type=installments, стоимость товара/услуги должна быть уменьшена вами на размер discount |
| orderId | Да | Номер заказа в системе Клиента. |
| method | Да | Для создания запроса на кредит/рассрочку передается значение credit |
| orderActualTill | Да | Срок резервирования товара/услуги. После указанной даты оформление будет невозможно |
Блок CUSTOMERINFO
Данный блок является ОБЯЗАТЕЛЬНЫМ
| Элемент | Обяз-ть | Описание |
|---|---|---|
| Да | Email пользователя | |
| phone | Да | Телефон пользователя в формате +79999999999 российского образца |
Блок CUSTOMVALUES
Данный блок является НЕОБЯЗАТЕЛЬНЫМ и позволяет передать любую дополнительную информацию вместе с платежом. Вы можете передать до 8 пар параметров.
| Элемент | Обяз-ть | Описание |
|---|---|---|
| name | Нет | Заголовок параметра, который используется для прикрепления дополнительной информации к данным Платежа. В случае использования платежной страницы отображается Плательщику в правом блоке платежной страницы. |
| value | Нет | Значение параметра, который используется для прикрепления дополнительной информации к данным Платежа. В случае использования платежной страницы отображается Плательщику в правом блоке платежной страницы |
Блок URLS
Блок является НЕОБЯЗАТЕЛЬНЫМ
Данный блок позволяет передать ссылки для отправки callback-уведомления и возврата пользователя с платежной страницы после оплаты.
| Элемент | Обяз-ть | Описание |
|---|---|---|
| callback | Нет | Url для отправки callback-уведомления о статусе трназакции |
| return | Нет | Url для редиректа пользователя после оплаты |
Блок METADATA
Блок является ОБЯЗАТЕЛЬНЫМ. Он позволяет передавать дополнительную информацию, которую увидит покупатель при оформлении кредита рассрочки, а также информацию, необходимую нам для корректной обработки запроса. На текущий момент доступны слудющие поля:
| Название параметра | Обяз-ть | Описание |
|---|---|---|
| picture_url | Нет | Ссылка на картинку товара/услуги |
| description | Нет | Описание товара (возможно использование html-тегов) |
| type | Да | Тип запроса - кредит (значение = credit) или рассрочка (значение = installments) |
| discount | Да | Размер скидки, предоставляемой продавцом, в формате 0.00 от суммы покупки. В случае, если type=installments, поле является обязательным для передачи. В случае отсутствия данного поля, значение type=installments будет игнорировано. |
| purchase_amount | Да | Стоимость товара без учета скидки. В случае, если type=installments, поле является обязательным для передачи. В случае отсутствия данного поля, значение type=installments будет игнорировано. |
- Запрос на кредит (paybyloan credit)
Создание запроса на продажу в кредит
{
"payment":
{
"orderId": "123321",
"action": "pay",
"price": "10.00",
"method": "credit",
"orderActualTill": "2016-10-29 12:34:56+00:00"
},
"customerInfo":
{
"email": "user@example.com",
"phone": "+79001234567"
},
"customValues":
[
{"name": "custom field 0", "value": "123321"},
{"name": "custom field 1", "value": "123321"}
],
"urls":
{
"callback": "http://...",
"return": "http://..."
},
"metadata":
{
"picture_url": "http://yourdomain.ru/bestgood.png",
"description": "Это замечательный товар! <br> Лучше него ничего не бывает и мы его рекомендуем абсолютно всем!",
"type": "credit"
}
}
Ответ в случае успешного создания транзакции (Standard HTTP 200 JSON response):
{
"id": "43913ddc000c4d3990fddbd3980c1725",
"userWebLink": "https://secure.mandarinpay.com/Pay?transaction=0eb51e74-e704-4c36-b5cb-8f0227621518"
}
Ответ в случае, если транзакция не создана (Standard HTTP 400 Bad request):
{
"error": "Invalid request"
}
Данный метод используется для создания запроса со стороны магазина на продажу товара/услуги в кредит.
Перечень и описание возможных блоков и элементов запроса, а также обязательность их передачи приведены выше
Транзакция будет осуществлена в асинхронном режиме. В результате запроса вам синхронно придет id транзакции см. здесь, и асинхронно придет Callback-уведомление см. здесь.
Далее вам необходимо перенаправить пользователя на userWebLink, полученный в синхронном ответе.
- Запрос на рассрочку (paybyloan installments)
Создание запроса на продажу в рассрочку
{
"payment":
{
"orderId": "123321",
"action": "pay",
"price": "9.1",
"method": "credit",
"orderActualTill": "2016-10-29 12:34:56+00:00"
},
"customerInfo":
{
"email": "user@example.com",
"phone": "+79001234567"
},
"customValues":
[
{"name": "custom field 0", "value": "123321"},
{"name": "custom field 1", "value": "123321"}
],
"urls":
{
"callback": "http://...",
"return": "http://..."
},
"metadata":
{
"picture_url": "http://yourdomain.ru/bestgood.png",
"description": "Это замечательный товар! <br> Лучше него ничего не бывает и мы его рекомендуем абсолютно всем!",
"type": "installments",
"discount": "0.10",
"purchase_amount": "10.00"
}
}
Ответ в случае успешного создания транзакции (Standard HTTP 200 JSON response):
{
"id": "43913ddc000c4d3990fddbd3980c1725",
"userWebLink": "https://secure.mandarinpay.com/Pay?transaction=0eb51e74-e704-4c36-b5cb-8f0227621518"
}
Ответ в случае, если транзакция не создана (Standard HTTP 400 Bad request):
{
"error": "Invalid request"
}
Данный метод используется для создания запроса со стороны магазина на продажу товара/услуги в рассрочку.
Перечень и описание возможных блоков и элементов запроса, а также обязательность их передачи приведены выше
Транзакция будет осуществлена в асинхронном режиме. В результате запроса вам синхронно придет id транзакции см. здесь, и асинхронно придет Callback-уведомление см. здесь.
Далее вам необходимо перенаправить пользователя на userWebLink, полученный в синхронном ответе.
Массовые выплаты (Payout)
Проверка баланса (check balance)
Пример кода для проверки баланса
<?php
$merchantId=0;
$secret='******';
$reqid = time() ."_". microtime(true) ."_". rand();
$hash = hash("sha256", $merchantId ."-". $reqid ."-". $secret);
$auth= $merchantId ."-".$hash ."-". $reqid;
$url_transaction = "https://secure.mandarinpay.com/api/account/channels/rib_account/balance";
$ch = curl_init($url_transaction);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
"Content-Type: application/json",
"X-Auth:" . $auth
));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
var_dump($result);
?>
Данный вызов позволяет проверить баланс счета, с которого осуществляются массовые выплаты.
Для совершения совершения вызова необходимо отправить GET запрос на https://secure.mandarinpay.com/api/account/channels/{name}/balance
В качестве значения {name} необходимо передать параметр в соответствии с таблицей, приведенной ниже:
| Параметр | Описание параметра |
|---|---|
| rib_account | Для запроса баланса расчетного счета, открытого в ООО РНКО РИБ |
| psb_direct | Для запроса баланса расчетного счета, открытого в ПАО Промсвязьбанк (ПСБ) |
| dol | Для запроса баланса номинального счета 99948, открытого в ООО ДеньгиОнлайн |
| vrb | Для запроса баланса технического счета 30232, открытого в ООО КБ ВРБ |
Переводы на карту (Card MoneySend)
Перевод на карту можно осуществить тремя способами:
- Перевод на ранее привязанную карту
- Номер карты передается в составе API вызова
- Ввод карты осуществляется на платежной странице
- На привязанную карту (Binded-card payout)
POST на https://secure.mandarinpay.com/api/transactions
Создание транзакции MoneySend с использованием привязанной карты
{
"payment":
{
"orderId": "123321",
"action": "payout",
"price": "10.00"
},
"customerInfo":
{
"fullName": "Vasia Pupkin"
},
"senderInfo":
{
"fullName": "Ivan Petrov",
"birthDate": "1970.01.01"
},
"customValues":
[
{"name": "custom field 0", "value": "123321"},
{"name": "custom field 1", "value": "123321"}
],
"urls":
{
"callback": "http://...",
"return": "http://..."
},
"target":
{
"card": "0eb51e74-e704-4c36-b5cb-8f0227621518"
}
}
Ответ в случае успешного создания транзакции (Standard HTTP 200 JSON response):
{
"id": "43913ddc000c4d3990fddbd3980c1725"
}
Ответ в случае, если транзакция не создана (Standard HTTP 400 Bad request):
{
"error": "Invalid request"
}
Перечень и описание возможных блоков и элементов запроса, а также обязательность их передачи приведены ниже:
Блок PAYMENT
Данный блок является ОБЯЗАТЕЛЬНЫМ
| Элемент | Обяз-ть | Описание |
|---|---|---|
| action | да | Для создания транзакции MoneySend передается значение payout |
| price | Да | Сумма платежа. Обязательна к передаче в текущей версии системы. |
| orderId | Да | Номер заказа в системе Клиента. Значение должно быть уникальным в пределах успешных операций. |
Блок CUSTOMERINFO
| Элемент | Обяз-ть | Описание |
|---|---|---|
| fullName | Да/Нет | Владелец карты. Поле является обязательным для переводов на иностранные карты. Для переводов на карты российских банков НЕ ПОДДЕРЖИВАЕТСЯ. |
Блок SENDERINFO
| Элемент | Обяз-ть | Описание |
|---|---|---|
| fullName | Да | Имя отправителя латиницей |
| birthDate | Да | Дата рождения отправителя |
Блок CUSTOMVALUES
Данный блок является НЕОБЯЗАТЕЛЬНЫМ и позволяет передать любую дополнительную информацию вместе с платежом. Вы можете передать до 8 пар параметров.
| Элемент | Обяз-ть | Описание |
|---|---|---|
| name | Нет | Заголовок параметра, который используется для прикрепления дополнительной информации к данным Платежа. В случае использования платежной страницы отображается Плательщику в правом блоке платежной страницы. |
| value | Нет | Значение параметра, который используется для прикрепления дополнительной информации к данным Платежа. В случае использования платежной страницы отображается Плательщику в правом блоке платежной страницы |
Блок URLS
Блок является НЕОБЯЗАТЕЛЬНЫМ
Данный блок позволяет передать ссылки для отправки callback-уведомления и возврата пользователя с платежной страницы после оплаты.
| Элемент | Обяз-ть | Описание |
|---|---|---|
| callback | Нет | Url для отправки callback-уведомления о статусе трназакции |
| return | Нет | Url для редиректа пользователя после оплаты |
В рамках данного API вызова к стандартному вызову добавляется блок target, где в качестве значения card передается id ранее совершенной успешной привязки карты см. здесь. Обратите внимание на то, что значение orderid должно быть уникальным.
Транзакция будет осуществлена в асинхронном режиме. В результате запроса вам синхронно придет id транзакции см. здесь, и асинхронно придет callback-уведомления см. здесь.
- По номеру карты (KnownCardNumber payout)
POST на https://secure.mandarinpay.com/api/transactions
Создание транзакции MoneySend по известному номеру карты
{
"payment":
{
"orderId": "123321",
"action": "payout",
"price": "10.00"
},
"customerInfo":
{
"email": "user@example.com",
"phone": "+79001234567",
"fullName": "Vasia Pupkin"
},
"senderInfo":
{
"fullName": "Ivan Petrov",
"birthDate": "1970.01.01"
},
"customValues":
[
{"name": "custom field 0", "value": "123321"},
{"name": "custom field 1", "value": "123321"}
],
"urls":
{
"callback": "http://...",
"return": "http://..."
},
"target":
{
"knownCardNumber": "4012888888881881"
}
}
Ответ в случае успешного создания транзакции (Standard HTTP 200 JSON response):
{
"id": "43913ddc000c4d3990fddbd3980c1725"
}
Ответ в случае, если транзакция не создана (Standard HTTP 400 Bad request):
{
"error": "Invalid request"
}
Перечень и описание возможных блоков и элементов запроса, а также обязательность их передачи приведены ниже:
Блок PAYMENT
Данный блок является ОБЯЗАТЕЛЬНЫМ
| Элемент | Обяз-ть | Описание |
|---|---|---|
| action | да | Для создания транзакции MoneySend передается значение payout |
| price | Да | Сумма платежа. Обязательна к передаче в текущей версии системы. |
| orderId | Да | Номер заказа в системе Клиента. Значение должно быть уникальным в пределах успешных операций. |
Блок CUSTOMERINFO
Данный блок является ОБЯЗАТЕЛЬНЫМ
| Элемент | Обяз-ть | Описание |
|---|---|---|
| Да | Email пользователя | |
| phone | Да | Телефон пользователя в формате +79999999999 российского образца |
| fullName | Да/Нет | Владелец карты. Поле является обязательным для переводов на иностранные карты. Для переводов на карты российских банков НЕ ПОДДЕРЖИВАЕТСЯ. |
Блок SENDERINFO
| Элемент | Обяз-ть | Описание |
|---|---|---|
| fullName | Да | Имя отправителя латиницей |
| birthDate | Да | Дата рождения отправителя |
Блок CUSTOMVALUES
Данный блок является НЕОБЯЗАТЕЛЬНЫМ и позволяет передать любую дополнительную информацию вместе с платежом. Вы можете передать до 8 пар параметров.
| Элемент | Обяз-ть | Описание |
|---|---|---|
| name | Нет | Заголовок параметра, который используется для прикрепления дополнительной информации к данным Платежа. В случае использования платежной страницы отображается Плательщику в правом блоке платежной страницы. |
| value | Нет | Значение параметра, который используется для прикрепления дополнительной информации к данным Платежа. В случае использования платежной страницы отображается Плательщику в правом блоке платежной страницы |
Блок URLS
Блок является НЕОБЯЗАТЕЛЬНЫМ
Данный блок позволяет передать ссылки для отправки callback-уведомления и возврата пользователя с платежной страницы после оплаты.
| Элемент | Обяз-ть | Описание |
|---|---|---|
| callback | Нет | Url для отправки callback-уведомления о статусе трназакции |
| return | Нет | Url для редиректа пользователя после оплаты |
В рамках данного API вызова к стандартному вызову добавляется блок target, где в качестве значения knownCardNumber передается номер карты, на которую осуществляется перевод. Обратите внимание на то, что значение orderid должно быть уникальным.
Транзакция будет осуществлена в асинхронном режиме. В результате запроса вам синхронно придет id транзакции см. здесь, и асинхронно придет callback-уведомления см. здесь.
- Платежная страница (payment page payout)
POST запрос на https://secure.mandarinpay.com/api/transactions
Создание транзакции MoneySend с вводом карты на стороне платежной страницы
{
"payment":
{
"orderId": "123321",
"action": "payout",
"price": "10.00"
},
"customerInfo":
{
"email": "user@example.com",
"phone": "+79001234567",
"fullName": "Vasia Pupkin"
},
"senderInfo":
{
"fullName": "Ivan Petrov",
"birthDate": "1970.01.01"
},
"customValues":
[
{"name": "custom field 0", "value": "123321"},
{"name": "custom field 1", "value": "123321"}
],
"urls":
{
"callback": "http://...",
"return": "http://..."
}
}
Ответ в случае успешного создания транзакции (Standard HTTP 200 JSON response):
{
"id": "43913ddc000c4d3990fddbd3980c1725",
"userWebLink": "https://secure.mandarinpay.com/Pay?transaction=0eb51e74-e704-4c36-b5cb-8f0227621518"
}
Ответ в случае, если транзакция не создана (Standard HTTP 400 Bad request):
{
"error": "Invalid request"
}
Ввод карты осуществляется на стороне платежной страницы. Для этого вам необходимо перенаправить пользователя на userWebLink, полученный в синхронном ответе. Обратите внимание на то, что значение orderid должно быть уникальным.
Перечень и описание возможных блоков и элементов запроса, а также обязательность их передачи приведены ниже:
Блок PAYMENT
Данный блок является ОБЯЗАТЕЛЬНЫМ
| Элемент | Обяз-ть | Описание |
|---|---|---|
| action | да | Для создания транзакции MoneySend передается значение payout |
| price | Да | Сумма платежа. Обязательна к передаче в текущей версии системы. |
| orderId | Да | Номер заказа в системе Клиента. Значение должно быть уникальным в пределах успешных операций. |
Блок CUSTOMERINFO
Данный блок является ОБЯЗАТЕЛЬНЫМ
| Элемент | Обяз-ть | Описание |
|---|---|---|
| Да | Email пользователя | |
| phone | Да | Телефон пользователя в формате +79999999999 российского образца |
| fullName | Да/Нет | Владелец карты. Поле является обязательным для переводов на иностранные карты. Для переводов на карты российских банков не применяется. |
Блок SENDERINFO
| Элемент | Обяз-ть | Описание |
|---|---|---|
| fullName | Да | Имя отправителя латиницей |
| birthDate | Да | Дата рождения отправителя |
Блок CUSTOMVALUES
Данный блок является НЕОБЯЗАТЕЛЬНЫМ и позволяет передать любую дополнительную информацию вместе с платежом. Вы можете передать до 8 пар параметров.
| Элемент | Обяз-ть | Описание |
|---|---|---|
| name | Нет | Заголовок параметра, который используется для прикрепления дополнительной информации к данным Платежа. В случае использования платежной страницы отображается Плательщику в правом блоке платежной страницы. |
| value | Нет | Значение параметра, который используется для прикрепления дополнительной информации к данным Платежа. В случае использования платежной страницы отображается Плательщику в правом блоке платежной страницы |
Блок URLS
Блок является НЕОБЯЗАТЕЛЬНЫМ
Данный блок позволяет передать ссылки для отправки callback-уведомления и возврата пользователя с платежной страницы после оплаты.
| Элемент | Обяз-ть | Описание |
|---|---|---|
| callback | Нет | Url для отправки callback-уведомления о статусе трназакции |
| return | Нет | Url для редиректа пользователя после оплаты |
Транзакция будет осуществлена в асинхронном режиме. В результате запроса вам синхронно придет id транзакции см. здесь, и асинхронно придет callback-уведомления см. здесь.
Прочие виды массовых выплат (other payouts)
- Мобильный телефон (phone MoneySend)
POST на https://secure.mandarinpay.com/api/transactions
Создание транзакции MoneySend для пополнение мобильного телефона
{
"payment":
{
"orderId": "123321",
"action": "payout",
"price": "10.00"
},
"customerInfo":
{
"email": "user@example.com",
"phone": "+79001234567"
},
"customValues":
[
{"name": "custom field 0", "value": "123321"},
{"name": "custom field 1", "value": "123321"}
],
"urls":
{
"callback": "http://...",
"return": "http://..."
},
"target": "phone"
}
Ответ в случае успешного создания транзакции (Standard HTTP 200 JSON response):
{
"id": "43913ddc000c4d3990fddbd3980c1725"
}
Ответ в случае, если транзакция не создана (Standard HTTP 400 Bad request):
{
"error": "Invalid request"
}
Перечень и описание возможных блоков и элементов запроса, а также обязательность их передачи приведены ниже:
Блок PAYMENT
Данный блок является ОБЯЗАТЕЛЬНЫМ
| Элемент | Обяз-ть | Описание |
|---|---|---|
| action | да | Для создания транзакции MoneySend передается значение payout |
| price | Да | Сумма платежа. Обязательна к передаче в текущей версии системы. |
| orderId | Да | Номер заказа в системе Клиента. Значение должно быть уникальным в пределах успешных операций. |
Блок CUSTOMERINFO
Данный блок является ОБЯЗАТЕЛЬНЫМ
| Элемент | Обяз-ть | Описание |
|---|---|---|
| Да | Email пользователя | |
| phone | Да | Телефон пользователя, на котрой происходит пополнение, в формате +79999999999 российского образца |
Блок CUSTOMVALUES
Данный блок является НЕОБЯЗАТЕЛЬНЫМ и позволяет передать любую дополнительную информацию вместе с платежом. Вы можете передать до 8 пар параметров.
| Элемент | Обяз-ть | Описание |
|---|---|---|
| name | Нет | Заголовок параметра, который используется для прикрепления дополнительной информации к данным Платежа. В случае использования платежной страницы отображается Плательщику в правом блоке платежной страницы. |
| value | Нет | Значение параметра, который используется для прикрепления дополнительной информации к данным Платежа. В случае использования платежной страницы отображается Плательщику в правом блоке платежной страницы |
Блок URLS
Блок является НЕОБЯЗАТЕЛЬНЫМ
Данный блок позволяет передать ссылки для отправки callback-уведомления и возврата пользователя с платежной страницы после оплаты.
| Элемент | Обяз-ть | Описание |
|---|---|---|
| callback | Нет | Url для отправки callback-уведомления о статусе трназакции |
| return | Нет | Url для редиректа пользователя после оплаты |
В рамках данного API вызова к стандартному вызову добавляется поле target, где в качестве значения передается phone. Номер телефона для пополнения берется из блока customerInfo Обратите внимание на то, что значение orderid должно быть уникальным.
Транзакция будет осуществлена в асинхронном режиме. В результате запроса вам синхронно придет Id транзакции, и асинхронно придет Callback-уведомление. Описание Callback-уведомлений представлено ниже.
- Яндекс.Деньги (MoneySend yandexMoney)
POST на https://secure.mandarinpay.com/api/transactions
Создание транзакции MoneySend для пополнения кошелька Яндекс.Деньги
{
"payment":
{
"orderId": "123321",
"action": "payout",
"price": "10.00"
},
"customerInfo":
{
"email": "user@example.com",
"phone": "+79001234567"
},
"customValues":
[
{"name": "custom field 0", "value": "123321"},
{"name": "custom field 1", "value": "123321"}
],
"urls":
{
"callback": "http://...",
"return": "http://..."
},
"target":
{
"yandexMoney": "123456789091"
}
}
Ответ в случае успешного создания транзакции (Standard HTTP 200 JSON response):
{
"id": "43913ddc000c4d3990fddbd3980c1725"
}
Ответ в случае, если транзакция не создана (Standard HTTP 400 Bad request):
{
"error": "Invalid request"
}
Перечень и описание возможных блоков и элементов запроса, а также обязательность их передачи приведены ниже:
Блок PAYMENT
Данный блок является ОБЯЗАТЕЛЬНЫМ
| Элемент | Обяз-ть | Описание |
|---|---|---|
| action | да | Для создания транзакции MoneySend передается значение payout |
| price | Да | Сумма платежа. Обязательна к передаче в текущей версии системы. |
| orderId | Да | Номер заказа в системе Клиента. Значение должно быть уникальным в пределах успешных операций. |
Блок CUSTOMERINFO
Данный блок является ОБЯЗАТЕЛЬНЫМ
| Элемент | Обяз-ть | Описание |
|---|---|---|
| Да | Email пользователя | |
| phone | Да | Телефон пользователя в формате +79999999999 российского образца |
Блок CUSTOMVALUES
Данный блок является НЕОБЯЗАТЕЛЬНЫМ и позволяет передать любую дополнительную информацию вместе с платежом. Вы можете передать до 8 пар параметров.
| Элемент | Обяз-ть | Описание |
|---|---|---|
| name | Нет | Заголовок параметра, который используется для прикрепления дополнительной информации к данным Платежа. В случае использования платежной страницы отображается Плательщику в правом блоке платежной страницы. |
| value | Нет | Значение параметра, который используется для прикрепления дополнительной информации к данным Платежа. В случае использования платежной страницы отображается Плательщику в правом блоке платежной страницы |
Блок URLS
Блок является НЕОБЯЗАТЕЛЬНЫМ
Данный блок позволяет передать ссылки для отправки callback-уведомления и возврата пользователя с платежной страницы после оплаты.
| Элемент | Обяз-ть | Описание |
|---|---|---|
| callback | Нет | Url для отправки callback-уведомления о статусе трназакции |
| return | Нет | Url для редиректа пользователя после оплаты |
В рамках данного API вызова к стандартному вызову добавляется блок target, где в качестве значения yandexMoney передается номер кошелька Яндекс.Денег. Обратите внимание на то, что значение orderid должно быть уникальным.
Транзакция будет осуществлена в асинхронном режиме. В результате запроса вам синхронно придет id транзакции см. здесь, и асинхронно придет callback-уведомления см. здесь.
- Webmoney (MoneySend webmoney)
POST на https://secure.mandarinpay.com/api/transactions
Создание транзакции MoneySend для пополнения кошелька Webmoney
{
"payment":
{
"orderId": "123321",
"action": "payout",
"price": "10.00"
},
"customerInfo":
{
"email": "user@example.com",
"phone": "+79001234567"
},
"customValues":
[
{"name": "custom field 0", "value": "123321"},
{"name": "custom field 1", "value": "123321"}
],
"urls":
{
"callback": "http://...",
"return": "http://..."
},
"target":
{
"webMoney": "R111222333444"
}
}
Ответ в случае успешного создания транзакции (Standard HTTP 200 JSON response):
{
"id": "43913ddc000c4d3990fddbd3980c1725"
}
Ответ в случае, если транзакция не создана (Standard HTTP 400 Bad request):
{
"error": "Invalid request"
}
Перечень и описание возможных блоков и элементов запроса, а также обязательность их передачи приведены ниже:
Блок PAYMENT
Данный блок является ОБЯЗАТЕЛЬНЫМ
| Элемент | Обяз-ть | Описание |
|---|---|---|
| action | да | Для создания транзакции MoneySend передается значение payout |
| price | Да | Сумма платежа. Обязательна к передаче в текущей версии системы. |
| orderId | Да | Номер заказа в системе Клиента. Значение должно быть уникальным в пределах успешных операций. |
Блок CUSTOMERINFO
Данный блок является ОБЯЗАТЕЛЬНЫМ
| Элемент | Обяз-ть | Описание |
|---|---|---|
| Да | Email пользователя | |
| phone | Да | Телефон пользователя в формате +79999999999 российского образца |
Блок CUSTOMVALUES
Данный блок является НЕОБЯЗАТЕЛЬНЫМ и позволяет передать любую дополнительную информацию вместе с платежом. Вы можете передать до 8 пар параметров.
| Элемент | Обяз-ть | Описание |
|---|---|---|
| name | Нет | Заголовок параметра, который используется для прикрепления дополнительной информации к данным Платежа. В случае использования платежной страницы отображается Плательщику в правом блоке платежной страницы. |
| value | Нет | Значение параметра, который используется для прикрепления дополнительной информации к данным Платежа. В случае использования платежной страницы отображается Плательщику в правом блоке платежной страницы |
Блок URLS
Блок является НЕОБЯЗАТЕЛЬНЫМ
Данный блок позволяет передать ссылки для отправки callback-уведомления и возврата пользователя с платежной страницы после оплаты.
| Элемент | Обяз-ть | Описание |
|---|---|---|
| callback | Нет | Url для отправки callback-уведомления о статусе трназакции |
| return | Нет | Url для редиректа пользователя после оплаты |
В рамках данного API вызова к стандартному вызову добавляется блок target, где в качестве значения webMoney передается номер кошелька Webmoney (WMR, WMZ, WME). Обратите внимание на то, что значение orderid должно быть уникальным.
Транзакция будет осуществлена в асинхронном режиме. В результате запроса вам синхронно придет id транзакции см. здесь, и асинхронно придет callback-уведомления см. здесь.
- Qiwi (MoneySend qiwi)
POST на https://secure.mandarinpay.com/api/transactions
Создание транзакции MoneySend для пополнения кошелька Qiwi
{
"payment":
{
"orderId": "123321",
"action": "payout",
"price": "10.00"
},
"customerInfo":
{
"email": "user@example.com",
"phone": "+79001234567"
},
"customValues":
[
{"name": "custom field 0", "value": "123321"},
{"name": "custom field 1", "value": "123321"}
],
"urls":
{
"callback": "http://...",
"return": "http://..."
},
"target":
{
"qiwi": "+79001234567"
}
}
Ответ в случае успешного создания транзакции (Standard HTTP 200 JSON response):
{
"id": "43913ddc000c4d3990fddbd3980c1725"
}
Ответ в случае, если транзакция не создана (Standard HTTP 400 Bad request):
{
"error": "Invalid request"
}
Перечень и описание возможных блоков и элементов запроса, а также обязательность их передачи приведены ниже:
Блок PAYMENT
Данный блок является ОБЯЗАТЕЛЬНЫМ
| Элемент | Обяз-ть | Описание |
|---|---|---|
| action | да | Для создания транзакции MoneySend передается значение payout |
| price | Да | Сумма платежа. Обязательна к передаче в текущей версии системы. |
| orderId | Да | Номер заказа в системе Клиента. Значение должно быть уникальным в пределах успешных операций. |
Блок CUSTOMERINFO
Данный блок является ОБЯЗАТЕЛЬНЫМ
| Элемент | Обяз-ть | Описание |
|---|---|---|
| Да | Email пользователя | |
| phone | Да | Телефон пользователя в формате +79999999999 российского образца |
Блок CUSTOMVALUES
Данный блок является НЕОБЯЗАТЕЛЬНЫМ и позволяет передать любую дополнительную информацию вместе с платежом. Вы можете передать до 8 пар параметров.
| Элемент | Обяз-ть | Описание |
|---|---|---|
| name | Нет | Заголовок параметра, который используется для прикрепления дополнительной информации к данным Платежа. В случае использования платежной страницы отображается Плательщику в правом блоке платежной страницы. |
| value | Нет | Значение параметра, который используется для прикрепления дополнительной информации к данным Платежа. В случае использования платежной страницы отображается Плательщику в правом блоке платежной страницы |
Блок URLS
Блок является НЕОБЯЗАТЕЛЬНЫМ
Данный блок позволяет передать ссылки для отправки callback-уведомления и возврата пользователя с платежной страницы после оплаты.
| Элемент | Обяз-ть | Описание |
|---|---|---|
| callback | Нет | Url для отправки callback-уведомления о статусе трназакции |
| return | Нет | Url для редиректа пользователя после оплаты |
В рамках данного API вызова к стандартному вызову добавляется блок target, где в качестве значения qiwi передается номер кошелька Qiwi. Обратите внимание на то, что значение orderid должно быть уникальным.
Транзакция будет осуществлена в асинхронном режиме. В результате запроса вам синхронно придет id транзакции см. здесь, и асинхронно придет callback-уведомления см. здесь.
- Банковский счет (MoneySend bank-account)
POST на https://secure.mandarinpay.com/api/transactions
Создание транзакции MoneySend для перевода на банковский счет
{
"payment": {
"action": "payout",
"orderId": "123321",
"price": "123",
"reason": "Назначение"
},
"customerInfo":
{
"email": "user@example.com",
"phone": "+79001234567",
"firstName": "Иван",
"middleName": "Иванович",
"lastName": "Иванов",
"bankAccount":
{
"number": "40101810800000010041",
"bic": "044583001"
},
"address": {
"rawString": "Адрес полностью"
}
},
"customValues":
[
{"name": "custom field 0", "value": "123321"},
{"name": "custom field 1", "value": "123321"}
],
"urls":
{
"callback": "http://...",
"return": "http://..."
},
"target": "bank-account"
}
Ответ в случае успешного создания транзакции (Standard HTTP 200 JSON response):
{
"id": "43913ddc000c4d3990fddbd3980c1725"
}
Ответ в случае, если транзакция не создана (Standard HTTP 400 Bad request):
{
"error": "Invalid request"
}
Перечень и описание возможных блоков и элементов запроса, а также обязательность их передачи приведены ниже:
Блок PAYMENT
| Элемент | Обяз-ть | Описание |
|---|---|---|
| action | да | Для создания транзакции MoneySend передается значение payout |
| price | Да | Сумма платежа. Обязательна к передаче в текущей версии системы. |
| orderId | Да | Номер заказа в системе Клиента. Значение должно быть уникальным в пределах успешных операций. |
| reason | Да | Назначение платежа |
Блок CUSTOMERINFO
Данный блок является ОБЯЗАТЕЛЬНЫМ
| Элемент | Обяз-ть | Описание |
|---|---|---|
| Да | Email пользователя | |
| phone | Да | Телефон пользователя в формате +79999999999 российского образца |
| firstName | Да | Имя получателя |
| middleName | Да | Отчество получателя |
| lastName | Да | Фамилия получателя |
| number | Да | Номер банковского счета получателя |
| bic | Да | БИК банка получателя |
| address | Да | Адрес получателя полностью |
Блок CUSTOMVALUES
Данный блок является НЕОБЯЗАТЕЛЬНЫМ и позволяет передать любую дополнительную информацию вместе с платежом. Вы можете передать до 8 пар параметров.
| Элемент | Обяз-ть | Описание |
|---|---|---|
| name | Нет | Заголовок параметра, который используется для прикрепления дополнительной информации к данным Платежа. В случае использования платежной страницы отображается Плательщику в правом блоке платежной страницы. |
| value | Нет | Значение параметра, который используется для прикрепления дополнительной информации к данным Платежа. В случае использования платежной страницы отображается Плательщику в правом блоке платежной страницы |
Блок URLS
Блок является НЕОБЯЗАТЕЛЬНЫМ
Данный блок позволяет передать ссылки для отправки callback-уведомления и возврата пользователя с платежной страницы после оплаты.
| Элемент | Обяз-ть | Описание |
|---|---|---|
| callback | Нет | Url для отправки callback-уведомления о статусе трназакции |
| return | Нет | Url для редиректа пользователя после оплаты |
В качестве значения target необходимо передать bank-account.
Транзакция будет осуществлена в асинхронном режиме. В результате запроса вам синхронно придет Id транзакции, и асинхронно придет Callback-уведомление. Описание Callback-уведомлений представлено ниже.
- Unistream / ПС БЭСТ (MoneySend bestmt)
POST на https://secure.mandarinpay.com/api/transactions
Создание транзакции MoneySend для перевода через систему денежных переводов (ПС БЭСТ / Unistream)
{
"payment":
{
"orderId": "123321",
"action": "payout",
"price": "10.00"
},
"customerInfo":
{
"email": "user@example.com",
"phone": "+79001234567",
"firstName": "Василий",
"middleName": "Иванович",
"lastName": "Пупкин",
"document":
{
"rfnspDocId": 21,
"docSeria": "7709",
"docNum": "543987",
"docIssuer": "УПРАВЛЕНИЕ ФЕДЕРАЛЬНОЙ МИГРАЦИОННОЙ СЛУЖБЫ РОССИИ ПО ГОР.МОСКВЕ",
"docIssuerCode": "770-001",
"docIssuingDate": "2011-01-01"
},
"birthDate": "1980-01-01",
"birthPlace": "г. Москва",
"countryCode": "643",
"taxInfo":
{
"isRussianFederationTaxResident": true
}
},
"customValues":
[
{"name": "custom field 0", "value": "123321"},
{"name": "custom field 1", "value": "123321"}
],
"urls":
{
"callback": "http://...",
"return": "http://..."
},
"target": "bestmt"
}
Ответ в случае успешного создания транзакции (Standard HTTP 200 JSON response):
{
"id": "43913ddc000c4d3990fddbd3980c1725"
}
Ответ в случае, если транзакция не создана (Standard HTTP 400 Bad request):
{
"error": "Invalid request"
}
Перечень и описание возможных блоков и элементов запроса, а также обязательность их передачи приведены ниже:
Блок PAYMENT
Данный блок является ОБЯЗАТЕЛЬНЫМ
| Элемент | Обяз-ть | Описание |
|---|---|---|
| action | да | Для создания транзакции MoneySend передается значение payout |
| price | Да | Сумма платежа. Обязательна к передаче в текущей версии системы. |
| orderId | Да | Номер заказа в системе Клиента. Значение должно быть уникальным в пределах успешных операций. |
Блок CUSTOMERINFO
Данный блок является ОБЯЗАТЕЛЬНЫМ
| Элемент | Обяз-ть | Описание |
|---|---|---|
| Да | Email пользователя | |
| phone | Да | Телефон пользователя в формате +79999999999 российского образца |
| firstName | Да | Имя получателя |
| middleName | Да | Отчество получателя |
| lastName | Да | Фамилия получателя |
| rfnspDocId | Да | Тип документа получателя в соответствии с российским классификатором |
| docSeria | Да | Серия документа получателя |
| docNum | Да | Номер документа получателя |
| docIssuer | Да | Орган, выдавший документ получателя |
| docIssuerCode | Да | Код подразделения, выдавшего документ получателя |
| docIssuingDate | Да | Дата выдачи документа получателя |
| birthDate | Да | Дата рождения получателя |
| birthPlace | Да | Место рождения получателя |
| countryCode | Да | Код страны получателя |
| isRussianFederationTaxResident | Да | Информация о том, является ли получатель налоговым резидентом РФ. Возможные значения true/false |
Блок CUSTOMVALUES
Данный блок является НЕОБЯЗАТЕЛЬНЫМ и позволяет передать любую дополнительную информацию вместе с платежом. Вы можете передать до 8 пар параметров.
| Элемент | Обяз-ть | Описание |
|---|---|---|
| name | Нет | Заголовок параметра, который используется для прикрепления дополнительной информации к данным Платежа. В случае использования платежной страницы отображается Плательщику в правом блоке платежной страницы. |
| value | Нет | Значение параметра, который используется для прикрепления дополнительной информации к данным Платежа. В случае использования платежной страницы отображается Плательщику в правом блоке платежной страницы |
Блок URLS
Блок является НЕОБЯЗАТЕЛЬНЫМ
Данный блок позволяет передать ссылки для отправки callback-уведомления и возврата пользователя с платежной страницы после оплаты.
| Элемент | Обяз-ть | Описание |
|---|---|---|
| callback | Нет | Url для отправки callback-уведомления о статусе трназакции |
| return | Нет | Url для редиректа пользователя после оплаты |
Транзакция будет осуществлена в асинхронном режиме. В результате запроса вам синхронно придет Id транзакции, и асинхронно придет Callback-уведомление. Описание Callback-уведомлений представлено ниже.
Выплаты по реестрам (bulk payouts)
Данный способ интеграции позволяет вам без программирования и реализации сервиса выплат по API организовать массовую выплату по готовому реестру получателей.
Сервис выплат расположен здесь. Для входа используйте MerchantID и Secret в качестве логина и пароля соответственно.
Для использования сервиса необходимо просто последовательно данные по каждому получателю через запятую (без пробелов) в соответствии с примерами ниже.
Каждый перевод - отдельная строка, при этом при этом первая строка должна быть строкой заголовков
Пример реестра для выплат на банковские карты
orderId,action,price,customer_email,customer_phone,target_known_card_number
111,payout,150.00,test@test.com,+71234567890,4271111111111111
222,payout,150.00,test1@test.com,+71234567891,4271111111111112
333,payout,150.00,test1@test.com,+71234567892,4271111111111113
Набор полей для выплаты по реестру на банковские карты
| Элемент | Обяз-ть | Описание |
|---|---|---|
| action | да | тип операции (payout), остается неизменным для всех получателей |
| price | Да | сумма выплаты с копейками через “точку” (0.00) |
| orderId | Да | номер заказа в системе Клиента. Значение должно быть уникальным в пределах успешных операций. |
| customer_email | Да | адрес электронной почты получателя |
| customer_phone | Да | мобильный телефон получателя в формате +79999999999 |
| target_known_card_number | Да | номер банковской карты получателя без пробелов (только номер, без дополнительных карточных параметров) |
Пример реестра для выплат на банковские счета
target,orderId,email,price,action,reason,customer_fullName,customer_phone,customer_bankAccount_n
umber,customer_bankAccount_bic,customer_firstName,customer_lastName,customer_middleName,cus
tomer_address_rawString
bank_account,000001,hello@mandarinbank.com,1000.00,payout,Назначение платежа,Иванов
Иван Иванович,+79101234455,40811112334410000000,444222333,Иван,Иванов,Иванович,442222 г. Самара, Московское шоссе 311-101
bank_account,000002,hello2@mandarinbank.com,2468.00,payout,Акция "MandarinBank",Петров
Александр Васильевич,+79253214455,41022223334445556666,666555444,Александр,Петров,Васильевич,443122 г. Москва, Шоссе энтузиастов 311-101
Набор полей для выплаты по реестру на банковские счета
| Элемент | Обяз-ть | Описание |
|---|---|---|
| target | да | тип получателя |
| orderId | Да | номер заказа в системе Клиента. Значение должно быть уникальным в пределах успешных операций |
| Да | email получателя | |
| price | Да | сумма выплаты с копейками через “точку” (0.00) |
| action | Да | тип операции (payout), остается неизменным для всех получателей |
| reason | Да | назначение платежа |
| customer_phone | Да | мобильный телефон получателя в формате +79999999999 |
| customer_fullName | Да | ФИО получателя |
| customer_bankAccount_number | Да | номер банковского счета получателя |
| customer_bankAccount_bic | Да | БИК банка получателя |
| customer_firstName | Да | имя получателя |
| customer_lastName | Да | фамилия получателя |
| customer_middleName | Да | отчество получателя |
| customer_address_rawString | Да | адрес получателя |
Пример реестра для выплат на банковские мобильные телефоны
target,orderId,action,price,customer_email,customer_phone
phone,00005,payout,50.00,test@test.com,+71234567890
phone,00006,payout,250.00,test1@test.com,+71234567891
phone,00007,payout,100.00,test1@test.com,+71234567892
Набор полей для выплаты по реестру на мобильные телефоны
| Элемент | Обяз-ть | Описание |
|---|---|---|
| target | да | тип получателя |
| orderId | Да | номер заказа в системе Клиента. Значение должно быть уникальным в пределах успешных операций |
| Да | email получателя | |
| price | Да | сумма выплаты с копейками через “точку” (0.00) |
| action | Да | тип операции (payout), остается неизменным для всех получателей |
| customer_email | Да | адрес электронной почты получателя |
| customer_phone | Да | мобильный телефон получателя в формате +79999999999 |
Привязка банковских карт (Card Binding)
Привязка карты (binding) используется для целей списания/зачисления на карту без участия пользователя, а также для проверки того, что пользователь имеет доступ к данной карте (списание контрольной суммы, проверка через 3DS)
Типы привязок и их краткое описание представлены в таблице
| Тип привязок | Описание |
|---|---|
| full binding | Полноценная привязка карты |
| one-side binding | одностороння привязка карты |
Для совершения вышеуказанных транзакций необходимо отправить POST запрос на https://secure.mandarinpay.com/api/card-bindings
Привязка банковской карты (full binding)
POST запрос на https://secure.mandarinpay.com/api/card-bindings
Создание привязки карты
{
"customerInfo":
{
"email": "user@example.com",
"phone": "+79001234567"
},
"urls":
{
"callback": "http://...",
"return": "http://..."
}
}
Ответ в случае успешного создания транзакции (Standard HTTP 200 JSON response):
{
"id": "43913ddc000c4d3990fddbd3980c1725",
"userWebLink": "https://secure.mandarinpay.com/Pay?transaction=0eb51e74-e704-4c36-b5cb-8f0227621518",
"jsOperationId": "9874694yr87y73e7ey39ed80"
}
Ответ в случае, если транзакция не создана (Standard HTTP 400 Bad request):
{
"error": "Invalid request"
}
Суть данной операции - блокировка (preauth) суммы на банковской карте в размере 1 рубля с последующей разблокировкой. Операция проводится с применением технологии 3DSecure.
После получения callback-уведомления об успешной привязке привязанную карту можно использовать для автоматических выплат см. здесь и платежей.
Перечень и описание возможных блоков и элементов запроса, а также обязательность их передачи приведены ниже:
Блок CUSTOMERINFO
Данный блок является ОБЯЗАТЕЛЬНЫМ
| Элемент | Обяз-ть | Описание |
|---|---|---|
| Да | Email пользователя | |
| phone | Да | Телефон пользователя в формате +79999999999 российского образца |
Блок URLS
Блок является НЕОБЯЗАТЕЛЬНЫМ
Данный блок позволяет передать ссылки для отправки callback-уведомления и возврата пользователя с платежной страницы после оплаты.
| Элемент | Обяз-ть | Описание |
|---|---|---|
| callback | Нет | Url для отправки callback-уведомления о статусе трназакции |
| return | Нет | Url для редиректа пользователя после оплаты |
Транзакция будет осуществлена в асинхронном режиме. В результате запроса вам синхронно придет id транзакции см. здесь, и асинхронно придет Callback-уведомление см. здесь.
Полученные в синхронном ответе userWebLink используйте для работы с платежной страницей (см. здесь), а jsOperationId для работы через CustomPay (см. здесь)
Возможна ситуация, при которой привязка принудительно переводится в режим payout-only. Это происходит в случаях, когда от платежной системы приходит ответ с кодом, при котором дальнейшее проведение “автосписаний” невозможно. Такая привязка может быть использована для переводов на нее (см. здесь) или для оплаты в интерактивном режиме (см. здесь)
Привязка с нулевым балансом (payout-only)
Возможна настройка, при которой, в случае, если у пользователя отсутствуют денежные средства на карте (после прохождения 3DSecure получена ошибка с кодом 51), карта привязывается в режим payout-only (status=payout-only в callback-уведомлении). Такая карта может быть использована для переводов на нее (см. здесь) или для оплаты в интерактивном режиме (см. здесь).
Сохранение номера карты (one-side binding)
Создание запроса на сохранение номера карты
{
"customerInfo":
{
"email": "user@example.com",
"phone": "+79001234567"
},
"target":
{
"knownCardNumber": "4012888888881881"
}
}
Ответ в случае успешного создания транзакции (Standard HTTP 200 JSON response):
{
"id": "43913ddc000c4d3990fddbd3980c1725"
}
Ответ в случае, если транзакция не создана (Standard HTTP 400 Bad request):
{
"error": "Invalid request"
}
Данный вызов по сути представляет из себя токенизацию номера карты и используется для того, чтобы не хранить в вашей системе номер карты. Данная операция осуществляется в синхронном режиме - в ответ вы получите Id привязки.
В отличие от предыдущего вызова, такая “привязка” может быть использована исключительно для зачисления (action=payout) денежных средств на карту.
Использование привязанных карт (binding usage)
Привязанная методом full binding карта может быть использована в дальнейшем для:
- Рекуррентных платежей (Автоматических списаний с карты) - см. здесь
- Списаний с карты в интерактивном режиме. В этом случае пользователю необходимо заполнить только поле
CVV- см. здесь - Автоматических переводов на карту - см. здесь
Роутинг платежей (Routes API)
Документация по продукту MandarinPay Routes находится здесь.
Упрощенная идентификация (id-smev)
Создание запроса на идентификацию (startPersonIdentification)
POST https://secure.mandarinpay.com/api/personidentification
Создание запроса на идентификацию Аккаунта с СНИЛС
{
"firstName": "Иван",
"patronymic": "Иванович",
"lastName": "Иванов",
"passportNumber": "111111",
"passportSeries": "1111",
"phone": "+79999999999",
"snils": "19033603123"
}
Создание запроса на идентификацию Аккаунта с ИНН
{
"firstName": "Иван",
"patronymic": "Иванович",
"lastName": "Иванов",
"passportNumber": "111111",
"passportSeries": "1111",
"phone": "+79999999999",
"snils": "",
"inn": "501716749325"
}
Ответ в случае успешного создания запроса (Standard HTTP 200 JSON response):
{
"id" : "794d3cc7-a2b4-4579-9173-bafc7d7dc29d"
}
В случае успешного создания запроса вам вернется идентификатор сессии id, а на используемый номер телефона будет отправлено смс-сообщение с кодом для подтверждения номера телефона
Подтверждение номера телефона (setPersonConfirmCode)
PUT https://secure.mandarinpay.com/api/personidentification/{id}
Подтверждение номера телефона через смс
{
"smsCode": "123456"
}
Ответ в случае успешного создания запроса (Standard HTTP 200 JSON response):
{
"id" : "794d3cc7-a2b4-4579-9173-bafc7d7dc29d"
}
Ответ в случае ошибки (Standard HTTP 400 Bad request):
{
"error": "Invalid request"
}
В качестве значения {id} используется полученный на предыдущем этапе {id}.
В случае, если клиентом введена неверная смс, то есть на этапе проверки статуса вами получен "phoneVerified": false, вы можете повторять отправку данного запроса, передав тот же {id} и новый код, введенный пользователем до тех пор, пока не получите "phoneVerified": true.
В текущей версии протокола количество попыток ограничено 5.
Проверка статуса идентификации (getPersonIdentificationResult)
GET https://secure.mandarinpay.com/api/personidentification/{id}
Ответ в случае успешного прохождения запроса (Standard HTTP 200 JSON response):
{
"id": "794d3cc7-a2b4-4579-9173-bafc7d7dc29d",
"phoneVerified": true,
"phoneVerificationFinished": true,
"personVerified": true,
"personVerificationFinished": true,
"personVerificationError": "string"
}
Описание структуры ответа
| Элемент | Описание |
|---|---|
| phoneVerified | null - переданный код еще не проверен, true - переданный код верный, false - переданный код неверный |
| phoneVerificationFinished | true - проверка кода завершена, false - проверка кода не завершена |
| personVerified | null - идентификация не завершена, true - идентификация завершена, данные верны, false - идентификация завершена, данные неверны |
| personVerificationFinished | true - проверка данных завершена, false - проверка данных не завершена |
| personVerificationError | описание ошибки в случае ее наличия. При отсутствии ошибок имеет значение null |
CMS Plugins
В солучае, если необходимый вам плагин отсутствует в списке, обратитесь в Службу поддержки, и мы подумаем, что можно сделать.
В случае, если вы хотите модифицировать модуль, документация по API форм доступна здесь
Diafan CMS
Joomla
CS-CART
Bitrix
Скачать плагин для 1С-Битрикс Малый Бизнес
Drupal Ubercart
Magento
ModX
Opencart
PHP Shop
Prestashop
Simpla
UMI.CMS
Webasyst
Wordpress
Insales
Необходимо зарегистрировать клиента у нас в системе на сайте https://mandarinpay.com.
Далее в Insales вам необходимо добавить новый способ оплаты - внешний способ оплаты. В появившемся меню необходимости ввести:
merchantidв качестве идентификатора магазина,- значение
secretв качестве пароля, - http://pay.mandarinbank.com/mandarin_proxy.php в качестве внешней ссылки
Далее необходимо в настройках нашего ЛК прописать ссылку из “URL для перехода при успешной оплате” в качестве callbackurl
Статья в базе знаний на тему merchantid, secret и callbackurl