使用Stripe Checkout Session传元数据遇500错误(Invalid object)
问题解决:Stripe Checkout Session元数据传递触发Invalid object错误
错误原因
Stripe API要求payment_intent_data.metadata必须是键值对形式的关联数组,而非单纯字符串。你当前代码中直接给metadata赋值字符串"AAA",不符合API的数据格式要求,因此触发InvalidRequestException。
修正代码
把metadata改成键值对数组即可,自定义键名来存储需要的信息:
'payment_intent_data' => [ 'metadata' => [ 'order_marker' => 'AAA', // 自定义键名,值可以是你需要传递的标识、ID等 'user_email' => $email // 也可以传递业务相关的其他字段 ] ],
完整的会话创建代码片段:
$checkout_session = $stripe->checkout->sessions->create([ 'shipping_address_collection' => ['allowed_countries' => ['US']], 'payment_method_types' => ['card'], "customer_email" => $email, 'line_items' => $line_items, 'payment_intent_data' => [ 'metadata' => [ 'test_tag' => 'AAA', 'user_email' => $email ] ], 'mode' => 'payment', 'success_url' => 'my success url ...', 'cancel_url' => 'my cancel url...', ]);
验证方式
当payment_intent.succeeded事件触发时,你在Webhook接收的事件数据中,可通过data.object.metadata字段获取到你传递的所有键值对数据。
额外提示
- 元数据键名避免空格和特殊字符,建议用下划线或驼峰命名
- 单个元数据键长度不超过40字符,值长度不超过500字符,不要传递过大内容
内容的提问来源于stack exchange,提问作者dl_atl
相关产品推荐
相关产品推荐

