我正在尝试使用 servlet 进行 IPN 回调。我使用的代码由 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 是: http: //www.sandbox.paypal.com/cgi-bin/webscr
3) 字符编码。- 尝试使用与贝宝帐户设置参数编码相同的字符编码。
我使用以下参数发送回贝宝的请求:
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_STATUS =完成&address_street = 1 +主+ ST&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 = US&mc_fee = 0.64 address_status =证实与transaction_subject =真+向上和数量= 1&notify_version = 2.8&mc_currency =欧元和定制= ADDRESS_STATE = CA&payment_fee = &processing_amount=0.00&payer_status=verified&shipping=0.00&item_name=True+Up&tax=0.00&username=hannonj&charset=windows-1252&item_number=567&mc_gross=10.00&txn_id=7F456350BS7942738&receiver_id=MASSU6BSR9SC2&address_country
请问,任何人都可以指导我正确的方向吗?我没有得到代码或 URL 或其他任何内容的错误。我尝试了所有的可能性。请帮我。