迁移到 Payment Intents 想了解如何使用 Stripe Tax、折扣、配送或货币兑换? 我们正在开发一个 Payment Element 集成应用,用于管理订阅、税收、折扣、配送和货币兑换。请阅读构建结账页面 指南以了解更多信息。
了解如何迁移当前银行卡和 Charges API 集成。
付款流程的迁移是一件艰辛的工作。比较安全的做法是逐步采用 Payment Intents API,与 Charges API 同时使用。为此,您可以将迁移工作分为如下步骤:
更新您的 API 版本和客户端库 。如果适用,迁移从 Charge 属性读取的代码 ,使自己在通过 Charges API 和 Payment Intents API 创建的收款之间有一致的读取路径。这可以确保读取端集成能够适应您的新旧支付集成。 将您现有的 Web 、iOS 和 Android Charges API 集成迁移,改为使用 Payment Intents API。 迁移您的集成,在 Customer 对象上保存银行卡 。 使用监管测试卡进行测试 ,确保您升级后的集成能够正确处理身份验证。更新您的 API 版本和客户端库 虽然 Payment Intents API 适用于所有 API 版本,但建议您升级到最新的 API 版本 。如果您决定使用 2019-02-11 之前的 API 版本,请在查看代码示例时注意以下两点变更:
requires_ source
已更名为 requires_ payment_ method
requires_ source_ action
已更名为 requires_ action
此外,如果您使用的是我们的某个 SDK ,则请升级到最新版本的库,以使用 Payment Intents API。
迁移您的一次性付款流程 用 Stripe.js & Elements 构建集成时涉及以下步骤:
注册您的 Intent,在服务器端收款 在客户端收集支付信息 开始创建付款 在服务器端履行客户的订单 第 1 步:注册 Intent,在服务器端收款 在您的服务器端创建 PaymentIntent ,并使它可在客户端访问 。
curl https://api.stripe.com/v1/payment_intents \
-u sk_test_4eC39HqLyjWDarjtT1zdp7dc
: \
-d "amount" = 1099 \
-d "currency" = "usd"
第 2 步:在客户端收集支付信息 使用收集银行卡信息的 confirmCardPayment 函数,并直接将其提交到 Stripe。
stripe . createToken (
cardElement
) . then ( function ( token ) {
} ) ;
stripe . confirmCardPayment (
INTENT_SECRET_FROM_STEP_1 ,
{
payment_method : { card : cardElement }
}
) . then ( function ( result ) {
if ( result . error ) {
} else {
}
} ) ;
第 3 步:开始创建付款 在您现有的集成中,最后一步是用令牌化的支付方式在您的服务器上创建收款。这已经没有必要了,因为会由 confirmCardPayment
函数(上一步中调用的)发起收款的创建过程。
curl https://api.stripe.com/v1/charges \
-u sk_test_4eC39HqLyjWDarjtT1zdp7dc
: \
-d "source" = "{{FROM_PREVIOUS_STEP}}" \
-d "amount" = 1099 \
-d "currency" = "usd"
第 4 步:履行客户订单 通过自动确认功能,会根据客户端的客户操作为您异步创建收款,因此您必须监测 webhooks ,确定付款何时成功完成。要执行诸如在客户付款成功后履行订单等步骤,请实施 webhooks 支持并监测 payment_ intent. succeeded
事件。
订阅 payment_ intent. succeeded
Webhook 并在 Webhook 处理程序中执行。
您已完成迁移,现在,请用下一部分的测试卡验证您升级后的集成能否处理 3DS 验证。
迁移您的集成,在 Customer 对象上保存银行卡 在结账流程收集银行卡信息的 Payment Intents API 集成包含以下步骤:
注册您的 Intent,在服务器端收款 在客户端收集支付信息 开始创建付款 在服务器端履行客户的订单 第 1 步:注册 Intent,在服务器端收款 在您的服务器上创建 PaymentIntent 。如果您主要打算在用户不在您的应用内时对其收款,则将 setup_future_usage 设置为 off_ session
;如果打算在他们在您的应用内时收款,则设置为 on_ session
。如果打算在会话内与会话外时都使用此银行卡,则使用 off_ session
。如果同时提供 setup_ future_ usage
参数和 Customer Id,则在确认 PaymentIntent 并且所需的任何客户操作都完成后,将 PaymentMethod 保存到此 Customer,然后,使此 PaymentIntent 可以在客户端访问 。
curl https://api.stripe.com/v1/payment_intents \
-u sk_test_4eC39HqLyjWDarjtT1zdp7dc
: \
-d "setup_future_usage" = "off_session" \
-d "amount" = 1099 \
-d "currency" = "usd"
第 2 步:在客户端收集支付信息 使用收集银行卡信息的 confirmCardPayment 函数,并直接将其提交到 Stripe。
stripe . createToken (
cardElement
) . then ( function ( token ) {
} ) ;
stripe . confirmCardPayment (
'{{INTENT_SECRET_FROM_STEP_1}}' ,
{
payment_method : { card : cardElement } ,
}
) . then ( function ( result ) {
if ( result . error ) {
} else {
}
} ) ;
最后,将支付方式(paymentIntent. payment_ method
)绑定到客户。
curl https://api.stripe.com/v1/customers/ { { CUSTOMER_ID } } /sources \
-u sk_test_4eC39HqLyjWDarjtT1zdp7dc
: \
-d "source" = "{{TOKEN_OR_SOURCE}}"
curl https://api.stripe.com/v1/payment_method/ { { PAYMENT_METHOD_ID } } /attach \
-u sk_test_4eC39HqLyjWDarjtT1zdp7dc
: \
-d "customer" = "{{CUSTOMER_ID}}"
第 3 步:开始创建付款 在您现有的集成中,最后一步是用令牌化的支付方式在您的服务器上创建收款。这已经没有必要了,因为会由 confirmCardPayment
函数(上一步中调用的)发起收款的创建过程。
curl https://api.stripe.com/v1/charges \
-u sk_test_4eC39HqLyjWDarjtT1zdp7dc
: \
-d "source" = "{{FROM_PREVIOUS_STEP}}" \
-d "customer" = "{{CUSTOMER_ID}}" \
-d "amount" = 1099 \
-d "currency" = "usd"
第 4 步:履行客户订单 通过自动确认功能,会根据客户端的客户操作为您异步创建收款,因此您必须监测 webhooks ,确定付款何时成功完成。要执行诸如在客户付款成功后履行订单等步骤,请实施 webhooks 支持并监测 payment_ intent. succeeded
事件。
订阅 payment_ intent. succeeded
Webhook 并在 Webhook 处理程序中执行。
您已完成迁移,现在,请用下一部分的测试卡验证您升级后的集成能否处理 3DS 验证。
访问保存的支付方式 要显示客户以前保存的 Cards、Sources 以及 PaymentMethods,则应列出支付方式 ,而非读取客户对象的 sources 属性。必须要这样做,因为添加到客户的新 PaymentMethods 不会在客户对象的 Sources 属性中重复出现。
curl https://api.stripe.com/v1/payment_methods?customer= { { CUSTOMER_ID } } & type = card \
-u sk_test_4eC39HqLyjWDarjtT1zdp7dc
:
测试集成应用 彻底测试您的集成应用非常重要,这样可确保您正确处理需要额外验证的卡以及不需要额外认证的卡。在测试模式 中使用这些卡号以及任一未来的到期日和任何三位数 CVC 安全码,以便在需要和不需要身份验证时验证您的集成应用。
卡号 验证 描述 4000 0025 0000 3155 设置或首次交易时需要 此测试卡要求对一次性付款 进行验证。但如果您是用 Setup Intents API 设置的此卡并且后续付款使用保存的银行卡,则不需要进一步验证。 4000 0027 6000 3184 必填 该测试卡要求对所有交易进行身份验证。 4000 0082 6000 3178 必填 该测试卡需要验证,但在验证成功后,付款会被拒绝,并显示 insufficient_ funds
失败代码。 4000 0000 0000 3055 支持 此测试卡支持通过 3DS 2.0 验证进行身份验证,但不要求这样做。在测试模式下用该卡进行的付款不需要进行额外的身份验证,除非您的测试模式 Radar 规则 要求这样做。
在您的应用程序或付款演示 中使用这些卡,查看不同的行为。
另见