Не ссылаясь на остальную часть вашей логики, причина, по которой ваше утверждение if считает неверным, состоит в том, что вы кодируете данные json, которые уже являются json.Когда вы вызываете getallheaders()
, тип контента уже определен как json.Поэтому замените это:
$headers = getallheaders();
$payloadraw = file_get_contents("php://input");
$payloadEncoded = json_encode($payloadraw);
$payloadDecoded = json_decode($payloadraw);
$type = gettype($payloadraw);
на это:
$headers = getallheaders();
$payload = file_get_contents("php://input");
и это:
$webhook = new AuthnetWebhook($signature,$payload, $headers);
if ($webhook->isValid()) {
//logic goes here
}
Будет оцениваться как true, и любая допустимая логика содержится в условнойбудет выполнен.Я рекомендую протестировать приведенный выше код, чтобы убедиться, что он работает (работает) перед добавлением дополнительной логики.Вы можете создать простой файл журнала, подобный следующему:
$dump = print_r($payload,true);
$fp = file_put_contents( '
test.log', $dump );
И если в вашем каталоге есть файл test.log после доставки одного веб-крючка, вы знаете, что у вас есть базовая линия для перехода.Если в остальной части вашего оператора if есть неверная логика, это может привести к поломке.
И чтобы ответить на ваш первый вопрос, на который уже был дан правильный ответ, не конвертируйте ключ подписи в двоичный.Таким образом, $signature
в приведенном выше коде является ключом подписи, точно таким же, который вы получили от авторизации.