从 Stripe 预构建结账获取客户数据

霞舞
发布: 2025-09-30 21:06:02
原创
991人浏览过

从 stripe 预构建结账获取客户数据

本文介绍了如何在使用 Stripe 预构建结账集成时获取客户数据(特别是 Customer ID),以便将其存储在数据库中。由于预构建结账会自动处理客户创建,本文将重点介绍两种方法:在创建 Checkout Session 时传入已存在的 Customer ID,或者通过 Webhooks 监听 checkout.session.completed 事件来获取 Customer ID。

方法一:在创建 Checkout Session 时传入 Customer ID

如果您的应用已经存在客户信息,您可以直接在创建 Checkout Session 时传入 Customer ID。这样,Stripe 就不会创建新的 Customer 对象,而是使用您提供的现有 Customer 对象。

以下是示例代码:

\Stripe\Stripe::setApiKey('sk_test_51J...........esLwtMQx7IXNxp00epljtC43');

header('Content-Type: application/json');

$YOUR_DOMAIN = 'mydomain.com';

// 假设您已经有了 Customer ID
$customer_id = 'cus_XXXXXXXXXXXXXXX';

$checkout_session = \Stripe\Checkout\Session::create([
    'payment_method_types' => ['card'],
    'line_items' => [[
      'price'=>"price_1Jt.....vImqj",
      'quantity'=>1,
    ]],
    'mode' => 'subscription',
    'success_url' => $YOUR_DOMAIN . '/success.php',
    'cancel_url' => $YOUR_DOMAIN . '/cancel.html',
    'customer' => $customer_id, // 传入 Customer ID
  ]);
登录后复制

注意事项:

  • 确保 $customer_id 变量包含有效的 Stripe Customer ID。
  • 如果提供的 Customer ID 不存在,Stripe 将抛出错误。

方法二:使用 Webhooks 监听 checkout.session.completed 事件

如果您的应用在 Checkout Session 创建之前没有客户信息,Stripe 会根据用户在结账过程中提供的信息自动创建 Customer 对象。 在这种情况下,您需要设置 Webhooks 来监听 checkout.session.completed 事件,并在该事件触发时获取 Customer ID。

步骤 1:配置 Webhook 端点

首先,您需要在您的服务器上创建一个 Webhook 端点,用于接收 Stripe 发送的事件。 您可以在 Stripe Dashboard 中配置 Webhook 端点 URL。

知我AI·PC客户端
知我AI·PC客户端

离线运行 AI 大模型,构建你的私有个人知识库,对话式提取文件知识,保证个人文件数据安全

知我AI·PC客户端 0
查看详情 知我AI·PC客户端

步骤 2:监听 checkout.session.completed 事件

在 Webhook 端点中,您需要验证 Stripe 发送的事件,并提取 checkout.session.completed 事件中的 Customer ID。

以下是一个 PHP 示例:

<?php

require_once 'vendor/autoload.php';

// Replace if using a different env file.
$dotenv = Dotenv\Dotenv::createImmutable(__DIR__);
$dotenv->safeLoad();

\Stripe\Stripe::setApiKey($_ENV['STRIPE_SECRET_KEY']);

// Use a raw post body, since the Webhook endpoint expects raw content
$payload = @file_get_contents('php://input');
$sig_header = $_SERVER['HTTP_STRIPE_SIGNATURE'];
$endpoint_secret = $_ENV['STRIPE_WEBHOOK_SECRET'];

try {
    $event = \Stripe\Webhook::constructEvent(
        $payload, $sig_header, $endpoint_secret
    );
} catch(\UnexpectedValueException $e) {
    // Invalid payload
    http_response_code(400);
    exit();
} catch(\Stripe\Exception\SignatureVerificationException $e) {
    // Invalid signature
    http_response_code(400);
    exit();
}

// Handle the checkout.session.completed event
if ($event->type == 'checkout.session.completed') {
  $session = $event->data->object;

  // 获取 Customer ID
  $customer_id = $session->customer;

  // 将 Customer ID 存储到数据库
  // ...

  http_response_code(200);
}
登录后复制

注意事项:

  • 务必验证 Stripe 发送的 Webhook 事件的签名,以确保事件的真实性。 使用 Stripe 提供的 SDK 可以方便地进行签名验证。
  • $_ENV['STRIPE_SECRET_KEY'] 和 $_ENV['STRIPE_WEBHOOK_SECRET'] 应该从环境变量中读取,而不是硬编码在代码中。
  • 请根据您的数据库结构和需求,修改示例代码中的数据库存储部分。

总结:

通过以上两种方法,您可以方便地从 Stripe 预构建结账中获取客户数据,并将其集成到您的应用中。 选择哪种方法取决于您的具体需求和应用架构。 如果您的应用已经存在客户信息,建议使用第一种方法,直接在创建 Checkout Session 时传入 Customer ID。 如果您的应用在 Checkout Session 创建之前没有客户信息,则需要使用 Webhooks 监听 checkout.session.completed 事件来获取 Customer ID。

以上就是从 Stripe 预构建结账获取客户数据的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号