У меня давно возникла проблема с пружинным контроллером. Даже после большого исследования проблем с перенаправлением контроллеров этой пружины, которые не дали никакого решения.
Проблема: Мы делаем некоторые платежные интеграции, такие как Sofort, AliPay и PayPal, используя Spring. Все работает нормально на локальном компьютере (настольный ПК), тогда как это вызывает проблемы с PayPal в тестовых средах (серверы развертывания в облаке); однако все остальные типы платежей работают нормально.
На торговом сервере есть URL-адрес обработчика ответа PayPal (Контроллер), где он обрабатывает ответ платежа PayPal, URL-адрес обработчика вызывается дважды. Следовательно, это не дает адекватных результатов, так как он должен вызываться только один раз.
URL обработчика ответов PayPal: us / en-us / checkout / payment / paypal / handleResponse? token = EC-XXXXXXXXXXXX & PayerID = XXXXXX
Наблюдения:
а) Всякий раз, когда у нас возникают такие проблемы, что URL-адрес вызывается дважды. На сетевой вкладке хрома может быть проблема с JS. Но мы не нашли там такой истории.
б) Мы используем балансировщик нагрузки в наших тестовых средах. Иногда балансировщик нагрузки заставлял URL вызываться дважды. Но в loadbalancer мы не обнаружили подобных вызовов.
c) Метод Spring Handler, как показано ниже.
@RequestMapping(path = "/handleResponse", method = RequestMethod.GET)
public String handleResponse(@RequestParam(name = "token")
final String token, @RequestParam(name = "PayerID")
final String payerId)
г) Нет проблем с конфигурациями PayPal или серверами PayPal. Если я попаду в браузер с образцом URL-адреса ниже, он будет вызван дважды, хотя он не отправляется из PayPal. Следовательно, с PayPal проблем нет.
Ребята, не могли бы вы дать какие-либо предложения по выяснению первопричины. это будет полезно для меня.
Заранее спасибо!!
@BandiKishore мы используем облачные среды Google GCP, где он работает на ОС Linux и Tomcat
Можете ли вы войти в поле и запустить команду curl и посмотреть, не запускается ли запрос дважды? Просто чтобы увидеть, в коробке ли проблема или где-то за ее пределами.
Оба запроса поступают с одного и того же IP-адреса? Может быть, один из запросов - это уведомление Paypal об успешном платеже? Не могли бы вы поделиться образцом запроса / ответа в / от PayPal?
@BandiKishore, извиняюсь за поздний ответ, потребовалось некоторое время для выполнения правильной команды curl -I "testingweb.com/de/de-de/checkout/payment/paypal/…" Verified access.logs, где регистрируются все запросы url. И, Скопировано в следующем комментарии, что журналы доступа к командам curl, а также журналы доступа к общему потоку PayPal. Итак, вы можете видеть, что curl имеет только один URL-адрес, тогда как выполнение общего потока PayPal показывает, что URL-адрес выполняется два раза
Журнал CUrl: "HEAD / de / de-de / checkout / payment / paypal / handleResponse? Token = EC-XX XXXXXXXXXXXXXXX1 & Paye rID = ABCD HTTP / 1.1" 302 - "-" "curl / 7.29.0" Общий поток PayPal log: «GET / de / de-de / checkout / payment / paypal / handleResponse? token = EC-XX XXXXXXXXXXXXXXXX & Paye rID = ABCD HTTP / 1.1» 302 - «sandbox.paypal.com/cgi-bin/…» «Mozilla / 5.0 (Windows NT 10.0; Win64; x64) AppleWebKit / 537.36 (KHTML, например, Gecko) Chrome / 71.0.3578.80 Safari / 537.36 "



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Мы внесли исправления для обработки второго вызова, однако во время дальнейших тестов, даже несмотря на то, что он не удался, нашли основную причину и дали исправление.
Основная причина: Тестовая среда PayPal занимает более 45 секунд для завершения набора, получения, авторизации / захвата и размещения запросов на заказ, но время ожидания сервера приложений составляет 10 секунд, поэтому он не работает, поэтому он выполняет второй вызов.
Исправить: мы увеличили тайм-аут сервера до 50 секунд, и он перестал делать второй запрос.
Вы можете сообщить мне, на какой машине развернут ваш код? Я имею в виду ОС на машине и какой веб-сервер вы используете?