Web-hook
Web-hook
Для уведомлять магазина о получении платежа, мы используем механизм web-hook. Чтобы получать информацию о платежах в вашем магазине, зарегистрируйте конечную точку, на которую вы хотите получать уведомления о платежах, в настройках магазина мерчанта.
Где используется “secret” для подписи.
Обязательно установите флажок напротив "Поступил новый платеж"
Для получение обратного вызова с целью узнать о платеже, вам необходимо создать конечную точку на стороне интегратора, на которую мерчант отправит событие в данный момент. Мерчант поддерживает только один вариант событий: получение платежа.
Для обеспечения безопасности магазина используется механизм подписи. Мерчант передает зашифрованную строку sha256 в заголовке X-sign, которая включает в себя тело отправляемого запроса и объединенный “secret”.
Например, мерчант отправляет веб-хук по URL _____________ с запросом POST
Тело запроса в этом случае будет выглядеть следующим образом
{
"orderId": "",
"status": "paid",
"createdAt": "2023-09-15T07:31:46.000000Z",
"paidAt": "2023-09-15T07:31:46.000000Z",
"expiredAt": "2023-09-15T07:51:46.000000Z",
"amount": 15,
"receivedAmount": "15.00",
"transactions": [
{
"txId": "98af9289aa06da5a13a9881dd2ee74ba85cfd1af20343ce50c6071275eea8e7b",
"createdAt": "2023-09-15 07:31:46",
"currency": "USDT",
"blockchain": "tron",
"amount": "15.00000000",
"amountUsd": "15.00",
"rate": "1.00000000"
}
],
"payer": {
"id": "623cf62d-7ec3-4b60-8abc-ba063f3bbf93",
"storeUserId": "502162"
}
}
наш заголовок X-sign будет eaba3d825829da2db79b95ef362e7b24a4c8b27fb643bad54d180e43ca9152de
Соответственно, со стороны хранилища стоит проверить правильность подписи, создав тот же хэш и сверив его с заголовком
$requestBodyString = '{"orderId":"","status":"paid","createdAt":"2023-09-15T07:31:46.000000Z","paidAt":"2023-09-15T07:31:46.000000Z","expiredAt":"2023-09-15T07:51:46.000000Z","amount":15,"receivedAmount":"15.00","transactions":[{"txId":"98af9289aa06da5a13a9881dd2ee74ba85cfd1af20343ce50c6071275eea8e7b","createdAt":"2023-09-15 07:31:46","currency":"USDT","blockchain":"tron","amount":"15.00000000","amountUsd":"15.00","rate"
:"1.00000000"}],"payer":{"id":"623cf62d-7ec3-4b60-8abc-ba063f3bbf93","storeUserId":"502162"}}';
$secret = 'c23a3ce904b4a9421d35590639f3589e0a491bf7'
$sign = hash('sha256', $requestBodyString . $secret); //eaba3d825829da2db79b95ef362e7b24a4c8b27fb643bad54d180e43ca9152de
если по какой-либо причине не удалось получить ответ 200 от магазина, через некоторое время мерчант повторно отправит сообщение, частота отправки увеличивается экспоненциально.