【问题标题】:Session getting destroyed after cashfree payment gateway redirecting in laravel 8 (Mozilla browser)在 laravel 8(Mozilla 浏览器)中重定向无现金支付网关后会话被破坏
【发布时间】:2022-07-21 13:27:10
【问题描述】:

我正在尝试将 Cashfree 支付网关集成到我的 Laravel 8 项目中。我面临的唯一问题是回调 URL,在从支付网关获取发布数据后,活动会话会自动销毁。我还在中间件中添加了 CSRF 异常。我添加了'secure' => env('SESSION_SECURE_COOKIE', false)'same_site' => null。 我尝试使用redirect()->away($payment_link)、iFrame 标签和表单直接提交到付款链接,但仍然遇到同样的问题。 会话在 Mozilla 浏览器中被破坏,但在 chrome 浏览器中运行良好。

控制器(生成支付请求、URL 和流程回调)

class PaymentController extends Controller
{
    public function credits_add()
    {
        AuthCheck();
        $this->data['page_name'] = 'Add Credits';
        return view('merchant.payment.add_credits', $this->data);
    }

    public function credits_save(Request $request)
    {
        $request->validate([
            'credit_amount' => 'required',
            'credit_transaction_type' => 'required'
        ]);

        if (!empty($request->input('credit_transaction_type')) && $request->input('credit_transaction_type') == 'Cashfree') {
            $cashfreeDetails = $this->pay_with_cashfree($request);
            if (!empty($cashfreeDetails) && !empty($cashfreeDetails['paymentLink'])) {
                return Redirect::to($cashfreeDetails['paymentLink']);
            } else {
                return redirect('credits/add')->with('errorMessage', 'Sorry! Your transaction has failed.');
            }
        }

        return redirect('credits/add');
    }

    public function pay_with_cashfree($request)
    {
        $order = new Order();
        $od["orderId"] = "ORDER-84984941";
        $od["orderAmount"] = 10000;
        $od["orderNote"] = "Subscription";
        $od["customerPhone"] = "9000012345";
        $od["customerName"] = "Test Name";
        $od["customerEmail"] = "test@cashfree.com";
        $od["returnUrl"] = route('CreditsSuccess');
        $od["notifyUrl"] = route('CreditsSuccess');

        $order->create($od);
        $linkArray = $order->getLink($od['orderId']);
        $detailsArray = $order->getDetails($od['orderId']);

        if (!empty($order) && !empty($linkArray) && !empty($linkArray->status) && $linkArray->status == 'OK') {
            return array(
                'paymentLink' => $linkArray->paymentLink,
                'paymentDetails' => $detailsArray
            );
        } else {
            return array();
        }
    }

    public function credits_success(Request $request)
    {
        $orderId = $request->orderId;
        $orderAmount = $request->orderAmount;
        $referenceId = $request->referenceId;
        $txStatus = $request->txStatus;
        $paymentMode = $request->paymentMode;
        $txMsg = $request->txMsg;
        $txTime = $request->txTime;
        $signature = $request->signature;

        if ($txStatus == 'SUCCESS') {
            return redirect('credits/add')->with('successMessage', $txMsg);
        } else {
            return redirect('credits/add')->with('errorMessage', $txMsg);
        }
    }
}

【问题讨论】:

  • 我看不出您的问题与 jQuery 或 jQuery Validate 插件有什么关系。请不要标记垃圾邮件。编辑标签。

标签: php laravel-8 cashfree


【解决方案1】:

好的,我自己解决了问题。

由于新的 cookie 政策,新版本的浏览器可能会让您退出。

参考https://developers.google.com/search/blog/2020/01/get-ready-for-new-samesitenone-secure

https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie/SameSite

每当需要将 cookie 发送到服务器时,浏览器都会看到 SameSite 属性来决定 cookie 是发送到服务器还是被阻止。对于用户操作,它会发送到服务器,但对于自动重定向,如果 SameSite 设置为“Strict”或“Lax”(Lax 现在将成为默认值),则不会。

解决方案:cookie 属性 SameSite 可以设置为“无”,同时将“安全”属性指定为“真”。将“安全”属性设置为“真”将要求您的网站在 https 上运行。使用 http:// 协议运行的站点将无法设置“安全”cookie。请将 'HttpOnly' 属性设置为 'true' 以使其仅对服务器的 http 请求可访问。

【讨论】:

    猜你喜欢
    • 2021-01-09
    • 2012-08-20
    • 2021-09-30
    • 1970-01-01
    • 2019-04-17
    • 2013-06-11
    • 1970-01-01
    • 2021-01-01
    • 2013-11-12
    相关资源
    最近更新 更多