如何用Postman向PHP提交原始POST数据测试PayPal IPN回调?
解决Postman发送原始POST数据到PHP脚本时$_POST为空的问题
问题根源
PHP的$_POST变量仅自动解析Content-Type为application/x-www-form-urlencoded或multipart/form-data的POST请求数据,像text、json这类其他格式的原始请求体,不会被自动填充到$_POST中。
解决方案:读取原始请求体
直接使用file_get_contents('php://input')获取完整的原始POST数据,无论Content-Type是什么都能拿到整段文本。
具体操作步骤
Postman配置
- 新建POST请求,填入你的PHP脚本地址
- 切换到
Body标签,选择raw选项 - 在文本框中粘贴需要发送的整段PayPal IPN文本
- 选择对应Content-Type(比如
text/plain,或和PayPal回调一致的application/x-www-form-urlencoded均可)
PHP脚本代码示例
// 读取完整的原始POST数据 $rawPost = file_get_contents('php://input'); // 可直接用$rawPost执行PayPal IPN验证逻辑(示例) // $ch = curl_init('https://ipnpb.paypal.com/cgi-bin/webscr'); // curl_setopt($ch, CURLOPT_POST, true); // curl_setopt($ch, CURLOPT_POSTFIELDS, $rawPost); // curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); // $response = curl_exec($ch); // curl_close($ch); // if (strcmp($response, "VERIFIED") == 0) { // // 验证通过,处理业务逻辑 // } else { // // 验证失败,记录日志或其他处理 // } // 测试用:输出收到的原始数据 echo "收到的原始POST数据:\n"; echo $rawPost;
注意事项
- 无需纠结
$_POST变量,php://input读取的内容就是你在Postman中发送的整段文本 - 如果严格模拟PayPal IPN回调,建议将Content-Type设置为
application/x-www-form-urlencoded,但只要使用php://input读取,其他类型也能正常获取数据
内容的提问来源于stack exchange,提问作者edam
相关产品推荐
相关产品推荐

