2011-06-02 110 views
1

當我通過信用卡在PayPal沙箱上進行支付時,我在地址1 /地址2文本字段中填入一些特殊字符(例如:@ @ @ @%^ )。 付款後,我收到一封IPN郵件,發回PP並收到INVALID消息(HTTP錯誤200)。PayPal IPN INVALID消息當有特殊字符時

我在PP上的配置文件/語言上設置了UTF-8。但問題仍然存在。

備註:如果我使用PP帳戶付款(表示登錄並單擊付款按鈕),付款過程將正常工作。

回答

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 
} 
+0

雖然這個問題很老,但它確實幫助了我。它甚至允許我避免必須處理字符編碼問題!那謝謝啦! :) – Abs 2013-01-13 16:00:48

+1

很高興幫助:) – Benjamin 2013-01-13 16:18:12