Сессия Laravel не сохраняется при перенаправлении на внешний веб-сайт

Я назначаю следующий массив для transactionInfo.

        $transactionDetails=[
            'amount' => $total,
            'description'=>$description,
            'notify_url'=>'http://url.com/paypal/log',
            'headerImageUrl'=>'http://url.com/img/bhi_logo.png',
            'brandName'=>'Name',
            'encodedTestIDs' => serialize($payForTestID),
            'returnUrl' => 'http://url.com/payment/return', 
            'cancelUrl' => 'http://url.com/payment/cancel' 
        ];
        Session::put('transactionInfo',$transactionDetails);

Если я перенаправляюсь на другую страницу на веб-сайте, я могу вытащить массив, используя

Session::get('tranactionInfo');

Однако, если я перенаправляюсь на PayPal для получения платежа, а затем PayPal перенаправляет пользователя обратно на мой сайт, переменная сеанса становится нулевой.

Вот маршрут, по которому возвращается PayPal:

Route::any('/payment/return',function(){
  if(Session::has('transactionInfo')){
      echo 'what is happening?';
  }
    //Session::flush();
    dd(Session::get('transactionInfo')); die;
    });

person TylersSN    schedule 26.06.2014    source источник
comment
Настроили ли вы мгновенное уведомление о платеже в своей учетной записи PayPal? Информация об IPN   -  person pp_MSI_Jenn    schedule 27.06.2014
comment
Это не связано с IPN, хотя я это настроил. Моя проблема в Laravel. Я назначаю массив сеансу, отправляю покупателя в PayPal, и как только они возвращаются PayPal, этот массив сеанса по какой-либо причине равен нулю.   -  person TylersSN    schedule 27.06.2014


Ответы (2)


Я не уверен конкретно, почему Laravel не будет сохранять данные сеанса.

Однако другой способ приблизиться к этому — сохранить данные транзакции в вашей базе данных перед перенаправлением в PayPal. Вы можете сослаться на идентификатор транзакции в своем returnUrl, как я описываю здесь:

Пользовательское значение CodeIgniter с omnipay

person Adrian Macneil    schedule 28.06.2014

Небольшой совет: вместо $response->redirect() используйте собственный метод перенаправления Laravel, который устанавливает данные сеанса перед ответом перенаправления.

Вкратце: подсказка — это метод redirect() в Omnipay\Common\Message\AbstractResponse, расширенный Omnipay\PayPal\Message\Response. Он использует HttpResponse с POST и HttpRedirectResponse с GET. К HttpResponse ваша сессия будет сохранена до перенаправления, но официальный шлюз PayPal использует GET, поэтому вам придется отклонить его.

  • Ларавель 4: return Redirect::url($response->getRedirectUrl())
  • Ларавель 5: return redirect()->url($response->getRedirectUrl())
person terdelyi    schedule 14.07.2016