Пример PHP-скриптов для оплаты заказов на сайте через экваринг Intellectmoney.
Подробная документация на https://wiki.intellectmoney.ru.
В личном кабинете, в разделе «Магазины» нужно перейти в настройки магазина. Вкладка «Прием платежей»:
Нужно указать:
- Back URL – адрес интернет-магазина, на который будет возвращен пользователь после оплаты.
- Result URL – URL, на который система IntellectMoney посылает POST-оповещения о оплате.
На сайте, после оформления заказа нужно сформировать ссылку для оплаты и перенаправить туда пользователя:
<?php
$params = array(
'eshopId' => '123456', // идентификатор магазина
'orderId' => '1', // ID заказа
'serviceName' => '', // Описание заказа
'recipientAmount' => 100, // Сумма заказа
'recipientCurrency' => 'RUB',
);
// Перенаправляем пользователя на страницу оплаты
header('Location: https://merchant.intellectmoney.ru/ru/?' . urldecode(http_build_query($params)));
exit;
Далее откроется форма оплаты:
После оплаты, на Result URL придет POST-запрос со следующими полями:
Array
(
[eshopId] => 123456
[paymentId] => xxxxxxx
[orderId] => 1
[eshopAccount] => xxxxxxx
[serviceName] =>
[recipientAmount] => 100.00
[commissionAmount] => 10.50
[recipientOriginalAmount] => 100.00
[recipientCurrency] => RUB
[paymentStatus] => 5
[userName] => Иван Иванов
[userEmail] => test@example.com
[paymentData] => 2022-03-23 13:38:54
[secretKey] =>
[payMethod] => Acquiring
[shortPan] =>
[country] =>
[bank] =>
[ipAddress] =>
[cardHolder] =>
[brandType] =>
[rcCode] =>
[rcCodeUserDescription] =>
[gatewayName] => QiwiBankDirect
[hash] => 2672e672443b9784e190664b5de77580
)
По ним определяем статус платежа:
- 3 (создан счет к оплате (СКО) за покупку),
- 4 (СКО аннулирован, деньги возвращены пользователю),
- 7 (СКО частично оплачен, в данном случае сумма которая уже оплачена передается в параметре recipientAmount),
- 5 (СКО полностью оплачен, деньги переведены на счет интернет-магазина),
- 6 (необходимая сумма заблокирована (холдирована) на СКО, ожидается запрос на списание или разблокировку средств или истечение срока блокировки),
- 8 (по СКО был произведен возврат, в данном случае в параметре refundAmount передается сумма по возврату, в параметре recipientAmount передается сумма, оставшаяся у интернет-магазина).
И обновляем данные заказа в своём магазине.
<?php
// Сохраняем запрос в лог-файл
file_put_contents(__DIR__ . '/log.txt', print_r($_POST, true) . PHP_EOL, FILE_APPEND);
$orderId = intval(@$_POST["orderId"]);
$paymentId = intval(@$_POST["paymentId"]);
if (@$_POST["paymentStatus"] == '5') {
// Статус = 5, значит оплата прошла.
// Далее нужно сохранить полученный paymentId в таблице заказов используя $orderId.
}
echo "OK";
exit();