重定向到外部网站时,Laravel Session不会持续存在

时间:2014-06-26 20:53:38

标签: session paypal laravel-4 omnipay

我将以下数组分配给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;
    });

2 个答案:

答案 0 :(得分:0)

我不确定为什么Laravel不会持久保存会话数据。

然而,另一种解决方法是在重定向到PayPal之前将事务数据存储在数据库中。您可以在returnUrl中引用transactionId,如我在此处所述:

CodeIgniter custom value with omnipay

答案 1 :(得分:0)

快速提示:使用Laravel自己的重定向方法代替$response->redirect(),在重定向响应之前设置会话数据。

简而言之:线索是redirect()中的Omnipay\Common\Message\AbstractResponse方法,Omnipay\PayPal\Message\Response扩展了HttpResponse。它使用POST HttpRedirectResponse和GET HttpResponse。通过return Redirect::url($response->getRedirectUrl())您的会话将在重定向之前存储,但官方的PayPal网关使用GET,因此您必须将其转移。

  • Laravel 4:return redirect()->url($response->getRedirectUrl())
  • Laravel 5:{{1}}