PayPal 通知を検証する IPN リスナーを作成します。パラメータ item_name に特別な文字がある場合を除いて、すべての通知は適切に検証されています。アイテム名の例:「Um mes」
いくつかの文字セットで URL をエンコードしようとしましたが、誰も機能しませんでした。item_name の特殊文字を削除すると、IPN 検証で VALID が返されますが、単純な特殊文字だけを配置すると、常に INVALID が返されます。
リクエストを実行する前に使用する必要がある正しいエンコーディングは何ですか?
これが私のコードです: ` public void verificaIPN(FacesContext fc) throws FalseINPException, IOException { イテレータ 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();
}