
本文详解 Stripe Payment Links 的 after_completion 参数正确用法,重点纠正常见数组嵌套错误,帮助开发者实现支付成功后自动跳转至指定页面。
本文详解 stripe payment links 的 `after_completion` 参数正确用法,重点纠正常见数组嵌套错误,帮助开发者实现支付成功后自动跳转至指定页面。
在使用 Stripe PHP SDK 创建支付链接(Payment Link)时,若希望用户完成支付后自动跳转到自定义页面(例如订单确认页、下载页或会员开通页),需通过 after_completion 参数进行配置。但该参数结构极易出错——最常见的错误是将 redirect 配置项错误地包裹在额外的数组中,导致 Stripe API 返回 400 错误(如 Invalid request: after_completion must be an object)。
正确写法要求 after_completion 是一个关联数组(object-like structure),而非索引数组。以下是修正后的完整示例代码:
$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内层多余的[ ](即避免写成'after_completion' => [ [ 'redirect' => [...], 'type' => 'redirect' ] ]); -
redirect和type是同级键,直接位于after_completion数组下; - 使用
urlencode()对 URL 参数进行编码,防止default_price中含特殊字符(如price_1Q...)导致跳转失败。
⚠️ 注意事项:
立即学习“PHP免费学习笔记(深入)”;
-
after_completion.type当前仅支持'redirect'(暂不支持email_receipt或hosted_confirmation等其他类型); - 重定向 URL 必须使用 HTTPS 协议(Stripe 强制校验);
- 该跳转发生在 Stripe 官方支付流程结束后,用户浏览器会从 Stripe 页面自动跳转,因此目标页面应具备独立可访问性,且不依赖服务端 session 状态(因跳转为客户端行为);
- 若需传递更多上下文(如客户邮箱、订单号),建议结合 Webhook 进行服务端验证与状态同步,切勿仅依赖前端跳转参数。
总结:after_completion 不是数组列表,而是一个配置对象。结构清晰、层级准确,是 Stripe 支付体验无缝衔接的关键一步。



















