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 的值。
邮递员[=33=]
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);
我正在尝试构建一个 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 的值。
邮递员[=33=]
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);