想了解如何使用 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_BQokikJOvBiI2HlWgH4olfQ2
: \
-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_BQokikJOvBiI2HlWgH4olfQ2
: \
-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
。在确认 PaymentIntent 并完成客户所需的任何操作后,提供 setup_ future_ usage
参数和 Customer ID 会将生成的 PaymentMethod 保存到该 Customer。接下来,使 PaymentIntent 可以在客户端被访问 。
curl https://api.stripe.com/v1/payment_intents \
-u sk_test_BQokikJOvBiI2HlWgH4olfQ2
: \
-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_BQokikJOvBiI2HlWgH4olfQ2
: \
-d "source" = "{{TOKEN_OR_SOURCE}}"
curl https://api.stripe.com/v1/payment_method/ { { PAYMENT_METHOD_ID } } /attach \
-u sk_test_BQokikJOvBiI2HlWgH4olfQ2
: \
-d "customer" = "{{CUSTOMER_ID}}"
第 3 步:开始创建付款 在您现有的集成中,最后一步是用令牌化的支付方式在您的服务器上创建收款。这已经没有必要了,因为会由 confirmCardPayment
函数(上一步中调用的)发起收款的创建过程。
curl https://api.stripe.com/v1/charges \
-u sk_test_BQokikJOvBiI2HlWgH4olfQ2
: \
-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_BQokikJOvBiI2HlWgH4olfQ2
:
测试集成 务必要对您的集成进行全面测试,确保其可以正确处理需要及不需要额外验证的银行卡,这一点非常重要。在沙盒环境 下用这些卡号(到期日可以是任意未来的日期,任意三位 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 规则 要求验证。
在您的应用程序或付款演示 中使用这些卡,查看不同的行为。
另见