使用Java验证PayPal的IPN通知。如何使用特殊字符编码“item_name”参数

时间:2012-09-05 00:44:21

标签: java encoding paypal paypal-ipn

我构建了一个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();

}

2 个答案:

答案 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