Общение происходит с помощью postback-запросов (постбеков). После каждого запроса Клиента на ввод или вывод, ему отправляется постбек с результатом операции.
Внимание: Для смены часового пояса при отображении времени в транзакциях, в настройках (путь: Личный кабинет -> Настройки -> Настройки paykassma -> Часовой пояс) через запрос ТП Paykassma выставите требуемый часовой пояс. По умолчанию часовой пояс +08:00 PST Asia/Manila
Прием postback (постбека)
Для принятия постбеков Вам необходимо реализовать отдельный путь, по которому Вы сможете получать постбеки. Они отправляются POST-запросом в JSON-формате.
Сервер Paykassma ожидает ответ в json {"status":"ok"} код ответа 200, в противном случае, при получении отличающегося ответа, Paykassma будет пересылать постбек с определенной периодичностью.
Ввод
Формирование сигнатуры (signature) на стороне клиента
При отправке постбеков Paykassma также отправляет сигнатуру: специально сгенерированную хеш-строку, которая создается с использованием приватного ключа. Сама сигнатура вычисляется следующим образом:
$signature = sha1($postback_access_key . $postback_private_access_key . md5($transactions->toJson()));
в функцию sha1 передается строка, склеенная из трех параметров:
Параметр | Описание |
$postback_access_key | публичный ключ; |
$postback_private_access_key | приватный ключ; |
хеш от MD5-функции всего массива транзакций в JSON-формате | |
В результате выполнения данного кода получается строка, которую невозможно подделать, не имея приватного ключа, который не передается в постбеках.
Клиент может сравнить сгенерированную сигнатуру с полученной сигнатурой от постбека и тем самым убедиться, что данные, которые пришли были реально отправлены, а не подделаны злоумышленником.
Postback ввода
Тело запроса:
Наименование | Тип | Описание |
access_key | string | Ключ доступа, указывается в настройках личного кабинета ТП Paykassma |
signature | string | Подпись, по которой происходит проверка подлинности постбека. Внимание: принцип формирование подписи приводится ниже в отдельном пункте. |
label | string | Уникальный ID пользователя в системе клиента |
Stockpiling | object | Сконвертированная во все валюты сумма транзакций, участвующих в накоплении (одна и более транзакции). Конвертация осуществляется на основе открытых данных о курсах валют. Все валюты передаются с точностью до сотых долей, криптовалюты имеют 8 знаков в дробной части (стомиллионная точность). Передается в виде массива. Внимание: описание функционала накопления приводится ниже в отдельном пункте |
stockpiling_id | integer | Уникальный ID накопления |
transactions | array | Передается информация о совершённых транзакциях, учавствующих в накоплении (одна и более). |
Массив transactions:
Наименование | Тип | Описание |
amount | string | Сумма транзакции |
currency_code | string | Код валюты транзакции |
wallet_type | string | Платёжная система, в которой произведена транзакция |
code | string или “null” | Название ручной платежной системы. Заполняется только при указании wallet_type = “manual”. |
transaction_id | string | Уникальный ID транзакции в Paykassma |
transaction_type | integer | Тип транзакции: 0 = автоматическая, 1 = отладочная, 2 = принудительная |
from | string или “null” | Уникальный идентификатор счета пользователя, с которого пришла оплата (при наличии информации) |
created_datetime | string | Дата создания транзакции |
activated_datetime | string | Дата активации транзакции |
custom_id | string или “null” | Передача полученного от клиента с плагина Идентификатор транзакции в системе Клиента. Внимание: Может быть «null», если параметр custom_transaction_id не был передан ранее. |
{
"access_key":"mrOYReXJphqo7lkL"//
"signature":"dfsfrwe3344d",
"label":1
"Stockpiling":{
"USD":80,
"INR":6008.39,
"EUR":72.86
},
"stockpiling_id":18,
"transactions":[
{
"amount":6008.39,
"currency_code":"INR",
"wallet_type":"paytm",
"code":null,
"transaction_id":"15",
"transaction_type":1,
"from":85XXXX1369,
"created_datetime":"2019-12-18 23:28:45",
"activated_datetime":"2019-12-18 23:28:45",
"custom_id":"3123123"
}
]
}
Вывод
Формирование сигнатуры (signature) на стороне клиента
Каждый постбек подписывается signature, она формируется следующим образом:
$data = [
...
];
$data['signature'] = generateSignature($data); // return fa0ee1e2acf7f898635ec417491381c0a4f9d35c
//send $data like json ...
function generateSignature(array $data) {
$privateKey = 'yourprivatekey';
ksort($data);
$implode = implode(':', $data);
return sha1($privateKey . md5($implode));
}
Postback вывода
Постбек вывода при использовании актуального запроса на вывод "https://api.{URL_server_Paykassma}/v2/withdrawal/create"
Тело запроса:
Наименование | Тип | Описание |
status | integer | Доступные статусы вывода: |
description | string | Комментарий, приходит вместе с html тэгами |
withdrawal_id | string | Уникальный ID вывода |
wallet_type | string | Тип платёжной системы |
wallet_recepient | string | Номер кошелька получателя |
label | string | Уникальный ID пользователя в системе клиента, передаётся в параметре label при составлении URL в Iframe |
amount | double | Сумма вывода. Имеет 2 знака после запятой для всех валют и 8 знаков для криптовалют. |
currency_code | string | Валюта транзакции вывода |
{
"status": 1,
"description": "<p>123<\/p>",
"withdrawal_id": 3479370,
"wallet_type": "IMPS",
"wallet_recipient": "123",
"label": "123",
"amount": 1000,
"currency_code": "INR"
"signature": "SIGNATURE"
}
Постбек вывода при использовании неактуального запроса на вывод "https://api.{URL_server_Paykassma}/withdrawal/manual/create"
Тело запроса:
Наименование | Тип | Описание |
id | integer | Уникальный ID вывода |
withdrawal_id | string | ID вывода в системе клиента |
wallet_type | string | Тип платёжной системы |
wallet_recipient | string | Номер кошелька получателя |
wallet_sender | string | Номер кошелька отправителя |
account_name | string | Имя держателя аккаунта |
account_number | string | Номер счета аккаунта |
string | Электронная почта того, кому выплачивают | |
| amount | double | Сумма вывода. Имеет 2 знака после запятой для всех валют и 8 знаков для криптовалют. |
| status | integer | Доступные статусы вывода: |
| created_at | date | Дата и время создания |
| updated_at | date | Дата и время обновления |
| failed_reason | string | Причина неудачи. Данный параметр не передается, если статус 1 |
{
"id": 957,
"withdrawal_id": "5165837",
"wallet_type": "imps",
"wallet_recipient": "123",
"wallet_sender": "5125124",
"account_name": "test",
"account_number": "123",
"email": "[email protected]"
"amount": 1000.00,
"status": 1,
"created_at": "2021-02-16 12:23:34",
"updated_at": "2021-02-26 17:22:43",
"failed_reason": "test"
"signature": "SIGNATURE"
}