3

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

2 回答 2

0

我不确定为什么 Laravel 不会保留会话数据。

但是,解决此问题的另一种方法是在重定向到 PayPal 之前将交易数据存储在您的数据库中。您可以在 returnUrl 中引用 transactionId,正如我在此处描述的那样:

使用omnipay 的CodeIgniter 自定义值

于 2014-06-28T17:16:19.713 回答
0

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

简而言之:线索是扩展的redirect()方法。它与 POST 和GET 一起使用。通过你的会话将在重定向之前存储,但是官方的 PayPal 网关使用 GET,所以你必须偏转它。Omnipay\Common\Message\AbstractResponseOmnipay\PayPal\Message\ResponseHttpResponseHttpRedirectResponseHttpResponse

  • Laravel 4:return Redirect::url($response->getRedirectUrl())
  • 拉拉维尔 5:return redirect()->url($response->getRedirectUrl())
于 2016-07-14T13:42:44.290 回答