Перейти к основному содержимому

P2P

Ввод денег переводом с карты на карту

Интеграция заключается во встраивании платежной кнопки в сайт партнера. При клике по этой кнопке производится отправка данных на адрес системы GarryPay.

Информация

Для обеспечения безопасности, отправляемые данные должны быть криптографически подписаны.

Правила использования платежного метода

1) После формирования инвойса, у плательщика есть 20 минут на то, чтобы совершить перевод средств и нажать кнопку «Оплата завершена». Если плательщик перевел средства и:

  • не нажали кнопку «Оплата завершена».
  • нажал кнопку «Отмена»
  • не уложился в 20 минут

то вам, как мерчанту, необходимо об этом сообщить в поддержку GarryPay.

2) При переводе средств категорически запрещено указывать любые комментарии к переводу (если это не оговорено правилами метода). При отправке платежа с комментарием, возможен перерасчет по такому инвойсу с удержанием штрафа до 10%.

3) Если плательщик отправил перевод на меньшую сумму, чем была указана в инвойсе, ему будет предложено доплатить. В случае отказа, запрашиваем у плательщика подтверждающие документы, что карта оформлена на него. И осуществляем возврат на те же реквизиты за вычетом штрафа в 10%.

4) Отправка денежных средств осуществляется, по возможности, внутрибанковским платежом. В случае отсутствия у плательщика счетов в предложенных банках, допускается межбанковский перевод (при наличии чека).

5) Перевод средств с электронных платежных кошельков Qiwi, Yoomoney и прочих – запрещен (если это не оговорено правилами метода). Такие платежи будут передаваться на арбитраж и зачисление по ним не гарантировано.

6) При попытке приложить фальшивые чеки об оплате – аккаунт плательщика необходимо заблокировать.

Интеграция через платежную кнопку

Код платежной кнопки должен выглядеть следующим образом:

<form action="https://merch-dev.garrypay.com/button" method="post">
<input
type="hidden"
name="data"
value="eyJtZXJjaGFudF9pZCI6IjE1YWU2Yzg4LWJiMGItNGY3Ny1hZjkxLTZhMGNkNWI0NGRlZCIsInB1cmNoYXNlX2lkIjozMTUsImFtb3VudCI6IjMzMTYuMDAiLCJjdXJyZW5jeSI6IlJVQiIsImxhbmciOiJydSIsInBheW1lbnRfbWV0aG9kIjoicDJwIiwiY2FsbGJhY2siOiJodHRwczpcL1wvbWVyY2hhbnQtc2l0ZS5jb21cL2NhbGxiYWNrX3VybCJ9"
>
<input
type="hidden"
name="sign"
value="YjNjOTNhOWE2ZmRlYjIyOTc5ZjMxMTdiMzQ1YmM3YmE2MGI1NjNhOTU0Zjc2NjcyNjc4ZTUzNmVmYjU4MWFjMQ=="
>
</form>

Данные для поля data готовятся следующим образом (псевдо-код):

Base64.encode('{
"merchant_id": "ef73bed1-2591-4a91-a74e-fe68b4e2e4e0",
"lang": "ru",
"purchase_id": "1eas123",
"user_id": "122",
"amount": "3000",
"currency": "RUB",
"payment_method": "p2p"
}');

Т.е. JSON объект нужно транслировать в строку и закодировать в Base64.

Допустимые поля

ИмяТипПо умолчаниюОписание
merchant_idstringОбязательноеID вашего мерчанта
purchase_idstringОбязательноеУникальный ID покупки
amountstringОбязательноеСумма в указанной валюте (лимиты смотрите под таблицей)
currencystringОбязательноеВалюта в которой платим INR / KZT / UAH / RUB / AZN
langstringenЯзык платежного интерфейса, en / ru
callbackstringundefinedURL страницы на которую направляется пользователь после совершения платежа

Лимиты для суммы

INR: 500 - 167500

KZT: 10000 – 2000000

UAH: 100 - 50000

RUB: 1500 – 2000000

AZN: 36 – 900

Пример кода

import crypto from "crypto";

const data = new Buffer(JSON.stringify({
merchant_id: "ef73bed1-2591-4a91-a74e-fe68b4e2e4e0"
purchase_id: "234-12",
amount: "3000",
currency: "RUB",
lang: 'ru',
callback: 'https://merchant_site.com/callback_url'
})).toString("base64")

const hmac = crypto.createHmac("sha256", key);
hmac.update(data);
const sign = Buffer.from(hmac.digest("hex")).toString("base64");

Callback

Данные отправляются POST запросом на URL указанный в настройках мерчанта

IP сервера с которого поступают запросы: 185.49.70.96

Пример запроса

{
data: 'eyJhY3Rpb24iOiJwMnBfcHJkZXIiLCJkYXRhIjp7ImRhdGEiOnsiYWRfaWQiOjUyMSwiYW1vdW50IjoxMDAsImN1cnJlbmN5IjoiVVNEIiwibWVyY2hhbnRfaWQiOiI5MGYxZDE5OC05MjkzLTQwNjItYjc5NC05NDgxNmM3NWNjODYiLCJjb3VudHJ5IjoicnVzIn0sImVycm9yIjoiTUVSQ0hBTlRBQ0NPVU5UTk9URk9VTkQifX0=',
sign: 'MGM4NGIyZTY2OWMyNzYzNjFhODcyODdjZGViN2UxMWQ4MzY2ZmNiYmE4ZDRiOTVhMTU1ODMxYTZlYTMwYjJmZg=='
}

data - JSON закодированный в base64

sign - подпись данных

Проверка подлинности данных

  • Сгенерируйте подпись используя закодированные в base64 полученные данные и ваш Secret Key
  • Сверьте сгенерированную подпись с полученной из запроса.
  • Если подпись совпадает, данные подлинные, их можно декодировать и обрабатывать далее

Генерация подписи на основе полученных данных:

//secretKey - Секретный ключ вашего мерчанта
const hmac = crypto.createHmac("sha256", secretKey);
//base64data - Закодированные данные из запроса
hmac.update(base64data);
const sign = Buffer.from(hmac.digest("hex")).toString("base64");

Этапы операции

Каждый callback в объекте данных содержит параметр action. Благодаря этому параметру можно определить на какой стадии процесс верификации / платежа

p2p_orderсоздание ордера (в момент, когда пользователь выбрал офер)
p2p_completedпровайдер подтвердил поступление денег
p2p_approvedтрейдер подтвердил сделку
p2p_canceledотмена ордера

Пример раскодированных данных

{
"action":"p2p_order",
"data":{
"data": {....исходные данные запроса API},
"result": {...результат выполнения запроса},
"error": "информация об ошибке, если есть"
}
}