Контроллер Spring дважды вызывается в тестовой среде

У меня давно возникла проблема с пружинным контроллером. Даже после большого исследования проблем с перенаправлением контроллеров этой пружины, которые не дали никакого решения.

Проблема: Мы делаем некоторые платежные интеграции, такие как 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 проблем нет.

https://ABCDMERCHANT.com/us/en-us/checkout/payment/paypal/handleResponse?token=EC-XXXXXXXXXXX&PayerID=XXXXXXXXXXX

Ребята, не могли бы вы дать какие-либо предложения по выяснению первопричины. это будет полезно для меня.

Заранее спасибо!!

Вы можете сообщить мне, на какой машине развернут ваш код? Я имею в виду ОС на машине и какой веб-сервер вы используете?

Kishore Bandi 15.11.2018 19:35

@BandiKishore мы используем облачные среды Google GCP, где он работает на ОС Linux и Tomcat

user3691164 16.11.2018 08:36

Можете ли вы войти в поле и запустить команду curl и посмотреть, не запускается ли запрос дважды? Просто чтобы увидеть, в коробке ли проблема или где-то за ее пределами.

Kishore Bandi 17.11.2018 09:14

Оба запроса поступают с одного и того же IP-адреса? Может быть, один из запросов - это уведомление Paypal об успешном платеже? Не могли бы вы поделиться образцом запроса / ответа в / от PayPal?

Johannes von Zmuda 19.11.2018 10:48

@BandiKishore, извиняюсь за поздний ответ, потребовалось некоторое время для выполнения правильной команды curl -I "testingweb.com/de/de-de/checkout/payment/paypal/…" Verified access.logs, где регистрируются все запросы url. И, Скопировано в следующем комментарии, что журналы доступа к командам curl, а также журналы доступа к общему потоку PayPal. Итак, вы можете видеть, что curl имеет только один URL-адрес, тогда как выполнение общего потока PayPal показывает, что URL-адрес выполняется два раза

user3691164 08.12.2018 20:06

Журнал 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 "

user3691164 08.12.2018 20:10
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
6
263
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Мы внесли исправления для обработки второго вызова, однако во время дальнейших тестов, даже несмотря на то, что он не удался, нашли основную причину и дали исправление.

Основная причина: Тестовая среда PayPal занимает более 45 секунд для завершения набора, получения, авторизации / захвата и размещения запросов на заказ, но время ожидания сервера приложений составляет 10 секунд, поэтому он не работает, поэтому он выполняет второй вызов.

Исправить: мы увеличили тайм-аут сервера до 50 секунд, и он перестал делать второй запрос.

Другие вопросы по теме