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);

纠结了两天,现在终于成功了!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值