You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP解析Ko-fi Webhook的x-www-form-urlencoded数据无法取值问题

问题解决指南

错误原因1:Postman请求配置错误

你当前返回的解析结果里JSON结构被拆成多个独立键,是Postman配置错误导致:

  • 你错误将JSON的每个字段单独作为application/x-www-form-urlencoded的参数提交,而非按官方要求将完整JSON作为data参数的值提交
  • 你使用的测试JSON本身存在语法错误,url字段、is_subscription_payment字段后均缺少英文逗号,会导致JSON解析失败

正确Postman配置步骤

  1. 请求方法选POST,请求体类型选择x-www-form-urlencoded
  2. 仅添加1个参数:键为data,值为补全后的完整JSON字符串:
{"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}

错误原因2:PHP解析逻辑错误

你原来的代码存在多余的转码操作,且混淆了数组和对象的访问语法:

  • 官方规则为data字段存储完整JSON字符串,无需对解析后的表单数组做json_encode再json_decode的冗余操作
  • 若json_decode第二个参数传true会返回关联数组,不能用->对象语法访问字段,需用数组下标语法

正确PHP代码示例

// 解析x-www-form-urlencoded格式的请求体
parse_str(file_get_contents("php://input"), $formData);

// 直接解析data字段内的JSON字符串,返回关联数组
$paymentInfo = json_decode($formData['data'], true);

// 字段取值示例
var_dump($paymentInfo);
error_log($paymentInfo['message_id']);
error_log($paymentInfo['amount']);

// 若偏好对象访问语法,去掉json_decode的第二个参数即可:
// $paymentInfo = json_decode($formData['data']);
// error_log($paymentInfo->message_id);

入库注意事项

提取到对应字段值后,使用PDO或MySQLi的预处理语句执行数据库写入操作,避免SQL注入风险。

内容的提问来源于stack exchange,提问作者TheMonk300

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 06:12:04