使用 Java 验证PayPal的 IPN 通知。如何使用特殊字符对参数进行编码"item_name"



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

最新更新