当我在paypal沙盒上使用信用卡付款时,我会在地址1 /地址2文本字段中填写一些特殊字符(例如:@ @%^ & )。 付款后,我收到一条IPN消息,回发给PP并收到一条INVALID消息(HTTP错误200)。
我在PP上的个人资料/语言上设置了UTF-8。但问题仍然存在。
备注:如果我使用PP帐户付款,付款流程可以正常工作(意味着登录并点击付款按钮)。
答案 0 :(得分:3)
您必须小心向Paypal发送您在IPN通话中收到的确切数据,但cmd
参数必须设置为_notify-validate
,这是个明显的例外。
这是一些PHP代码,它接受原始POST数据,将其解析为数组,更改cmd
参数,将其转换回POST数据,然后将其发送到Paypal。获取原始POST数据允许绕过PHP的内置解析,这可能会应用杂乱的东西,如魔术引号,具体取决于您的配置。
$post = file_get_contents('php://input');
parse_str($post, $data);
$data['cmd'] = '_notify-validate';
$post = http_build_query($data);
$ch = curl_init('https://www.paypal.com/cgi-bin/webscr');
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
$result = curl_exec($ch);
curl_close($ch);
if ($result == 'VERIFIED') {
// process the payment
}