PHP Webhook - x-www-form-urlencode 解析

PHP Webhook - x-www-form-urlencode parse

我正在尝试构建一个 kofi webhook 解析器,它发送的数据是这样的

data: {
"message_id":"3a1fac0c-f960-4506-a60e-824979a74e74",
"kofi_transaction_id":"0a1fac0c-f960-4506-a60e-824979a74e71",
"timestamp":"2022-08-21T13:04:30Z",
"type":"Donation",
"from_name":"Ko-fi Team",
"message":"Good luck with the integration!",
"amount":"3.00",
"currency":"USD",
"url":"https://ko-fi.com"
"is_subscription_payment":false
"is_first_subscription_payment":false}

发送的数据内容类型为 application/x-www-form-urlencoded。名为 'data' 的字段包含付款信息作为 JSON 字符串(根据网站信息)。

我有一个 php 脚本来尝试获取数据

parse_str(file_get_contents("php://input"), $data);
//$data = (object)$data;
$data = json_decode(json_encode($data), true);
var_dump($data);

error_log($data->{'message_id'});

我似乎无法获得 message_id 的值。

邮递员[=3​​3=]

array(12) {
  ["data"]=>
  string(2) " {"
  [""message_id""]=>
  string(39) ""3a1fac0c-f960-4506-a60e-824979a74e74","
  [""kofi_transaction_id""]=>
  string(39) ""0a1fac0c-f960-4506-a60e-824979a74e71","
  [""timestamp""]=>
  string(23) ""2022-08-21T13:04:30Z","
  [""type""]=>
  string(11) ""Donation","
  [""from_name""]=>
  string(13) ""Ko-fi Team","
  [""message""]=>
  string(34) ""Good luck with the integration!","
  [""amount""]=>
  string(7) ""3.00","
  [""currency""]=>
  string(6) ""USD","
  [""url""]=>
  string(19) ""https://ko-fi.com""
  [""is_subscription_payment""]=>
  string(5) "false"
  [""is_first_subscription_payment""]=>
  string(6) "false}"
}

我不相信邮递员发送的数据是准确的,它的格式很奇怪。

有人可以帮我解决我做错了什么吗?我基本上想接收数据并从接收到的数据中提取值,然后将其推送到数据库中。

您当然知道您无法查看传入数据 - 您需要将其保存在某个地方......在下一个示例中,我将收到的 json 保存到 txt 文件中以查看是否收到.

尝试这样做:

$webhookContent = '';

$webhook = fopen("php://input" , "rb");
while (!feof($webhook)) {
    $webhookContent .= fread($webhook, 4096);
}
fclose($webhook);

error_log($webhookContent);
$webhookContent = str_replace("'", "", $webhookContent);

$WebHookArray = json_decode($webhookContent,true);

$newFile = fopen("someFile.txt","w");
fwrite($newFile,$webhookContent . "\n");
fclose($newFile);

这会将数据保存到本地文件(如果它没有创建 - 创建它,只是为了测试,给它 777 权限,这样它就会将数据保存在那里....)

获取 json 并在线解码或通过 php json_decode($json,true); <- 不要忘记 ,true ... 并查看它是否成为一个标准数组,您可以从中获取“message_id”。

如果那里的一切似乎都是正确的……在 json 格式中……而不是用 $WebHookArray['message_id'] - json_decoded 替换 $webhookContent。

Ko-fi 发送 urlencoded 表单数据,这意味着您必须使用 urldecode 来解码传入的字符串,然后才能解析它并解码 json 对象。

parse_str(urldecode(file_get_contents("php://input")), $input);

$webhook = json_decode($input['data']);

var_dump($webhook->message_id);