🔙WebHook
Last updated
Last updated
Когда пользователь завершает оплату, наш сервис отправляет на ваш WebHook URL данные об успешной оплате.
Вам следует проверить подпись sign, чтобы убедиться в том, что этот запрос прислали мы, а не хакеры.
Обратите внимание, что тут используется secret key 2
Название | Тип | Описание |
---|---|---|
import express from 'express'; // npm install express
import crypto from 'crypto'; // npm install crypto
const api = express(); // Создаем экземпляр Express
api.use(express.json()); // Позволяет обрабатывать JSON-запросы
const router = express.Router(); // Создаем экземпляр маршрутизатора Express
// Обработчик POST-запроса для вебхука оплаты от Paynstars
router.post('/paynstarsWH', async (req, res, next) => {
// Извлекаем данные из тела запроса
let order_id = req.body.order_id; // Получаем ID заказа
let res_sign = req.body.sign; // Получаем подпись, переданную в запросе
delete req.body.sign; // Удаляем подпись из данных запроса, чтобы не участвовала в проверке
const req_data = req.body; // Полученные данные запроса
req_data.secret_key = "38Q9m1WWz4Av1d326jPq4r1UOCB6C33o"; // Устанавливаем секретный ключ #2
// Формируем данные для проверки подписи
let sortedKeys = Object.keys(req_data).sort(); // Получаем отсортированные ключи объекта данных
let data = sortedKeys.map(key => req_data[key]).join(':'); // Формируем строку данных для проверки подписи
let sign = crypto.createHash('md5').update(data).digest('hex'); // Создаем хеш данных
// Проверяем, совпадают ли полученная подпись с ожидаемой
if (res_sign === sign) {
console.log(`Пользователь произвёл оплату по заказу ${order_id}`); // Если подписи совпадают, выводим сообщение об успешной оплате
return res.send("Ok"); // Отправляем ответ "Ok"
}
return res.send("error"); // Если подписи не совпадают, отправляем ответ "error"
});
api.use(router); // Регистрируем маршрут в экземпляре Express
// Настраиваем прослушивание порта 3000
api.listen(3000, () => {
console.log('🚀 Server ready'); // Выводим сообщение о запуске сервера в консоль
});
<?php
// Получаем тело запроса
$json_data = file_get_contents('php://input');
// Парсим JSON-данные в ассоциативный массив
$req_data = json_decode($json_data, true);
// Проверяем, были ли успешно разобраны JSON-данные
if ($req_data === null) {
// Если JSON-данные не удалось разобрать, отправляем ошибку
echo "Invalid JSON data";
http_response_code(400); // Устанавливаем код ответа 400 Bad Request
exit(); // Завершаем выполнение скрипта
}
// Обработчик POST-запроса для вебхука оплаты от Paynstars
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($req_data['order_id']) && isset($req_data['sign'])) {
// Извлекаем данные из тела запроса
$order_id = $req_data['order_id']; // Получаем ID заказа
$res_sign = $req_data['sign']; // Получаем подпись, переданную в запросе
unset($req_data['sign']); // Удаляем подпись из данных запроса, чтобы не участвовала в проверке
$req_data['secret_key'] = "38Q9m1WWz4Av1d32056q4r1UOCB6C33o"; // Устанавливаем секретный ключ #2
// Получаем отсортированные ключи массива данных
ksort($req_data);
// Формируем строку данных для проверки подписи
$data = implode(':', $req_data);
// Создаем хеш данных
$sign = hash('md5', $data);
// Проверяем, совпадают ли полученная подпись с ожидаемой
if ($res_sign === $sign) {
echo "Пользователь произвёл оплату по заказу {$order_id}"; // Если подписи совпадают, выводим сообщение об успешной оплате
http_response_code(200); // Устанавливаем код ответа 200 OK
} else {
echo "error"; // Если подписи не совпадают, отправляем ответ "error"
http_response_code(400); // Устанавливаем код ответа 400 Bad Request
}
} else {
echo "Invalid request"; // Если запрос некорректный, отправляем ответ "Invalid request"
http_response_code(400); // Устанавливаем код ответа 400 Bad Request
}
?>
id
string
ID транзакции
project_id
integer
ID проекта
order_id
string
Ваш внутренний ID заказа
amount
integer
Сумма в Звёздах
currency
string
Тип валюты
sign
string
success
boolean
true