AARRRRGH !!!!!!!! PayPal我只有脏话!!!!!!!问题出在...(鼓号...... tadam!)中 charset 领域!不,它的价值必须与IPN发送给你的价值相同,但......在大写! IPN以小写形式发送!因此,您必须修改IPN数据以验证它是否成功,无论手动告诉我们“按原样”返回数据。 PayPal错误?
charset
所以我的最终工作代码是:(使用HTTP_Request2)
protected function verifyPostData() { $this->request->setBody('cmd=_notify-validate&' . str_replace('=utf-8', '=UTF-8', file_get_contents('php://input'))); $response = $this->request->send(); if ($response->getStatus() != 200) { throw new \RuntimeException("Transaction data verification request failed with code {$response->getStatus()}"); } $content = trim($response->getBody()); return ($content == 'VERIFIED'); }
我是怎么做到的:我发送了此交易的PDT请求并获得了交易数据。然后我对PDT和IPN数据进行了现场比较。 PDT没有一些IPN字段,例如 auth , verify_sign 和 test_ipn 。但所有其他领域似乎必须相同。唯一的区别在于人物的情况 charset 领域。然后我尝试验证已修改的数据,并意外地成功!
auth
verify_sign
test_ipn
这是最近的PayPal错误,当客户完成付款并点击“点击此处返回..”而不是等待几秒钟时,传递到您网站上的PDT脚本的参数将以小写形式发送。
这也会使区分大小写或编码的cm / custom参数变得混乱。
显然PayPal意识到了这一点。