我构建了一个IPN侦听器来验证PayPal通知。当param item_name有一个特殊的char时,所有通知都很好地验证。项目名称示例:“Ummês”
我已尝试在某些字符集中对网址进行编码,但没有人工作。如果我删除item_name的特殊字符,则IPN验证返回VALID,但是当放入一个简单的特殊字符时,我总是得到INVALID作为返回。
在执行请求之前我必须使用哪种正确的编码?
这是我的代码: `public void verificaIPN(FacesContext fc)抛出FalseINPException,IOException { ExternalContext externalContext = fc.getExternalContext(); 迭代器requestParameterNames = externalContext .getRequestParameterNames();
String requestUrl = Messages.getString("PayPalUtil.paypalURL"); //$NON-NLS-1$
while (requestParameterNames.hasNext()) {
String chave = requestParameterNames.next();
String valor = externalContext.getRequestParameterMap().get(chave);
//is this below right?
requestUrl += "&" + chave + "=" + URLEncoder.encode(valor, "UTF-8");
}
URL urlConPayPal = new URL(requestUrl);
URLConnection yc = urlConPayPal.openConnection();
yc.setDoOutput(true);
yc.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
BufferedReader in = new BufferedReader(new InputStreamReader(yc.getInputStream()));
String inputLine;
while ((inputLine = in.readLine()) != null) {
if (inputLine.equals("VERIFIED")) {
} else {
throw new FalseINPException("O paypal não confirma esta transação: "
+ inputLine);
}
}
in.close();
}
答案 0 :(得分:1)
您是否尝试过更改帐户编码并在应用中进行网址编码?
所以PayPal隐藏了这个链接(不知道为什么)。你真的无法通过在任何地方导航你的帐户(我发现)。请登录您的帐户并点击此处:
https://www.paypal.com/us/cgi-bin/webscr?cmd=_profile-language-encoding
点击“更多选项”
将您的编码更改为您的语言所需的编码。
这应该适合你。
答案 1 :(得分:0)
问题在于我们在调用中忘记了一个参数。看来你试图像我一样发送字谜。 :) 你需要:
<INPUT TYPE="hidden" name="charset" value="utf-8">
(utf-8或任何你想要的,根据你的编码)。 然后你可以把它命名为“Doação”等......
请参阅:https://developer.paypal.com/docs/classic/paypal-payments-standard /集成引导/ formbasics /#id08A6F0RK0PN