Konbini 支付
用 Payment Intents 和 Payment Methods APIs 实现 Konbini 收款,这是日本在便利店常用的一种支付方式。
注意
Stripe 通过评估客户的货币、支付方式限制和其他参数,自动为客户显示支付方式选项。建议用接受付款中的说明,从 Stripe 管理平台配置您的支付方式。
如果想继续用 Checkout 手动配置向客户显示的支付方式,请使用本指南。否则,请更新您的集成以在管理平台中配置支付方式。
Konbini 是一种一次性使用的支付方式,客户需要进行额外的步骤来完成付款。客户通过在日本便利店提供一个付款码、确认码并支付现金,完成付款。Stripe 会在付款完成时给您通知。
接受付款
注意
使用本指南之前,先构建一个集成来用 Checkout 接受付款。
使用本指南了解如何启用 Konbini — 它展示了用银行卡收款和用 Konbini 收款之间的区别。
启用 Konbini 这一支付方式
创建新的 Checkout Session 时,您需要:
- 将
konbini
添加到payment_
列表method_ types - 确保您的所有
line_
都使用items jpy
货币。
其他支付方式选项
支付方式选项可以在 payment method options(konbini
参数下)中指定。
字段 | 值 | 必填 | 默认值 |
---|---|---|---|
expires_ | 待处理的 Konbini 付款到期前的自然天数。有效值为 1 到 60 天。见有效期。 | 否 | 3 |
有效期
待处理的 Konbini 付款在特定日期的午夜 (23:59:59 JST) 准时过期。例如,如果 expires_
设置为 2,然后未在周一确认 PaymentIntent,则待处理的 Konbini 付款将在日本时间 (UTC+9) 周三的 23:59:59 过期。
电话号码
在 Konbini 结账表单上,您的客户可以选择提供一个电话号码作为他们的确认码。这简化了他们在便利店的支付过程,店内的 UI 要求客户提供付款码和确认码。这两者都反映在客户提交完结账表单后 Stripe 显示的付款说明中。如果您的客户没有提供电话号码,则 Stripe 会生成一个随机的确认码。
Stripe 主动阻止仅包含零的电话号码。
重定向到 Stripe 托管的付款凭单页面
注意
与银行卡付款不同,用 Konbini 付款时,客户不会被重定向到 success_url。
成功提交 Checkout 表单后,客户被重定向到 hosted_
。客户可以参考托管页面的付款说明,了解如何完成付款的详细信息。该页面可以在桌面电脑和手机上查看,还可以打印。
成功创建 Konbini 付款凭单时,Stripe 会发送一个 payment_intent.requires_action 事件。如果您需要通过邮件给客户发送付款凭单的付款说明链接,可以在 payment_intent.next_action.konbini_display_details 中找到 hosted_
。了解如何用 Webhook 监测 PaymentIntent。
Stripe 允许在品牌设置页面自定义面向客户的 UI。下列品牌设置项可应用付款凭单:
- 图标——您的品牌图片及公开的商家名称
- 强调色——用作复印数字按钮的颜色
- 品牌颜色——用作背景颜色
履行订单
由于 Konbini 是一种延迟通知型支付方式,因此您需要用一种方式(例如 webhooks)来监测付款状态并处理订单履行情况。了解有关设置 Webhook 和履行订单的更多信息。
付款状态变化时会发送以下事件:
事件名称 | 描述 | 后续步骤 |
---|---|---|
客户成功提交了 Checkout 表单。Stripe 已生成 Konbini 付款凭单。 您可以选择通过邮件将 | 等待客户支付 Konbini 付款。 | |
checkout.session.async_payment_succeeded | 客户成功支付了 Konbini 付款凭单。PaymentIntent 状态变为 succeeded 。 | 履行客户购买的商品或服务。 |
checkout.session.async_payment_failed | Konbini 付款凭单已过期,或付款因其他原因失败了。PaymentIntent 返回到 requires_ 的状态。 | 通过电子邮件联系客户,请求其重新下单。 |
测试您的集成
测试您的 Checkout 集成时,选择 Konbini 这一支付方式,然后点击支付按钮。
在 Checkout 内提供以下值,以测试不同的场景。您可以用专用确认码或邮件样式来测试。如果两者都用,则专用确认码的行为适用。
邮件地址 | 确认码 | 描述 |
---|---|---|
|
| 模拟一笔三分钟后成功的 Konbini 付款,然后收到 例如:hanako@test.com |
|
| 模拟一笔立即成功的 Konbini 付款,然后收到 例如:succeed_immediately@test.com |
|
| 模拟一笔立即过期 Konbini 付款,然后收到 next_action.konbini_display_details 中的 例如:expire_immediately@test.com |
|
| 模拟一笔永远不会成功的 Konbini 付款,然后收到 next_action.konbini_display_details 中的 例如:expire_with_delay@test.com |
|
| 模拟一笔永远不会成功的 Konbini 付款;按照 payment method options 中提供的各个参数的 例如:fill_never@test.com |
要测试确认码的错误,可以使用以下值:
01234567890
模拟确认码被拒绝的情况。00000000000
会导致验证错误。
过期和取消
在由 next_action.konbini_display_details 中的 expires_
值指定的时间过后,客户不能再在便利店的自助服务终端上_发起_待处理的 Konbini 付款的付款流程。但是,如果在截止时间之前给了他们有效的付款单,则或许能够在 expires_
之后在收银机上_完成_付款。
这种情况下,会有一个缓冲期,避免在提前付款失败。PaymentIntent 的状态会变成 requires_
。这时,可以用另一支付方式取消或确认 PaymentIntent。
您也可以在确认后以及 next_
指定的时间到达前,取消待处理的 Konbini 付款。更新 PaymentIntent 或用另一种支付方式确认它也将隐式地取消现有的 Konbini 付款。
如果客户目前正在便利店进行 Konbini 支付,取消请求将失败。如果客户放弃付款尝试,并且付款单已过期,则可以重新尝试取消。
请注意,支付方式暂时性的可用性问题也会影响(既有显示又有隐式影响)取消请求。
注意
取消待处理的支付时,原始支付说明会失效。大多数情况下,建议您联系您的客户,通知他们取消支付。
成功地重新确认了 requires_
状态的 PaymentIntent 后,我们会创建新的说明和新的 hosted_
。您要保证客户意识到这些问题。
退款
要直接完成转到客户银行账户的退款,您的客户必须提供用来接收资金的银行账户的详细信息。Stripe 会通过支付方式上的账单详情中的邮件地址联系客户,并请求他们提供这些信息。收到银行详情后,我们会自动处理退款。
退款的状态变化如下:
活动 | 退款状态 |
---|---|
退款已创建 | requires_ |
客户提交银行账户详情,Stripe 开始处理退款 | pending |
退款预计会到达客户的银行 | succeeded |
客户的银行将资金退回到 Stripe | requires_ |
创建 45 天以后,退款状态变为 requires_ 。 | failed |
退款从 requires_ 状态取消 | canceled |
如果客户的银行不能成功完成转账,资金会退到 Stripe,然后退款状态变为 requires_
。在账户持有人的姓名与收款行记录的姓名不匹配,或提供的银行账号有输入错误时,就会发生这种情况。这些情况下,Stripe 会邮件通知客户发生的故障,并让他们重新提交银行账户详情。
如果您的客户不能在 45 天内提供他们的银行账户详细信息,退款的状态将变为 failed
,我们发送 refund.failed 事件。这意味着 Stripe 不能处理这笔退款,您必须在 Stripe 外部将资金退给客户。
退款上的 instructions_email 字段是退款发至的邮件地址。当退款等待客户回复时,还可以在退款的 next_action.display_details.email_sent 字段中找到发给客户的电子邮件的详细信息。
每一笔退款(包括每笔部分退款)都可能产生费用。请联系您在 Stripe 的对接人,了解有关这种费用的更多信息。
测试退款
给客户发送的邮件中有银行账户详情收集链接,您可以用其中的以下测试用银行账户在测试模式下测试退款行为。不接受这些测试银行账户之外的银行账户。
路径 | 账户 | 类型 |
---|---|---|
1100000 | 0001234 | 退款成功。 |
|
| 退款失败。 |
测试退款有效时间
您可以发起一个 API 调用来模拟一笔测试退款的有效时间。
curl https://api.stripe.com/v1/test_helpers/refunds/{{REFUND_ID}}/expire \ -X POST \ -u
:sk_test_BQokikJOvBiI2HlWgH4olfQ2