Я создаю прослушиватель IPN для проверки уведомлений PayPal. Все уведомления проверяются хорошо, за исключением случаев, когда параметр item_name имеет специальный символ. Пример названия предмета: "Um mês"
Я пробовал кодировать URL-адрес в некоторых кодировках, но никто не работал. Если я удаляю специальный символ из 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();
}