You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何强制买家用户完成Stripe支付后跳转至指定成功路由?

问题解决:买家Stripe支付后无法跳转至成功路由

问题背景

系统包含卖家(is_seller = 1)和买家(is_seller = 0)两类用户,集成Stripe实现余额充值功能。卖家支付流程正常,但买家完成支付后,直接跳转至买家仪表盘,无法进入Stripe成功路由完成余额更新、交易记录生成等后续逻辑。

问题根源

  1. 固定的成功路由地址:StripeController的store方法中,successUrl硬编码为卖家路由user.deposit.stripe.success,该路由受SellerMiddleware保护,买家访问会被直接拦截跳转至买家仪表盘。
  2. 买家路由语法错误:buyerRoute.php中成功路由的方法名存在空格(' success'),导致路由无法正常匹配。
  3. 缺失关键元数据:Stripe会话的metadata未传递currency_id,导致成功路由中无法正确获取货币信息。

解决方案

1. 修复买家路由的语法错误

打开buyerRoute.php,移除success方法名前的空格:

Route::middleware('auth')->group(function () {
    Route::middleware(BuyerMiddleware::class)->group(function () {
        Route::post('/deposit/stripe-submit', [StripeController::class, 'store'])->name('buyer.deposit.stripe.submit');
        // 移除方法名前的空格
        Route::get('/deposit/stripe-submit', [StripeController::class,'success'])->name('buyer.deposit.stripe.success');
    });
});

2. 根据用户类型动态生成成功路由

修改StripeController的store方法,根据当前用户身份生成对应身份的成功路由地址:

// 替换原有的$successUrl定义部分
$user = auth()->user();
// 根据用户类型选择对应的成功路由
if ($user->is_seller == 1) {
    $successUrl = route('user.deposit.stripe.success') . '?session_id={CHECKOUT_SESSION_ID}';
} else {
    $successUrl = route('buyer.deposit.stripe.success') . '?session_id={CHECKOUT_SESSION_ID}';
}

3. 补充Stripe会话的关键元数据

在store方法的Stripe会话创建代码中,添加currency_id到metadata:

$response = $this->stripe->checkout->sessions->create([
    'submit_type' => 'pay',
    'locale' => 'auto',
    'metadata' => [
        'user_id' => auth()->user()->id,
        'deposit_number' => $item_number,
        'currency_code' => $request->currency_code,
        'currency_id' => $request->currency_id, // 新增:传递货币ID
    ],
    'success_url' => $successUrl,
    // 其他参数保持不变
]);

4. 修复成功路由中的货币信息获取

修改StripeController的success方法,从Stripe会话的metadata中获取currency_id:

public function success(Request $request) {
    $sessionId = $request->get('session_id');
    $session = $this->stripe->checkout->sessions->retrieve($sessionId);                  

    // 新增:从metadata获取currency_id
    $request['currency_id'] = $session->metadata['currency_id'];
    $request['currency_sign'] = $session->metadata['currency_sign'] ?? '';
    $request['currency_value'] = $session->metadata['currency_value'] ?? '';
    $request['currency_code'] = $session->metadata['currency_code'];
    $request['deposit_number'] = $session->metadata['deposit_number'];  

    // 后续逻辑保持不变
}

验证效果

完成上述修改后,买家发起支付后,Stripe回调将跳转至买家专属的成功路由,执行余额更新、交易记录生成、邮件通知等逻辑,最终跳转至买家充值页面并显示成功提示。

内容的提问来源于stack exchange,提问作者Nic D

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 11:14:53