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

关于Stripe Success_URL查询字符串可嵌入变量的技术咨询

Stripe结账success_url可用变量及用户关联方案

首先明确:Stripe的success_url里仅支持{CHECKOUT_SESSION_ID}这一个内置占位符,你尝试的{email}、{customer}.{email}等写法都不生效。

原因是success_url在创建结账会话时就已生成,而客户邮箱、客户信息是用户后续在结账流程中填写的,这些数据在会话创建阶段还未产生,无法直接嵌入到URL中。

要实现支付响应与数据库用户的关联,推荐两种可行方案:

方案一:通过Session ID查询会话完整信息

在你的success.php页面,利用获取到的session_id调用Stripe API查询会话详情,从中提取客户邮箱、客户ID等信息,再关联数据库内的用户。

示例PHP代码:

require_once('vendor/autoload.php');
\Stripe\Stripe::setApiKey('你的Stripe秘钥');

$session_id = $_GET['session_id'];
$session = \Stripe\Checkout\Session::retrieve($session_id);

// 直接获取会话中的客户邮箱
$customer_email = $session->customer_details->email;

// 也可通过客户ID查询更详细信息
// $customer = \Stripe\Customer::retrieve($session->customer);
// $customer_email = $customer->email;

// 这里编写用$customer_email关联数据库用户的逻辑

方案二:创建会话时存入自定义元数据

创建结账会话时,将数据库中的用户唯一标识(如用户ID)存入会话的metadata字段,后续在success.php中通过Session ID读取该元数据,直接关联用户,无需依赖邮箱。

创建会话时的示例代码:

$session = \Stripe\Checkout\Session::create([
  'payment_method_types' => ['card'],
  'line_items' => [[
    'price' => '你的价格ID',
    'quantity' => 1,
  ]],
  'mode' => 'payment',
  'success_url' => 'https://www.psychology.com/personality/lizard/success.php?session_id={CHECKOUT_SESSION_ID}',
  'cancel_url' => 'https://www.psychology.com/personality/lizard/cancel.php',
  // 存入自定义元数据,关联数据库用户ID
  'metadata' => [
    'user_id' => '数据库内的用户唯一ID'
  ]
]);

在success.php中读取元数据:

$session = \Stripe\Checkout\Session::retrieve($session_id);
$user_id = $session->metadata->user_id;

// 用$user_id直接关联数据库中的用户

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 22:52:09