【问题标题】:Getting "Invalid JSON sent in the Webhook notification" Authorize.net [closed]获取“在 Webhook 通知中发送的无效 JSON” Authorize.net [关闭]
【发布时间】:2018-09-03 21:04:50
【问题描述】:

我的 Authorize.net webhook 在 A.net 端设置正确,当我触发一个事件来获取通知时,我在错误日志中得到这个:

PHP 致命错误:未捕获的异常 带有消息“无效”的“JohnConde\Authnet\AuthnetInvalidJsonException” JSON 在 /.../AuthnetWebhook.php:67 中的 Webhook 通知中发送 堆栈跟踪: 0 /.../webhook.php(23): JohnConde\Authnet\AuthnetWebhook->__construct('xxxxxxxxxxx...', '', 大批) 1 {main} 在第 67 行的 /.../AuthnetWebhook.php 中抛出

我可以通过 Github 上的库成功设置 webhook 并获取通知历史记录。这是我用作端点的代码。 allow_url_fopen 和 allow_url_include 在我的服务器上都设置为启用。

<?php

namespace myapplication;

use JohnConde\Authnet\AuthnetWebhook;

require('.../config.inc.php');

require('.../autoload.php');

$headers = getallheaders();
$payload = file_get_contents("php://input");
$webhook = new AuthnetWebhook(AUTHNET_SIGNATURE, $payload, $headers);
if ($webhook->isValid()) {

    $transactionId = $webhook->payload->id;

    $fp = fopen('results.json', 'w');
    fwrite($fp, json_encode($webhook));
    fclose($fp);


    // Access notifcation values
    // echo $webhook->eventType;
}



?>

感谢您的帮助!

【问题讨论】:

    标签: php authorize.net authorize.net-webhooks


    【解决方案1】:

    您的有效负载是一个空字符串..您可以在错误中看到它。

    AuthnetWebhook->__construct('xxxxxxxxxxx...', '', Array)
    

    所以

    new AuthnetWebhook(AUTHNET_SIGNATURE, $payload, $headers); 
    

    我不熟悉AuthnetWebhook,但我敢打赌(如果我是赌徒)payload 变量不应该为空。

    【讨论】:

    • 是的,这是我不明白的一部分。我相信 $payload 应该是我从 webhook 收到的 JSON 数据。
    • 它可能会放在$_POST 中,有时它会放在那里,但我认为它仍然应该放在://input 中。我将输出或保存输入,从 Post 数据中,您可以使用 var_export($_POST, true); 将帖子保存在文件中,以将其作为格式化字符串。然后使用file_put_contents 我知道有时钩子和东西很难看到输出,所以将它保存到文件是一个选项。
    • 大多数人没有意识到 var_export 有第二个可选参数,它将它作为字符串返回而不是输出它...... :) 但它不应该为空,所以显而易见的事情是,A.它没有被发送,B. 它不在你认为的位置。
    • 谢谢,我会试试看我得到了什么。
    • 你说得对,$payload 是空的,它绝对不应该是空的。 $_POST 应该为空,以便预期结果。您是否尝试过使用 Postman 之类的工具来模拟 Webhook 来测试您的实现?这将是测试您的脚本是否正常运行的好方法。
    【解决方案2】:

    解决了。端点 URL 不正确。我有 mysite.com/webhook.php 并且需要 www.mysite.com/webhook.php。

    【讨论】:

    • 子域,您可以在 cpanel 中将其转发到 mysite.com...仅供参考,这是我经常做的第一件事。
    猜你喜欢
    • 2019-05-25
    • 2021-07-31
    • 2017-04-19
    • 1970-01-01
    • 2019-04-22
    • 1970-01-01
    • 1970-01-01
    • 2022-06-20
    • 1970-01-01
    相关资源
    最近更新 更多