Как отладить недопустимую полезную нагрузку webhook с помощью stymiee / authnetjson

Я использую stymiee/authnetjson библиотека для использования и проверки авторизации webhook в среде песочницы.

Я могу проверить, что мои заголовки включают

X-ANET-Signature: sha512=C3CC15F7801AA304C0840C85E4F0222A15338827EE3D922DC13A6BB99DF4BFE7D8E235A623480C0EAF3151F7B008E4DFBFDC6E9F493A6901961C5CFC10143289

И мое тело JSON

{"notificationId":"c5933ec1-2ef6-4962-a667-10552d19c481","eventType":"net.authorize.payment.authcapture.created","eventDate":"2018-01-20T20:36:54.9163559Z","webhookId":"66cf7109-f42f-45b9-bf36-f1ade83eac48","payload":{"responseCode":1,"authCode":"37ATT8","avsResponse":"Y","authAmount":550.00,"entityName":"transaction","id":"60038744863"}}

У меня настроен ключ подписи, и все кажется правильным и похожим на тот, что был в тестах для библиотеки.

Мой код выглядит так:

$signature_key = "...";
$headers = getallheaders();
$payload = file_get_contents("php://input");

$webhook = new JohnConde\Authnet\AuthnetWebhook($signature_key, $payload, $headers);

if ( ! $webhook->isValid() ) {
error_log("Payload not valid");
}

Я также пытался удалить $headers аргумент из конструктора аргументов

Когда я выполняю тестовую транзакцию, она недействительна, поэтому я получаю «Payload not valid» в журналах. Как я могу отладить эту проблему?

Спасибо!
NFV

1

Решение

Эта проблема была вызвана X-ANET-Signature быть чувствительным к регистру. Я изначально искал это именно так, как вы видите, но другой пользователь обратился ко мне с той же проблемой, но они получали X-Anet-Signature вместо этого код не ожидал. Когда я выполнял отладку, я увидел ту же проблему и подумал, что я либо сделал ошибку, когда впервые кодировал это, либо Authnet внес изменения, и мне нужно было адаптироваться.

Видимо, это не проблема. Я не уверен, почему мы видим противоречивые случаи для этого заголовка, но я обращусь к Authorize.Net, чтобы узнать, смогу ли я узнать, что это за история.

Но исправить это легко: обновите библиотеку, чтобы использовать версию 3.1.4, которая не зависит от регистра при проверке значения этого заголовка.

Чтобы ответить на буквальное название этого вопроса, вот пример сценария для решения этой проблемы:

<?php

namespace myapplication;

use JohnConde\Authnet\AuthnetWebhook;

// Include a configuration file with the Authorize.Net API credentials
require('./config.inc.php');

// Include my application autoloader
require('./vendor/autoload.php');

$errorCode = null;
$errorText = null;
$isValid   = null;

try {
$headers = getallheaders();
$payload = file_get_contents("php://input");
$webhook = new AuthnetWebhook(AUTHNET_SIGNATURE, $payload, $headers);
$isValid = 'false';
if ($webhook->isValid()) {
$isValid = 'true';
}
$hashedBody = strtoupper(hash_hmac('sha512', $payload, AUTHNET_SIGNATURE));
$hash = explode('=', $headers['X-Anet-Signature'])[1];
$valid = strtoupper(explode('=', $headers['X-Anet-Signature'])[1]) === $hashedBody;
}
catch (\Exception $e) {
$errorCode = $e->getCode();
$errorText = $e->getMessage();
}
finally {
ob_start();
var_dump([
'errorCode'  => $errorCode,
'errorText'  => $errorText,
'isValid'    => $isValid,
'headers'    => $headers,
'payload'    => $payload,
'hashedBody' => $hashedBody,
'hash'       => $hash,
'valid'      => $valid
]);
$dump = ob_get_clean();
file_put_contents('webhooks.txt', $dump, FILE_APPEND | LOCK_EX);
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]