2016-03-22 53 views
1

我在沙箱中設置了paypal IPN。 我使用這個sctipt https://github.com/paypal/ipn-code-samples/blob/master/paypal_ipn.phpIPN驗證ipnSimulator無效

但總是我得到INVALID響應。

我用這個技巧https://developer.paypal.com/docs/classic/ipn/integration-guide/IPNTesting/#invalid

,但仍然無效響應 我究竟做錯了什麼?

[2016年3月22日16:53歐洲/莫斯科]驗證的HTTP請求 請求:POST/cgi-bin目錄/ webscr HTTP/1.1主機:www.sandbox.paypal.com 接受:/連接:關閉的Content-Length:970 Content-Type的: 應用/ X WWW的窗體-urlencoded

爲IPN有效載荷: CMD = _notify-驗證& payment_type =即時& PAYMENT_DATE =星期二+月+ 22 + 2016 + 16%3A47%3A09 + GMT%2B0300 +%28RTZ + 2 +%28%C3%90%C2%B7%C3%90%C2%B8%C3%90%C2%BC%C3%90%C2%B0 %29%29 & payment_sta土族=完成& address_status =證實& payer_status =驗證& FIRST_NAME =約翰&姓氏=史密斯& PAYER_EMAIL =買家%40paypalsandbox.com & payer_id = TESTBUYERID01 & ADDRESS_NAME =約翰·史密斯+ & = ADDRESS_COUNTRY美國+美國& address_country_code = US & address_zip = 95131 & ADDRESS_STATE = CA & ADDRESS_CITY =聖若澤+ & address_street = 123 +任何+街道&業務=賣家%40paypalsandbox.com & RECEIVER_EMAIL =賣家%40paypalsandbox.com & receiver_id =賣家%40paypalsandbox.com &水庫idence_country = US & item_name1 =東西& item_number1 = AK-1234 &稅額= 2.02 & mc_currency = USD & mc_fee = 0.44 & mc_gross = 12.34 & mc_gross_1 = 12.34 & mc_handling = 2.06 & mc_handling1 = 1.67 & mc_shipping = 3.02 & mc_shipping1 = 1.02 & txn_type =購物& txn_id = 901876583 & notify_version = 2.1 &定製= XYZ123 &發票= ABC1234 &的test_ipn = 1 & verify_sign = A2AotZPiNfH-.cRF2fDADaP45z4xAMRyJ2i2LYn0-bIrKScsGQzjL1bU [2016年3月22日16: 53歐洲/莫斯科]驗證請求的HTTP響應: HTTP/1.1 200 OK日期:星期二,2016年3月22日13點53分57秒格林尼治標準時間服務器:Apache X框選項:SAMEORIGIN的Set-Cookie: c9MWDuvPtT9GIMyPc3jwol1VSlO = 8YEulQPoVmljEzDjxqb2Eja5QkTvSSIHAnS6YQAcTx1q_LuQEbsn- _3B66X5sfKSbDLoRnK3Ry41yaTByrW98ADgx2oXvvGL_3Ip0w4UjbUAoWMw4czFk1LULFI1VqQqjvwTuLSm21iNcQvYl8U4h0oOhwZ8CJVVpogcyR3HjUweHmCjUhDzqGKS6jFMsbkUu9wyC85KmvldFXiXjFvokwlUTUmnH3e4Vt26dgA0jnaRK_vKMNX-aYV9uicgZf2DBUvz0f3kP329HR1IWGErDb8Wgtpf6jQMho8B0noW_vYfA6IPQpBAG927oZVlU3iSxa6zj53u-NGEr11Z1qE2wLmqO9vWbgOsbGcJG2F3au0FGuLQdy-7mdQpFEriGbBF9FknFI_5YTzKo4uFQudUT9Sr4i-LSapRj_4758BPSTEiJ2oHpY-6m1lWuOi; domain = .paypal.com;路徑= /;安全; HttpOnly Set-Cookie: cookie_check = yes;到期日=星期五,20-Mar-2026 13:53:58 GMT; domain = .paypal.com;路徑= /;安全; HttpOnly Set-Cookie: navcmd = _notify-validate;域= .paypal.com;路徑= /;安全; HttpOnly Set-Cookie:navlns = 0。0;到期=星期四,22-Mar-2018 13:53:58 GMT; domain = .paypal.com;路徑= /;安全; HttpOnly Set-Cookie: Apache = 10.72.108.11.1458654837796174;路徑= /; Expires = Thu,15-Mar-46 13:53:57 GMT Vary:Accept-Encoding,User-Agent Connection:close HTTP_X_PP_AZ_LOCATOR:sandbox.slc Paypal-Debug-Id:8023af87be9​​66 Set-Cookie: X-PP -SILOVER =名稱%3DSANDBOX3.WEB.1%26silo_version%3D1880%26app%3Dappdispatcher%26TIME%3D1968107862; domain = .paypal.com;路徑= /;安全; HttpOnly Set-Cookie: X-PP-SILOVER =;過期= 1970年1月1日00:00:01 GMT Strict-Transport-Security:max-age = 14400傳輸編碼:分塊 Content-Type:text/html;字符集= UTF-8

INVALID [2016年3月22日16時53歐/莫斯科]無效IPN: CMD = _notify-驗證& payment_type =即時& PAYMENT_DATE =星期二+月+ 22 + 2016 + 16%3A47 %3A09 + GMT%2B0300 +%28RTZ + 2 +%28%C3%90%C2%B7%C3%90%C2%B8%C3%90%C2%BC%C3%90%C2%B0%29%29 & PAYMENT_STATUS完成& address_status = =證實& payer_status =驗證& FIRST_NAME =約翰&姓氏=史密斯& PAYER_EMAIL =買家%40paypalsandbox.com & payer_id = TESTBUYERID01 & ADDRESS_NAME =約翰·史密斯+ & = ADDRESS_COUNTRY美國+美國&一ddress_country_code = US & address_zip = 95131 & ADDRESS_STATE = CA & ADDRESS_CITY =聖若澤+ & address_street = 123 +任何+街道&業務=賣家%40paypalsandbox.com & RECEIVER_EMAIL =賣家%40paypalsandbox.com & receiver_id =賣家%40paypalsandbox.com & residence_country = US & item_name1 =東西& item_number1 = AK-1234 &稅額= 2.02 & mc_currency = USD & mc_fee = 0.44 & mc_gross = 12.34 & mc_gross_1 = 12.34 & mc_handling = 2.06 & mc_handling1 = 1.67 & mc_shipping = 3.02 & mc_shipping1 = 1.02 & txn_type =車& txn_id = 901876583 & notify_version = 2.1 &定製= XYZ123 &發票= ABC1234 &的test_ipn = 1 & verify_sign = A2AotZPiNfH-.cRF2fDADaP45z4xAMRyJ2i2LYn0-bIrKScsGQzjL1bU 貝寶迴應:

回答

0

在你IPN PHP腳本,請嘗試將所有urlencode更改爲rawurlencodeurldecoderawurldecode

1

嘗試使用來自sandbox.paypal(1個人,1個業務)的兩個假帳戶,以檢查驗證/無效響應而不是IPN模擬器。

你可以得到那些在https://developer.paypal.com/developer/accounts/並給他們假玩積分。

我從來沒有從IPN模擬器獲得VERIFIED,但在測試沙盒時總是得到一個。

0

我終於找到了更新(2016年8月5日)對此查詢的工作答案。您可以將此代碼用作Sandbox或Live的最終IPN。有以下考慮:

  1. 請務必將您的IPN監聽器置於 - >我的銷售工具 - >即時付款通知部分。
  2. 不要在沙盒中使用IPN模擬器,它將始終返回INVALID。
  3. 創建並使用實際的沙盒按鈕,但請勿將IPN偵聽器放在返回頁面上,並提示「在客戶完成結賬時將客戶接收到此URL」。

就是這樣。我希望這將有所幫助。

這裏是工作代碼:

<?php 
$post_data = file_get_contents('php://input'); 
$post_array = explode('&', $post_data); 
$dataFromPayPal = array(); 
foreach ($post_array as $keyval) { 
    $keyval = explode ('=', $keyval); 
    if (count($keyval) == 2) 
     $dataFromPayPal[$keyval[0]] = urldecode($keyval[1]); 
} 

$req = 'cmd=_notify-validate'; 
if(function_exists('get_magic_quotes_gpc')) { 
    $get_magic_quotes_exists = true; 
} 
foreach ($dataFromPayPal as $key => $value) { 
    if($get_magic_quotes_exists == true && get_magic_quotes_gpc() == 1) { 
     $value = urlencode(stripslashes($value)); 
    } else { 
     $value = urlencode($value); 
    } 
    $req .= "&$key=$value"; 
} 

$ch = curl_init('https://www.sandbox.paypal.com/cgi-bin/webscr'); 
//use https://www.paypal.com/cgi-bin/webscr in live environment. 
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $req); 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); 
curl_setopt($ch, CURLOPT_FORBID_REUSE, 1); 
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Connection: Close')); 

if(!($res = curl_exec($ch))) { 
    curl_close($ch); 
    exit; 
} 
curl_close($ch); 



if (strcmp ($res, "INVALID") == 0) { 
     echo "INVALID"; 
} 
else if (strcmp ($res, "VERIFIED") == 0) { 
     echo "VALID"; 
} 

?>