IPN-адрес в песочнице Paypal возвращен НЕВЕРНО
-
18-09-2019 - |
Вопрос
Я пытаюсь выполнить обратный вызов IPN, используя сервлет.Код, который я использую, предоставлен paypal для проверки данных ipn.Но каждый раз, когда я получаю НЕДЕЙСТВИТЕЛЬНЫЙ ответ.
Вот этот код:
Enumeration en = req.getParameterNames();
String str = "cmd=_notify-validate";
while (en.hasMoreElements()) {
String paramName = (String) en.nextElement();
String paramValue = req.getParameter(paramName);
//str = str + "&" + paramName + "=" + URLEncoder.encode(paramValue,"UTF-8"); // for UTF-8 i set the encode format in my account as UTF-8
//str = str + "&" + paramName + "=" + URLEncoder.encode(paramValue,"ISO-8859-1");// for ISO-8859-1 i set the encode format in my account as ISO-8859-1
str = str + "&" + paramName + "=" + URLEncoder.encode(paramValue); //default as provided by paypal
}
URL u = new URL("http://www.sandbox.paypal.com/cgi-bin/webscr");
URLConnection uc = u.openConnection();
uc.setDoOutput(true);
uc.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
PrintWriter pw = new PrintWriter(uc.getOutputStream());
pw.println(str);
pw.close();
BufferedReader in = new BufferedReader(new InputStreamReader(uc.getInputStream()));
String res = in.readLine();
in.close();
if (res.equals("VERIFIED") || !res.equals("VERIFIED")) {
//Update database...
} else if (res.equals("INVALID")) {
//INVALID
}
Я проверил все три возможности, предоставленные paypal, на случай, если paypal вернет НЕДЕЙСТВИТЕЛЬНЫЙ, следующим образом:
1) Отсутствующие параметры - Поскольку я отправляю все параметры, никаких проблем с отсутствующими параметрами не возникает
2) Недопустимый URL-адрес.- Я использую песочницу, поэтому URL-это : http://www.sandbox.paypal.com/cgi-bin/webscr
3) Кодировка символов.- Пробовал использовать кодировку символов, аналогичную кодировке параметра настройки учетной записи paypal.
запрос, который я отправляю обратно в PayPal, используя следующие параметры:
cmd=_notify-validate&last_name=User&test_ipn=1&address_name=Test+User&txn_type=web_accept&receiver_email=sellr1_1252495907_biz%40gmail.com&residence_country=US&address_city=San+Jose&payment_gross=&payment_date=01%3A55%3A04+Sep+26%2C+2009+PDT&address_zip=95131&payment_status=Completed&address_street=1+Main+St&first_name=Test&payer_email=buyer1_1252495751_per%40gmail.com&protection_eligibility=Eligible&payer_id=BXBKS22JQCUWL&verify_sign=AOMkeg7ofCL7FJfioyWA19uCxD4XAgZirsjiGh8cUy1fd2YAqBwOkkst&payment_type=instant&business=sellr1_1252495907_biz%40gmail.com&address_country_code=US&mc_fee=0.64&address_status=confirmed&transaction_subject=True+Up&quantity=1ify_version=2.8&mc_currency=EUR&custom=&address_state=CA&payment_fee=&handling_amount=0.00&payer_status=verified&shipping=0.00&item_name=True+Up&tax=0.00&username=hannonj&charset=windows-1252&item_number=567&mc_gross=10.00&txn_id=7F456350BS7942738&receiver_id=MASSU6BSR9SC2&address_country=United+States
Пожалуйста, кто-нибудь может направить меня в нужное русло?Я не понимаю, что не так с кодом, URL-адресом или чем-то еще.Я перепробовал все возможности.Пожалуйста, помогите мне.
Решение 3
Спасибо вам, ребята, за ваш ответ.оооо, наконец-то я решил эту проблему.
На самом деле в URL уведомления я также добавил параметр username .Paypal хочет, чтобы значения параметров для IPN были такими же, какими они возвращаются сервлету.(Вы можете получить это как req.getParameterNames()).Поскольку у меня есть дополнительный параметр username, который неизвестен paypal.Paypal возвращал данные НЕДЕЙСТВИТЕЛЬНО.
Другие советы
Ан “НЕДЕЙСТВИТЕЛЬНЫЙ” сообщение отправлено по следующим причинам:
- Убедитесь, что ваши отправляйте свой ответ по правильному URL-адресу, который является https://www.sandbox.paypal.com/cgi-bin/webscr или https://www.paypal.com/cgi-bin/webscr, в зависимости от того, проводите ли вы тестирование в изолированной среде или вы находитесь в режиме реального времени, соответственно.
- Убедитесь, что ваш ответ на тестовое IPN-сообщение содержит точно такие же переменные и значения в качестве тестового сообщения и чтобы они располагались в том же порядке, что и в тестовом сообщении.Наконец, убедитесь, что исходным переменным предшествует переменная cmd=_notify-validate.
Убедитесь, что вы кодирование ваша строка ответа и использует ту же кодировку символов, что и в тестовом IPN-сообщении.(например, я вижу, что он использует буквы с умлаутом и другие символы, такие как “/” и т.д.).Что касается последнего пункта, продавец может попытаться изменить язык кодировки, используемый в его учетной записи PayPal, выполнив следующие действия:
- Войдите в свою учетную запись PayPal
- Нажмите на Профиль
- Перейдите на вкладку “Мои предпочтения в продажах”
- Нажмите на “Кодировка языка кнопки PayPal” (в конце страницы).
- Нажмите на "Другие параметры".
- Выберите из выпадающего меню:UTF-8
- Выберите ту же кодировку и для второго варианта, который связан с IPN
- Нажмите “Сохранить”.
Если проблема не устранена, мы рекомендуем ознакомиться с используемым скриптом, у PayPal есть несколько примеров кода IPN, доступных по адресу: https://github.com/paypal/ipn-code-samples
Для получения дополнительной информации я включаю ссылку: https://developer.paypal.com/webapps/developer/docs/classic/ipn/integration-guide/IPNTesting/#id091GFE00WY4
Я почти уверен, что URL для отправки - это просто "www.sandbox.paypal.com", см. главу 4 Руководства пользователя Sandbox , и что ж, это то, что я ввел для своего собственного кода (кстати, для live это также просто "www.paypal.com ", для их пример кода)
Если вы тестируете Paypal IPN через SSL, вам придется использовать ssl://www.sandbox.paypal.com в порту 443
Помните, что песочница PayPal имеет совершенно другие учетные данные.Чтобы использовать sandbox, у вас должна быть учетная запись разработчика и вы должны войти в панель разработки, чтобы использовать sandbox.