运行多年的PayPal IPN脚本报header字段换行折叠不支持错误如何解决?
错误原因
报错的直接诱因是你代码中Host请求头行末尾的多余空格:
$header .= "Host: www.paypal.com\r\n ";
上述代码里\r\n换行符后面多了一个半角空格,符合HTTP 1.1协议里的头字段行折叠判定规则:服务器会把换行后开头带空白符的内容,识别为上一个请求头的延续内容,而非独立的请求头。也就是说你的代码会被PayPal服务端判定为Host头和Connection头被合并成了一个非法头字段。
这套脚本之前能正常运行是因为PayPal此前的服务端兼容了这种不规范的头格式,近期服务端校验规则收紧,明确禁止行折叠语法,所以直接返回400错误。
修复方案
直接删除Host行\r\n后面的多余空格即可,修改后的请求头代码参考如下:
$header = "POST /cgi-bin/webscr HTTP/1.1\r\n"; $header .= "Content-Type: application/x-www-form-urlencoded\r\n"; $header .= "Content-Length: " . strlen($req) . "\r\n"; $header .= "Host: www.paypal.com\r\n"; // 已移除换行后多余的空格 $header .= "Connection: close\r\n\r\n";
修改后重新测试即可正常完成IPN校验,拿到PayPal返回的VERIFIED响应。
内容的提问来源于stack exchange,提问作者Lauren
相关产品推荐
相关产品推荐

