欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Paypal协议升级

程序员文章站 2022-07-04 08:12:12
...
   公司一直在使用paypal接收外汇,但是最近收到paypal的一封邮件,大体意思是,由于官方网站升级改版,现在在noticeUrl中的校验协议要从原来的http1.0替换为http1.1,这就要求收到验证信息过后给paypal的http返回信息头部需要做一些修改:
1.
// post back to PayPal system to validate
$header = "POST /cgi-bin/webscr HTTP/1.0\r\n";
$header .= "Content-Type: application/x-www-form-urlencoded\r\n";
$header .= "Content-Length: " . strlen($req) . "\r\n\r\n";
修改为:
// post back to PayPal system to validate
$header .= "POST /cgi-bin/webscr HTTP/1.1\r\n";
$header .= "Content-Length: " . strlen($req) . "\r\n";
$header .= "Content-Type: application/x-www-form-urlencoded\r\n";
$header .= "Host: www.paypal.com\r\n";
$header .= "Connection: close\r\n\r\n";
2.
if (strcmp ($res, "VERIFIED") == 0) {
..
else if (strcmp ($res, "INVALID") == 0) {
修改为:
if (strcmp (trim($res), "VERIFIED") == 0) {
..
else if (strcmp (trim($res), "INVALID") == 0) {

此外还要注意,
1.$header的最后一行必须是以“ \r\n\r\n ”结尾。
2.之后的$fp = fsockopen ('www.paypal.com', 80, $errno, $errstr, 30);也要做修改。
关于$fp和$header .= "Host: www.paypal.com\r\n";是我最头大的地方,有人说应该这么写:
$header .= "Host: www.paypal.com\r\n" 对应的$fp=$fp = fsockopen ('www.paypal.com', 80, $errno, $errstr, 30);
或者:
$header .= "Host: www.paypal.com\r\n" 对应的$fp=$fp = fsockopen ('ssl://www.paypal.com', 80, $errno, $errstr, 30);
或者
$header .= "Host: www.paypal.com\r\n" 对应的$fp=$fp = fsockopen ('ssl://www.paypal.com', 443, $errno, $errstr, 30);
而官方文档要求这样写:
$header .= "Host: ipnpb.paypal.com\r\n" 对应的$fp=$fp = fsockopen ('ssl://ipnpb.paypal.com', 443, $errno, $errstr, 30);


在尝试了所有这些都失败过后,我发现,其实不需要做改变,还是用http1.0时候的那种写法就可以了,即是:
$header .= "Host: www.paypal.com\r\n" 对应的$fp=$fp = fsockopen ('www.paypal.com', 80, $errno, $errstr, 30);

纠结了两天,现在终于成功了!
相关标签: fp 网络协议