В laravel 5.7 сессия исчезает после перенаправления на другую страницу. Я работаю над приложением, в котором я нажимаю пользователей на страницу платежного шлюза, перед которой я сохраняю данные в сеансе в соответствии с laravel документация. После возврата из платежного шлюза, когда я пытаюсь получить этот сеанс, он возвращается пустым. Может кто-нибудь, пожалуйста, скажите мне, как я могу решить эту проблему.
Мой код примерно такой
public function processPayment(Request $request)
{
//...........
session()->put('order_checkout_data', [
'gateway' => 'paypal',
'data' => $paypalData
]);
//$request->session()->save(); <!-- This i tried after reading some solution but didnt help
//print_r(session('order_checkout_data')) <!-- I can see the session here
$paypal = new PayPal();
$response = $paypal->purchase($paypalData);
if ($response->isRedirect()) {
$response->redirect(); //This is where redireting to paypal
}
}
public function handleGatewayResponse(Request $request){
print_r(session('order_checkout_data')); //No data
}
Я также пробовал использовать глобальную функцию сеанса и фасад, например
Session::put('order_checkout_data', [
'gateway' => 'paypal',
'data' => $paypalData
])
а также
session(['order_checkout_data'=>[
'gateway' => 'paypal',
'data' => $paypalData
]])
Но никакой ценности. Моим настройкам env нравится это
SESSION_DRIVER=file
SESSION_LIFETIME=360
Я пытался пройти по некоторым ссылкам с похожей проблемой, но это не помогло. Вот ссылки, по которым я ходил:
handleGatewayResponse — это функция, обрабатывающая ответ, который перенаправляется шлюзом PayPal после успешной оплаты. Но я все еще думаю, что сеанс должен сохраняться с приложением, верно? так как это не flash session.
Можете ли вы добавить код из $response->redirect(); к своему вопросу и попробовать return $response->redirect();
Вы можете попробовать использовать что-то вроде этого: return redirect()->route('ваш маршрут', $response);
@Remul $response->redirect(); — это метод paypal пакета SDK. Это функция шлюза по умолчанию. Я использую этот пакет github.com/thephpleague/omnipay
Какой у вас драйвер сеанса в .env?






Когда вы используете сеансы, в браузер отправляется файл cookie SESSION_ID (или аналогичный), чтобы узнать, какой сеанс связан с каждым запросом.
Ваш метод handleGatewayResponse вызывается после запроса пользователя (это, безусловно, ваш js-скрипт выдает запрос, но это то же самое), и вы сохраняете данные в сеансе, связанном с этим конкретным пользователем.
После того, как PayPal завершил свою работу, он отправляет запрос на URL-адрес обратного вызова. Этот запрос выполняется PayPal, но не вашим пользователем, для которого вы сохранили данные. PayPal ничего не знает о файле cookie сеанса, поэтому Laravel запускает новый пустой сеанс.
Означает ли это, что PayPal должен перенаправить на незащищенный маршрут, с которого пользователь должен продолжить навигацию по сайту? Пропустит ли это иллюзию пустой сессии?
Если я правильно понял вопрос OP, функция handleGatewayResponse вызывается серверами Paypal после завершения транзакции для подтверждения статуса платежа. Таким образом, есть два совершенно разных сеанса: один между вашим сервером и клиентом и один между вашим сервером и Paypal. Должен быть уникальный идентификатор платежа, отправленный Paypal на сервер и известный клиентскому API, чтобы связать оба
Вызывается ли метод
handleGatewayResponseсерверами PayPal? Если это так, это нормально, что ваш сеанс пуст, поскольку это 2 разных клиента (один - пользователь, а другой - PayPal)