首先,我从这个URL开始工作 https://docs.stripe.com/payments/save-and-reuse 我看了页面上的视频.在视频中,点击设置按钮后.Stripe UI出现.我从来没有得到这个屏幕,我已经try 了不同的浏览器. 客户创建.事件日志(log)显示.

 A new SetupIntent seti_1Ol4kvGznLM7Qekn5jObbbLm was created

日志(log)屏幕显示200 OK POST/v1/Checkout/SESSIONS.但用户界面从来没有出现过.我遗漏了什么?

 require_once "vendor/autoload.php";

 // Set your secret key. Remember to switch to your live secret key in production.
 // See your keys here: https://dashboard.stripe.com/apikeys
 $stripe = new \Stripe\StripeClient('sk_test_51J5VXM');

 $customer = $stripe->customers->create([
    'description' => 'HealthScribe Client',
    'email' => 'longmare@abc.com',
    'name' => 'Jenny Rosen2',
 ]);

 $stripe->checkout->sessions->create([
    'mode' => 'setup',
    'payment_method_types' => ['card'],
    'success_url' => 'https://api.affordablecustomehr.com/stripe/success/?session_id={CHECKOUT_SESSION_ID}',
    'cancel_url' => 'https://api.affordablecustomehr.com/stripe/cancel',
    'customer' => $customer['id']
 ]);

推荐答案

您似乎正确地创建了一个SetupIntent和一个Checkout会话,但问题可能出在您处理响应的方式上,并将用户重定向到Strive托管的Checkout页面.

当您在模式设置为‘Setup’的情况下创建Checkout会话时,STRIPE期望您将您的客户重定向到在返回的会话对象的‘url’字段中提供的URL.此URL会将您的客户 bootstrap 至STRIPE托管的设置页面,他们可以在该页面输入他们的付款详细信息.

您可以调整您的代码以处理此问题:

require_once "vendor/autoload.php";

// Set your secret key. Remember to switch to your live secret key in production.
// See your keys here: https://dashboard.stripe.com/apikeys
\Stripe\Stripe::setApiKey('sk_test_51J5VXM');

$customer = \Stripe\Customer::create([
    'description' => 'HealthScribe Client',
    'email' => 'longmare@abc.com',
    'name' => 'Jenny Rosen2',
]);

$checkout_session = \Stripe\Checkout\Session::create([
    'mode' => 'setup',
    'payment_method_types' => ['card'],
    'success_url' => 'https://api.affordablecustomehr.com/stripe/success/?session_id={CHECKOUT_SESSION_ID}',
    'cancel_url' => 'https://api.affordablecustomehr.com/stripe/cancel',
    'customer' => $customer->id,
]);

// Redirect to Checkout page
header("Location: " . $checkout_session->url);
exit();

使用此代码,在创建Checkout会话后,用户将被重定向到Strive托管的设置页面($checkout_session->url),用户可以在其中输入他们的付款详细信息.一旦他们完成设置,他们将被重定向回您的成功URL.

确保用您的实际密钥替换'sk_test_51J5VXM',并在您的生产代码中适当地处理错误情况.

Php相关问答推荐

将一个数字分配到一系列因素中(就像贪婪算法)

Laravel 9如何过滤$的项目与结果?

累加平面数组中数字子集的所有组合,以生成组合及其乘积的二维数组

如何使用`preg_replace`删除重复的空格字符

Nginx重写扩展名为.php的动态URL

从WooCommerce购物车和 checkout 页面自定义发货标签

RediSearch PHP希望我在每次使用时定义所有字段

闭包绑定$This和垃圾收集器

有没有可能从composer 过时的输出中隐藏不需要的主要版本?

删除了数组中的值,而不是多个数组

HTAccess重写一些URL,但将所有其他URL发送到另一个页面

根据WooCommerce的定制订单状态增加产品库存

当未 Select 任何变体时,在 WooCommerce 可变产品上显示自定义文本

对 WooCommerce 购物车和 checkout 中显示的运输方式进行排序

Laravel 在数据库上显示加密列

Woocommerce 相关产品按其类别或排名数学主要类别

循环中未序列化数组显示的问题

在 Symfony 测试中何时使用 TestCase 而不是 KernelTestCase

在 WordPress 中使用 $wpdb 运行 MySQL 事务是否安全?

Symfony 6 中的入口点 (public/index.php) - 它是如何工作的?