Область разговора и перенаправление jsf
Возможно ли поддерживать разговор во время перенаправления на внешний URL? Я запустил транзакцию PayPal с компонентом разговора CDI, и после этого я вижу, что лица перенаправляются на страницу PayPal, когда я вхожу в систему и выполняю платеж, а следующий PayPal возвращается на мою страницу, и я хочу иметь тот же экземпляр моего компонента, чтобы запомнить детали, которые я отправил PayPal.
Когда PayPal перенаправляет обратно на мою страницу, он добавляет URL-адрес токена транзакции и идентификатор плательщика, но у меня нет никакой информации о количестве продуктов, которые купил пользователь. Поэтому я хочу запомнить количество до перенаправления. Теперь, после того, как PayPal возвращается на мой сайт, я вызываю метод doExpressCheckout и хочу передать количество и другие детали транзакции, потому что я могу установить совершенно другие детали, чем до транзакции, и возможна странная ситуация, когда клиент принимает на странице PayPal покупку некоторых продуктов для 10$, но я установил 100$ после того, как PayPal снова перенаправляет на свою страницу, и клиент не будет знать, сколько он заплатил. Я не знаю, почему это происходит.
Я использую SOAP API.
2 ответа
Да, вы можете возобновить разговор с внешнего перенаправления. Просто включите cid=nnn
в обратном URL вы переходите в PayPal. Например:
returnUrl = "http://myip/myapp/return.seam?cid=" + Conversation.instance().getId();
details.setReturnURL(returnUrl);
...
Поскольку 2-минутное значение по умолчанию для времени ожидания разговора довольно ограничено, вам, в конечном итоге, потребуется увеличить время ожидания разговора перед выполнением вызова в PayPal:
Conversation.instance().setTimeout(900000); // 15 minutes
Однако делать это не обязательно является хорошей идеей, так как данные хранятся потенциально в течение длительного времени, и вам также необходимо сохранить coo kie-файл сеанса, чтобы эта схема работала (поэтому при необходимости вы также должны увеличить время ожидания сеанса).
Лучшей стратегией было бы постоянное хранение данных транзакции (дБ или диск), привязка случайно сгенерированного идентификатора к данным и извлечение их по возвращении из PayPal. Таким образом, вам не нужно хранить разговор в памяти.
Когда PayPal перенаправляет обратно на мою страницу, он добавляет URL-адрес токена транзакции и идентификатор плательщика, но у меня нет никакой информации о количестве продуктов, которые купил пользователь.
Вы можете добавить идентификатор предварительной беседы к URL-адресу, который вы передаете Paypal, в качестве обратного URL-адреса. Таким образом, идентификатор разговора будет передан обратно вместе с вышеуказанными параметрами и seam
будет знать, чтобы восстановить разговор о предоплате со всеми данными.