2009-09-28 165 views
5

我正在嘗試IPN回調,使用servlet。我使用的代碼是由paypal提供的,用於驗證ipn數據。但每次我得到一個INVALID的迴應。Paypal沙箱IPN返回無效

下面是代碼:

Enumeration en = req.getParameterNames(); 
String str = "cmd=_notify-validate"; 

    while (en.hasMoreElements()) {   
     String paramName = (String) en.nextElement(); 
     String paramValue = req.getParameter(paramName); 

//str = str + "&" + paramName + "=" + URLEncoder.encode(paramValue,"UTF-8"); // for UTF-8 i set the encode format in my account as UTF-8 
//str = str + "&" + paramName + "=" + URLEncoder.encode(paramValue,"ISO-8859-1");// for ISO-8859-1 i set the encode format in my account as ISO-8859-1 
str = str + "&" + paramName + "=" + URLEncoder.encode(paramValue); //default as provided by paypal 

    } 
    URL u = new URL("http://www.sandbox.paypal.com/cgi-bin/webscr"); 
    URLConnection uc = u.openConnection(); 
    uc.setDoOutput(true); 
    uc.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); 
    PrintWriter pw = new PrintWriter(uc.getOutputStream()); 
    pw.println(str); 
    pw.close(); 

    BufferedReader in = new BufferedReader(new InputStreamReader(uc.getInputStream())); 
    String res = in.readLine(); 
    in.close(); 

    if (res.equals("VERIFIED") || !res.equals("VERIFIED")) { 
     //Update database... 
    } else if (res.equals("INVALID")) {  
     //INVALID 
    } 

我已經檢查了貝寶的情況下,貝寶返回無效如下提供的所有三種可能性:

1)缺少的參數 - 正如我把所有的參數沒有缺少參數的問題

2)無效的URL。 - 我正在使用沙箱,因此URL是:http://www.sandbox.paypal.com/cgi-bin/webscr

3)字符編碼。 - 嘗試使用與PayPal帳戶設置參數編碼相同的字符編碼。

我使用以下參數發送回PayPal請求:

CMD = _notify-驗證&姓氏=用戶&的test_ipn = 1 & ADDRESS_NAME =測試+用戶& txn_type = web_accept & RECEIVER_EMAIL = sellr1_1252495907_biz% 40gmail.com & residence_country = US & ADDRESS_CITY =聖若澤+ & payment_gross = & PAYMENT_DATE = 01%3A55%3A04 + +九月26%2C + 2009年+ PDT & address_zip = 95131 & payment_狀態=完成& address_street = 1 +主+聖& FIRST_NAME =測試& PAYER_EMAIL = buyer1_1252495751_per%40gmail.com & protection_eligibility =合格& payer_id = BXBKS22JQCUWL & verify_sign = AOMkeg7ofCL7FJfioyWA19uCxD4XAgZirsjiGh8cUy1fd2YAqBwOkkst & payment_type =即時&業務= sellr1_1252495907_biz%40gmail.com & address_country_code =美國& mc_fee = 0.64 & address_status =證實& transaction_subject =真+向上&量= 1個& notify_version = 2.8 & mc_currency = EUR &定製= &地址ess_state = CA & payment_fee = & handling_amount = 0.00 & payer_status =驗證&運費= 0.00 & ITEM_NAME = TRUE +向上&稅= 0.00 &用戶名= hannonj &的charset =窗口1252 & ITEM_NUMBER = 567 & mc_gross = 10.00 & txn_id = 7F456350BS7942738 & receiver_id = MASSU6BSR9SC2 & = ADDRESS_COUNTRY美國+美國

請,任何一個可以指導我正確的方向?我沒有得到錯誤的代碼或URL或其他任何東西。我嘗試了所有的可能性。請幫幫我。

回答

3

你們的回覆。 ohhh我終於解決了。

其實在通知URL中我還加了一個用戶名參數.Paypal需要IPN的參數值和它返回給servlet一樣。(你可以把它作爲因爲我有用戶名參數額外,這是不知道的貝寶。貝寶返回INVALID。

0

記得貝寶的沙盒有完全不同的憑據。您必須擁有開發帳戶並登錄到開發面板才能使用沙箱。

9

我很確定要發送到的URL只是「www.sandbox.paypal。com「,請參閱Sandbox用戶指南的第4章,以及這是我爲我自己的代碼所提供的(順便說一句,對於現場,它也只是」www.paypal.com「,因爲它們的sample code

+1

這正是我的問題 – 2011-06-25 23:27:15

2

如果你測試通過SSL貝寶IPN,你將不得不使用SSL://www.sandbox.paypal.com端口

+3

隨着paypal.com我變得無效,與sandbox.paypal.com我甚至沒有得到迴應。 – Exegesis 2012-10-03 18:57:19

+1

哈利路亞!非常感謝! – 2014-04-20 05:17:57

13

的「無效」的消息是由於以下原因有關:

  • 檢查你是發佈您迴應到正確的URL,即https://www.sandbox.paypal.com/cgi-bin/webscrhttps://www.paypal.com/cgi-bin/webscr,這取決於您是在沙盒中測試還是在現場。
  • 確認您對測試IPN消息的響應包含與測試消息完全相同的變量和值,並且它們與測試消息中的順序相同。最後,驗證原始變量前面是一個cmd = _notify-validate變量。
  • 確保您是編碼您的響應字符串,並使用與測試IPN消息使用的相同的字符編碼。 (例如,我可以看到他正在使用帶變音符號和其他符號的字母,如「/」等)。 關於最後一點,商家可以嘗試改變所使用的編碼語言在他的支付寶賬戶,請遵循以下步驟:

    1. 登錄支付寶賬戶
    2. 點擊個人資料
    3. 點擊「我的銷售偏好」的「PayPal按鈕語言編碼」選項卡
    4. 點擊(在頁面的末尾)
    5. 點擊從下拉菜單中選擇「其他選項」
    6. 選擇:UTF-8
    7. 選擇相同的字符集也爲第二個選擇,這是關係到IPN
    8. 點擊「保存」

如果問題仍然存在,我們建議您查看正在使用的腳本,貝寶一些可在IPN代碼示例:https://github.com/paypal/ipn-code-samples

有關其他信息,我包括鏈接:https://developer.paypal.com/webapps/developer/docs/classic/ipn/integration-guide/IPNTesting/#id091GFE00WY4

+0

項目符號和列表,所以我不會懶得看它。謝謝! – 2014-09-10 19:44:39

+1

@PayPal_Federica更改編碼爲utf8解決我的問題,,,謝謝 – 2014-09-15 10:10:51

+0

這真的很有用我有同樣的問題得到解決使用https://github.com/paypal/ipn-code-samples示例文件...謝謝.. ! – 2016-07-23 14:51:57