
本文详解 Stripe Payment Links 的 after_completion 参数正确用法,重点纠正因嵌套数组结构错误导致的重定向失效问题,并提供可直接运行的 PHP 代码示例与关键注意事项。
本文详解 stripe payment links 的 `after_completion` 参数正确用法,重点纠正因嵌套数组结构错误导致的重定向失效问题,并提供可直接运行的 php 代码示例与关键注意事项。
在使用 Stripe PHP SDK 创建支付链接(Payment Link)时,若希望用户完成付款后自动跳转至指定页面(例如订单确认页、下载页或自定义回调页),必须通过 after_completion 配置项实现。但实践中,一个常见且隐蔽的错误是误将 after_completion 的值定义为包含单元素数组的数组(即 [ [...] ]),而 Stripe API 实际要求它是一个关联数组对象(即 [ ... ],无外层数组括号)。
以下是正确的 PHP 代码写法:
$link = $stripe->paymentLinks->create([
'line_items' => [
[
'price' => $product['default_price'],
'quantity' => 1,
],
],
'after_completion' => [
'redirect' => [
'url' => 'https://www.trainer-va.de/Trainer-Cloud/123.php?product=' . urlencode($product['default_price']),
],
'type' => 'redirect',
],
]);⚠️ 关键修正说明:
- ❌ 错误写法:
'after_completion' => [ [ 'redirect' => [...], 'type' => 'redirect' ] ]—— 外层多了一层方括号,导致 Stripe 解析为非法结构; - ✅ 正确写法:
'after_completion' => [ 'redirect' => [...], 'type' => 'redirect' ]—— 直接以关联数组形式传入,符合官方 API 文档规范。
此外,还需注意以下几点以确保重定向稳定生效:
立即学习“PHP免费学习笔记(深入)”;
-
URL 安全编码:动态拼接参数(如
product)时务必使用urlencode(),避免特殊字符(如price_abc123!)破坏 URL 结构; -
HTTPS 强制要求:
redirect.url必须为 HTTPS 协议地址,HTTP 地址将被 Stripe 拒绝; - 域名白名单:确保目标域名已添加至 Stripe Dashboard → Settings → Website settings 的「Allowed redirect URLs」列表中(否则会触发安全拦截);
-
仅适用于成功支付:
after_completion.redirect仅在支付成功完成(status = complete)后触发;失败或取消场景不会跳转,如需处理异常流程,应配合 Webhook 监听payment_intent.payment_failed等事件。
最后,可通过 $link->url 获取生成的支付链接,并在前端安全展示或重定向用户。整个流程无需服务端监听回调,轻量高效,特别适合 SaaS 工具、数字商品等快速落地场景。



















