我构建了一个IPN监听器来验证PayPal通知。所有通知都验证良好,参数item_name具有特殊字符时除外。商品名称示例:"Um mês"
我尝试过用一些字符集对url进行编码,但没有一个成功。如果我删除item_name的特殊字符,IPN验证将返回VALID,但当只放入一个简单的特殊字符时,我总是得到INVALID作为返回。
在进行请求之前,我必须使用什么正确的编码?
这是我的代码:`public void verificationIPN(FacesContext fc)抛出FalseINPEException、IOException{ExternalContext ExternalContext=fc.getExternalContext();迭代程序requestParameterNames=外部上下文.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();
}
您是否尝试过更改帐户编码并在应用程序中进行URL编码?
所以PayPal隐藏了这个链接(不确定为什么)。你真的无法通过在任何地方(我发现的)在你的帐户中导航来访问它。因此,登录您的帐户并点击此:
https://www.paypal.com/us/cgi-bin/webscr?cmd=_profile-语言编码
点击更多选项
并将您的编码更改为您的语言所需的编码。
这应该对你有用。
问题源于您在我们的调用中忘记了一个参数。你好像和我一样,想发葡萄牙语你需要有:
<INPUT TYPE="hidden" name="charset" value="utf-8">
(utf-8或任何您想要的,根据您的编码)。然后你可以有它的名字,比如"Doação"等等…
请参阅:https://developer.paypal.com/docs/classic/paypal-payments-standard/集成指南/formbasics/#id08A6F0RK0PN