Paypal协议升级

   公司一直在使用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);

纠结了两天,现在终于成功了!

猜你喜欢

转载自chenyudengyuqiong-163-com.iteye.com/blog/1937890
今日推荐