2

我构建了一个 IPN 侦听器来验证 PayPal 通知。所有通知都验证良好,当参数 item_name 具有特殊字符时例外。项目名称示例:“Um mes”

我曾尝试在一些字符集中对 url 进行编码,但没有人工作。如果我删除 item_name 的特殊字符,IPN 验证将返回 VALID,但是当只放置一个简单的特殊字符时,我总是得到 INVALID 作为返回。

在执行请求之前我必须使用什么正确的编码?

这是我的代码:` public void verificaIPN(FacesContext fc) throws 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();

}

4

2 回答 2

1

您是否尝试过更改您的帐户编码并仅在您的应用中进行 URL 编码?

所以 PayPal 隐藏了这个链接(不知道为什么)。您实际上无法通过在任何地方(我发现)在您的帐户中导航来访问它。因此,登录您的帐户并单击此:

https://www.paypal.com/us/cgi-bin/webscr?cmd=_profile-language-encoding

点击更多选项

并将您的编码更改为您的语言所需的编码。

这应该为您解决问题。

于 2013-02-13T19:09:52.723 回答
0

问题在于您忘记了我们调用中的一个参数。看来您像我一样尝试发送葡萄牙语。:) 你需要:

 <INPUT TYPE="hidden" name="charset" value="utf-8">

(utf-8 或任何你想要的,根据你的编码)。然后你可以有它的名字,比如“Doação”等......

请参阅:https : //developer.paypal.com/docs/classic/paypal-payments-standard/integration-guide/formbasics/#id08A6F0RK0PN

于 2016-11-18T14:03:25.570 回答