php - 从支付网关重定向后清除 Laravel session 和 Auth

标签 php laravel payment-gateway laravel-authentication paytabs

我正在使用 Laravel 7 并使用 PayTabs 支付网关进行支付。当用户从 Paytabs 重定向回来时,所有 session 和 Auth 都被清除。

在重定向到 Paytabs 之前,我在将数据放入 session 时保存 session 。 作为

Session::put('data', $data);
Session::save();

并且重定向到 Paytabs 如下:

if ($response->response_code == "4012") { //Page created
    return redirect()->to($response->payment_url);
} else {
    abort(404);
}

我还从 CSRF token 检查中排除了返回 url,如下所示:

验证CsrfToke.php

protected $except = [
   '/paytab_return'
];

我还检查了 Paytabs 是否使用 https 和 www 重定向到正确的 URL。

解决这个问题需要帮助。谢谢

最佳答案

这适用于 Laravel 6.19.1:

  1. 我在支付 channel 的成功、错误或 cancelUrls 中添加了一个 GET 变量
  2. 此变量的调用与 session cookie 的名称完全相同
$sessionKey = config('session.cookie') . '=' . session()->getId();
$successUrl = route('wirecardSuccess') . '?' . $sessionKey;

我得到的 URL 是例如

http://beatbox.vnr:8082/vnr/payment/wirecard/success?self_service_local_vnr_session=qNSQ7SessionIdtEA3Z72ReuvgsFt

作为 url,其中 self_service_local_vnr_session 是我的 session cookie 名称,qNSQ7SessionIdtEA3Z72ReuvgsFt 是当前 session 的 ID。

  1. 然后我需要用这段代码扩展 StartSession 中间件
<?php

declare(strict_types=1);

namespace App\Http\Middleware;

use Illuminate\Contracts\Session\Session;
use Illuminate\Http\Request;

/**
 * Class StartSession
 * @package App\Http\Middleware
 */
class StartSession extends \Illuminate\Session\Middleware\StartSession
{
    /**
     * Get the session implementation from the manager.
     *
     * @param Request $request
     * @return Session
     */
    public function getSession(Request $request): Session
    {
        return tap($this->manager->driver(), static function ($session) use ($request) {

            $sessionCookieName = config('session.cookie');

            if ($request->has($sessionCookieName)) {
                $sessionId = $request->input($sessionCookieName);
            } else {
                $sessionId = $request->cookies->get($session->getName());
            }

            $session->setId($sessionId);
        });
    }
}
  1. 付款已完成,重定向 URL(带有 session ID)允许我检索旧 session 信息。

我希望它能帮助登陆此页面的人:)

关于php - 从支付网关重定向后清除 Laravel session 和 Auth,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63893109/

相关文章:

php - 在 laravel 中缺少路由问题所需的参数

Laravel Socialite 无法在实时服务器上运行,只能在本地计算机上运行

payment-gateway - Cartthrob Sagepay 错误

e-commerce - 我可以让测试用户跳过登录 PayPal 沙箱吗?

paypal - 未找到新的 Paypal 凭据

php - Nginx 提供 .php 文件作为下载,而不是执行它们

java - 对于具有多个参数的单操作 Java 程序来说,理想的 Web 服务协议(protocol)是什么?

Laravel - 调用 Artisan 命令并等待结果

php pdo 准备重复变量

php - 如何使用 IntelliJ Idea 9 创建 PHP 项目?