Для подключения в Вашу CMS возможности оплаты товаров/услуг в рассрочку, после заключения договора с сервисом PayLate, Вам необходимо выполнить всего 3 шага.
1. Добавьте на сайт новый способ оплаты и настройте передачу данных о заказе, выбрав один из способов интеграции;
- Передача данных с помощью js-скрипта
- Передача данных о заказе напрямую в PayLate
- Формирование ссылки для перенаправления клиента
- Передача данных без перехода на сайт Paylate
2. Создайте файл обмена статусами и передайте сотрудникам PayLate его URL;
3. Проведите тестирование сервиса совместно с сотрудниками PayLate.
Добавление способа оплаты
Добавьте способ оплаты в Вашу CMS, назвав его «PAYLATE — Доверительная оплата» или «PAYLATE — оплата в рассрочку».
client_id – 1702082013
login – test
password – test
Передача данных с помощью js-скрипта
Подключение js-скрипта
Подключите js-скрипт на странице завершения оформления заказа (после оформления клиентом заказа и заполнением всех полей заказа Вашей CMS)
<script type="text/javascript" src="https://paylate.ru/js/partner_im.js" charset="utf-8"></script>
Передайте на странице завершения оформления заказа основные параметры и вызовите функцию создания кнопки paylate.ru.
# | Параметр | Описание |
---|---|---|
1 | client_id | Идентификатор клиента (предоставляется сервисом Paylate, соответствует номеру договора) |
2 | order_id | идентификатор заказа в Вашей БД |
3 | category | Наименование основной категории товаров магазина (необязательный параметр) |
4 | goods | Массив товаров в формате JSON. Данный массив может содержать один или несколько товаров. Товар определяется следующей структурой: { В PHP это делает функция urlencode. |
5 | token | Токен, формируется как: md5(логин + md5(пароль) + номер_заказа) |
6 | result_url | Адрес страницы для возврата клиента после совершения оплаты |
7 | fio | Фамилия клиента (необязательный параметр) |
8 | fio1 | Имя клиента (необязательный параметр) |
9 | fio2 | Отчество клиента (необязательный параметр) |
<script>
// При формировании массива посредством js (а не как строки из массива, например, на PHP), необходимо передавать параметр goods следующим образом: JSON.stringify(PayLateGoods)!
var PayLateGoods = [{
"Name":"Мобильный телефон Apple", // Наименование товара
"Category":"Мобильные устройства", // Категория товара (необязательный параметр)
"Price":"35300.00", // Цена товара (за единицу)
"Count":"2", // Количество товаров
},
{
"Name":" Телевизор Samsung", // Наименование товара
"Category":"Электроника", // Категория товара (необязательный параметр)
"Price":"120000.00", // Цена товара (за единицу)
"Count":"1", // Количество товаров
}];
// Установка параметров
var SetPayLate = {
client_id : "1702082013", // Идентификатор Вашей организации
order_id : 235, // Идентификатор заказа в Вашей БД
category : "Мобильные устройства", // Категория товара (необязательный параметр)
goods : JSON.stringify(PayLateGoods), // Массив товаров. При формировании массива посредством js (а не как строки из массива, например на PHP), необходимо передать так: JSON.stringify(PayLateGoods)!
autostart : true, // Автоматическое открытие окна оплаты после загрузки страницы (по умолчанию false)
token : 'a4915d4c982ec5fdff65c79e6eb4f03b', // Токен для определения отправителя
image_type : 0, // Тип картинки-кнопки paylate
result_url: 'http://partner.ru', // Адрес страницы для возврата клиента после совершения оплаты
fio: 'Иванов', // Фамилия клиента (необязательный параметр)
fio1: 'Иван', // Имя клиента (необязательный параметр)
fio2: 'Иванович' // Отчество клиента (необязательный параметр)
}
// Отображение кнопки
PayLateButton(SetPayLate); </script>
Формирование токена (PHP):
$login = "test"; // Логин Вашей организации в системе paylate
$password = "test"; // Пароль Вашей организации в системе paylate
$order_id = "235"; // Идентификатор заказа в вашей системе
$token = md5($login . md5($password) . $order_id); // Сформированный токен
Пример формирования массива товаров (PHP):
// Пример массива товаров на PHP
$PayLateGoods = array(
array('Name'=>'Мобильный телефон Apple','Category'=>'Мобильные устройства','Price'=>'35300.00','Count'=>'2'),
array('Name'=>'Телевизор Samsung','Category'=>'Электроника','Price'=>'120000.00','Count'=>'1')
);
<script>
var PayLateGoods = <?php json_encode($PayLateGoods); ?>;
...
</script>
После выполнения данных действий необходимо провести совместное тестирование подключения интернет-магазина со специалистами paylate.ru. В случае успешного подключения (все параметры будут переданы верно и Вами будет принят результат оплаты) специалист переведет подключение в рабочий режим, и пользователи Вашего интернет-магазина смогут оплачивать товары/услуги по пост-оплатной системе paylate.ru.
Передача данных о заказе напрямую в Paylate
Для интеграции без кнопки, т.е. перенаправление клиента может быть произведено непосредственно после нажатия на кнопку ”оформить заказ” в Вашем интернет-магазине, или для отображения сервиса оплаты во фрейме, Вы должны передавать на страницу https://paylate.ru/bypartner следующие параметры:
# | Параметр | Описание |
---|---|---|
1 | client_id | Идентификатор клиента (предоставляется сервисом Paylate, соответствует номеру договора) |
2 | order_id | идентификатор заказа в Вашей БД |
3 | category | Наименование основной категории товаров магазина (необязательный параметр) |
4 | goods | Массив товаров в формате JSON. Данный массив может содержать один или несколько товаров. Товар определяется следующей структурой: Перед отправкой JSON-строка (массив товаров) должна быть закодирована по типу контента application/x-www-form-urlencoded. Т.е. все не цифробуквенные символы, кроме – (минус), _ (подчеркивание) и .(точка) должны быть заменены знаком процента (%), за которым следует два шестнадцатеричных числа, а пробелы кодируются как знак сложения (+).В PHP это делает функция urlencode. |
5 | token | Токен, формируется как: md5(логин + md5(пароль) + номер_заказа) |
6 | result_url | Адрес страницы для возврата клиента после совершения оплаты |
7 | fio | Фамилия клиента (необязательный параметр) |
8 | fio1 | Имя клиента (необязательный параметр) |
9 | fio2 | Отчество клиента (необязательный параметр) |
Данные параметры могут быть переданы посредством html формы, т.е. обычным post запросом на страницу https://paylate.ru/bypartner.
<form action="https://paylate.ru/bypartner" target="_blank" method="post">
<input type="hidden" name="client_id" value="1702082013" />
<input type="hidden" name="order_id" value="235" />
<input type="hidden" name="category" value="Мобильные устройства" />
<input type="hidden" name="goods" value="%5B%7B%22Name%22%3A%22%D0%9C%D0%BE%D0%B1%D0%B8%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9%20%D1%82%D0%B5%D0%BB%D0%B5%D1%84%D0%BE%D0%BD%20Apple%22%2C%22Category%22%3A%22%D0%9C%D0%BE%D0%B1%D0%B8%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5%20%D1%83%D1%81%D1%82%D1%80%D0%BE%D0%B9%D1%81%D1%82%D0%B2%D0%B0%22%2C%22Price%22%3A%2235300.00%22%2C%22Count%22%3A%222%22%2C%22fio%22%3A%22%D0%98%D0%B2%D0%B0%D0%BD%D0%BE%D0%B2%20%D0%9F%D0%B5%D1%82%D1%80%20%D0%98%D0%B2%D0%B0%D0%BD%D0%BE%D0%B2%D0%B8%D1%87%22%2C%22passport%22%3A%222803536798%22%7D%5D" />
<input type="hidden" name="token" value="a4915d4c982ec5fdff65c79e6eb4f03b" />
<input type="hidden" name="result_url" value="http://partner.ru" />
<input type="hidden" name="fio" value="Иванов" />
<input type="hidden" name="fio1" value="Иван" />
<input type="hidden" name="fio2" value="Иванович" />
<input type="hidden" name="action" value="by_partner" />
<input type="submit" name="submit_button" value="Передать" />
</form>
Формирование ссылки для перенаправления клиента
После оформления заказа на сайте, Вы можете передать в PayLate данные по оформленному заказу для формирования ссылки по которой можно будет перенаправить клиента на сайт paylate.ru. Для этого необходимо отправить POST-запрос со следующими параметрами:
# | Параметр | Описание |
---|---|---|
1 | URL | https://paylate.ru/bypartner |
2 | client_id | Идентификатор клиента (предоставляется сервисом Paylate, соответствует номеру договора) |
3 | order_id | идентификатор заказа в Вашей БД |
4 | sum | Итоговая сумма заказа |
5 | goods | Данный массив может содержать один или несколько товаров. Товар определяется следующей структурой:
|
6 | token | Токен, формируется как: md5(логин + md5(пароль) + номер_заказа) |
7 | action | Постоянный параметр, значение: by_partner |
8 | pregen | Постоянный параметр, значение: 1 |
9 | result_url | Ссылка для кнопки — «Вернуться на сайт магазина». |
В ответ будет направлена ссылка вида — https://paylate.ru/zxcas
array (
'URL' => 'https://paylate.ru/bypartner',
'POSTFIELDS' => 'client_id=1702082013&pregen=1&action=by_partner&sum=19880&token=1&order_id=1&goods=[{"Name":"BORK V705","Category":"Бытовая техника","Price":19880,"Count":1}]',
'RETURN_URL' => 'https://paylate.ru/zxcas',
)
Передача данных о заказе без перехода на сайт Paylate
Данный способ интеграции заменяет iframe, анкета открывается прямо на сайте партнера. Необходимо сообщить сотрудникам Paylate адрес страницы, на которой будет открываться анкета. Сотрудники добавят сайт в белый список (иначе будет получена CORs ошибка при попытке открыть анкету).
Необходимо добавить на страницу следующий javascript:
<script
defer src="https://component-widget.paylate.ru/paylate-widget.umd.min.js"></script>
Указание атрибута defer обязательно.
В тело страницы необходимо добавить тег paylate-widget с указанием определенного набора атрибутов(параметров):
# | Параметр | Тип данных | Описание | 3 |
---|---|---|---|---|
1 | client_id | String | Идентификатор партнера (предоставляется сервисом Paylate, соответствует номеру договора) | |
2 | order_id | String | идентификатор заказа в Вашей БД | |
3 | goods | Array | Данный массив может содержать один или несколько товаров. Товар определяется следующей структурой: { | |
4 | token | String | Токен, формируется как: md5(логин + md5(пароль) + номер_заказа) | |
5 | result_url | String | Ссылка для кнопки — «Вернуться на сайт магазина» (необязательный параметр) | |
6 | fio | String | Фамилия клиента (необязательный параметр) | |
7 | fio1 | String | Имя клиента (необязательный параметр) | |
8 | fio2 | String | Отчество клиента (необязательный параметр) |
Пример тега paylate-widget <paylate-widget
goods='[{"Name":"test","Price":"3000.00","Count":2}]',
token="701384c3c2000249ad7c46c26534d758",
order_id="9319572",
client_id="3212208052020",
result_url="https://lk.paylate.ru",
fio="Иванов",
fio1="Иван",
fio2="Иванович"></paylate-widget>
Пример реализации на C#
— На главной странице, например, _Layout.cshtml перед закрывающим </body> указать путь к скрипту виджет-компонента:
<script defer src=»https://component-widget.paylate.ru/paylate-widget.umd.min.js»></script>
— Создать страницу для встраивания виджета в представлениях: ./Views/Widget/Index.cshtml
На странице прописать тег paylate-widget с параметрами(значения для параметров передаются из контроллера):
<paylate-widget
goods=’@ViewBag.Goods’
token=»@ViewBag.Token»
order_id=»@ViewBag.OrderId»
client_id=»@ViewBag.ClientId»
category=»»
result_url=»»
fio=»»
fio1=»»
fio2=»»
></paylate-widget>
— Создать контроллер: ./Controller/WidgetController.cs
В контроллере создать action-метод:
public ActionResult Index()
{
ViewBag.Goods = ‘[{«Name»:»Мобильные вкусняшки»,»Price»:»5500.00″,»Count»:2}]’;
ViewBag.ClientId = _clientId;
ViewBag.OrderId = _orderId;
string token = BitConverter.ToString(MD5.Create().ComputeHash(Encoding.ASCII.GetBytes(partner.Login.ToString() + partner.Password.ToString() + orderId.ToString()))).ToLower().Replace(«-«, «»);
ViewBag.Token = token;
return View();
}
Пример реализации на PHP
— На главной странице, например, index.php перед закрывающим </body> указать путь к скрипту виджет-компонента:
<script src=»https://component-widget.paylate.ru/paylate-widget.umd.min.js»></script>
— Создать страницу для встраивания виджета: widget.php
На странице прописать тег paylate-widget с параметрами:
<?php
$goods = ‘[{«Name»:»Вкусняшки»,»Price»:»3000.00″,»Count»:2}]’;
$token = md5($login . md5($password) . $_GET[‘order_id’]);
?>
<paylate-widget
goods='<?=$goods>’
token=»<?=$token?>»
order_id=»<?=$orderId?>»
client_id=»<?=$clientId?>»
category=»»
result_url=»»
fio=»»
fio1=»»
fio2=»»
></paylate-widget>
Создание файла для обмена статусами
При регистрации Вам необходимо передать url результирующей страницы на вашем интернет-магазине (например, /result_url.aspx или /paylate/url_result.php). На данную страницу, после авторизации клиента на сервисе paylate.ru и получения согласия об оплате от клиента, Вам будут переданы следующие POST параметры:
Таблица 1. POST-параметры
# | Параметр | Описание |
---|---|---|
1 | order_id | идентификатор заказа в Вашей БД |
2 | state | статус оплаты клиентом («-1» — отказ в пост-оплате, «0» – запрос системы paylate к Вашему сайту для определения возможности отправки заказа клиенту, «1» — оплачен) |
3 | sum | сумма оплаты |
4 | token | токен, формируется также как и при создании кнопки * |
5 | application_id | уникальный номер заявки в системе paylate |
Получив данные параметры, Вам необходимо сравнить token и сумму sum с суммой в Вашей БД по заказу order_id. Если суммы совпадают, и значение параметра state (статус) равно 1, Вы можете производить отгрузку товара/услуги клиенту.
После получения POST-параметров на url результирующей страницы, с параметром state (статус) равным «0» — Вам необходимо вернуть системе paylate возможность отгрузки товара/услуги – это «1», если имеется возможность отгрузки товара/услуги и «0» – если нет.
Если же на url результирующей страницы система paylate передала Вам параметр state (статус) равный «-1», то клиент отказался от оплаты данного заказа.
Ниже представлен пример файла для обмена статусами между Вашим сайтом и сервисом paylate, а также текстовое описание функционала данного файла.
Пример файла обмена статусами (PHP)
// Пример обработки результата оплаты клиентом
// Формируем токен, в соответствии с документацией(приведены тестовые данные)
$order_id = $_POST["order_id"];
$login = "test";
$password = "test";
$token = md5($login . md5($password) . $order_id);
// Ввывод строкой. Разделитель \n
if ($token != $_POST["token"])
{
echo "RESULT:-1\nDESCR:ошибка определения источника запроса";
exit;
}
// Есть ли возможность отгрузить заказ
// Процедура GetOrderApprove должна найти заказ по order_id, и сравнить сумму заказа с переданной суммой
$approve = GetOrderApprove($_POST["order_id"], $_POST["sum"]);
if ( $_POST["state"] == 0 )
{
if ($approve)
{
// DESCR: может иметь любое присвоенное Вами значение, поскольку при данном статусе клиенту не выводится.
echo"RESULT:1\nDESCR:актуален";
}
else
{
// В данном случае значение DESCR будет показано клиенту
echo"RESULT:0\nDESCR:Ваш заказ был отменен менеджером";
}
}
// Клиент оплатил
if ( $_POST["state"] == 1 )
{
if ($approve)
{
// Устанавливаем статус заказа «клиент оплатил» и фиксируем application_id
SaveOrderState($_POST["order_id"], $_POST["application_id"], "оплатил");
// DESCR: может иметь любое присвоенное Вами значение, поскольку при данном статусе клиенту не выводится).
echo "RESULT:1\nDESCR:статус оплатил";
}
else
{
// В данном случае значение DESCR будет показано клиенту
echo "RESULT:0\nDESCR:Ваш заказ был аннулирован по сроку давности";
}
}
// Клиент отказался от оплаты заказа
if ( $_POST["state"] == -1 )
{
if ($approve)
{
// Устанавливаем статус заказа «клиент отказался» и фиксируем application_id
SaveOrderState($_POST["order_id"], $_POST["application_id"], "отказался");
// DESCR: может иметь любое присвоенное Вами значение, поскольку при данном статусе клиенту не выводится).
echo "RESULT:1\nDESCR:отказ принят";
}
}
Текстовое описание функционала файла обмена статусами
Если токен неверный, то выдать результат в виде следующей строки: «RESULT:-1\nDESCR:ошибка определения источника запроса».
Если $_POST[“state”] = 0, то выполняется проверка соответствия суммы заказа $_POST[“sum”] в Вашей базе по заказу $_POST[“order_id”]. И проверка возможности поставки услуги/товара. Если все ОК, то выдается строка «RESULT:1\nDESCR:актуален». (DESCR: может иметь любое присвоенное Вами значение, клиенту не выводится).
Если произошла ошибка или нет возможности предоставить клиенту данную услугу, то должна генерироваться строка «RESULT:0\nDESCR:Ваш заказ был отменен менеджером». (В данном случае значение DESCR будет показано клиенту).
Если $_POST[“state”] = 1, то выполняется проверка наличия заказа $_POST[”order_id”] (он должен быть). И установка статуса в Вашей БД у данного заказа что клиент его оплатил, система paylate выдала займ. В результате должна генерироваться строка «RESULT:1\nDESCR:статус оплатил». (DESCR: может иметь любое присвоенное Вами значение, клиенту не выводится). По параметру $_POST[«application_id»] можно производить сверку заказов в Вашей БД и БД paylate. Данный параметр Вы можете занести в свою БД для последующей идентификации заявки в системе paylate.
Если $_POST[“state”] = -1, то выполняется проверка наличия заказа $_POST[“order_id”] (он должен быть). И установка статуса в Вашей БД у данного заказа что клиент отказался от оплаты с помощью системы paylate. В результате должна генерироваться строка «RESULT:1\nDESCR:отказ принят». (DESCR: может иметь любое присвоенное Вами значение, клиенту не выводится)