Paypal IPN INVALID消息何时有特殊字符

时间:2011-06-02 09:17:52

标签: php paypal special-characters paypal-ipn

当我在paypal沙盒上使用信用卡付款时,我会在地址1 /地址2文本字段中填写一些特殊字符(例如:@ @%^ & )。 付款后,我收到一条IPN消息,回发给PP并收到一条INVALID消息(HTTP错误200)。

我在PP上的个人资料/语言上设置了UTF-8。但问题仍然存在。

备注:如果我使用PP帐户付款,付款流程可以正常工作(意味着登录并点击付款按钮)。

1 个答案:

答案 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
}