如何在Stripe CLI的checkout.session.completed触发器中添加custom_fields
解决Stripe Trigger添加Custom Fields时的400错误问题
你的问题核心是混淆了Checkout Session创建API的参数结构和Webhook payload的结构:
- 创建Checkout Session时,
custom_fields仅需定义字段元数据(key、类型、标签),无需传递用户填写的text[value]——这个值是用户提交表单后才会生成并出现在Webhook payload中的内容。 - 你在命令中加入的
custom_fields[0][text][value]不属于创建Session的合法参数,因此Stripe返回了「参数未知」的400错误。
正确操作步骤
1. 先定义自定义字段结构
使用以下命令触发事件,仅传递创建Session所需的自定义字段元数据:
$ stripe trigger checkout.session.completed \ --add "checkout_session:custom_fields[0][key]"="foo" \ --add "checkout_session:custom_fields[0][type]"="text" \ --add "checkout_session:custom_fields[0][label][type]"="custom" \ --add "checkout_session:custom_fields[0][label][custom]"="bar"
此时Webhook事件会包含你定义的字段,但text[value]为空,因为默认未模拟用户输入。
2. 模拟用户填写的自定义字段值
若需要Webhook收到带用户输入值的custom_fields,需修改最终触发的事件payload,有两种实现方式:
方式一:用--modify参数直接修改事件
$ stripe trigger checkout.session.completed \ --add "checkout_session:custom_fields[0][key]"="foo" \ --add "checkout_session:custom_fields[0][type]"="text" \ --add "checkout_session:custom_fields[0][label][type]"="custom" \ --add "checkout_session:custom_fields[0][label][custom]"="bar" \ --modify "checkout_session:custom_fields[0][text][value]"="baz"
--modify用于修改最终生成的Webhook事件payload,而非创建Session的API参数,这样就能让Webhook收到带baz值的自定义字段。
方式二:使用自定义Fixture文件
创建JSON文件(如custom_checkout_event.json),定义完整事件结构:
{ "event": { "type": "checkout.session.completed", "data": { "object": { "custom_fields": [ { "key": "foo", "type": "text", "label": { "type": "custom", "custom": "bar" }, "text": { "value": "baz" } } ] } } } }
随后用以下命令触发:
$ stripe trigger checkout.session.completed --fixture custom_checkout_event.json
关键区别
--add:传递创建Checkout Session的API参数,必须符合Stripe Create Checkout Session API的参数规范。--modify:修改最终触发的Webhook事件payload,可添加API参数中没有的返回字段(如用户填写的自定义字段值)。
内容的提问来源于stack exchange,提问作者QF0
相关产品推荐
相关产品推荐

