首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用3d安全卡和next_action空的条带化订阅

使用3d安全卡和next_action空的条带化订阅
EN

Stack Overflow用户
提问于 2019-06-05 19:15:46
回答 1查看 1.4K关注 0票数 2

我们正在努力准备我们的条带订阅工作流程,以符合2019年9月14日生效的在线支付的新SCA要求。我们面临着一些问题,当我们试图适应出Javascript和PHP代码,以便在创建订阅时接受3d安全信用卡。

我们已经尝试了什么是指向here,但没有成功。我们在服务器端创建订阅时发送enable_incomplete_payments = true,但是响应返回next_action = null,尽管订阅的状态是pending

这是我们正在一步一步做的:

(客户端)我们开始元素

代码语言:javascript
复制
let stripe = window.Stripe(key);
let elements = stripe.elements();
[...]
let card = elements.create('card', {style: style});
[...]

(客户端)我们使用测试卡4000000000003220 (3d安全)

(客户端) createToken() ->向服务器发送令牌

代码语言:javascript
复制
createToken(formId).then((result)=>{
    if (result.error) {
        //handle errors
    } else{
        //send result.token to backend
    }
})

(服务端)从客户端获取令牌并创建客户:

代码语言:javascript
复制
Customer::create([
    "description" => $user->name,
    "email" => $user->email,
    "source" => $token, // obtained with Stripe.js
]);

(服务器)创建订阅

代码语言:javascript
复制
    $response = Subscription::create([
            "customer" => $customerId,
            "items" => [
                ["plan" => $planId],
            ],
            "prorate" => false,
            "expand" => ["latest_invoice.payment_intent"],
            'enable_incomplete_payments' => true
        ]);

    if ($response->status == 'incomplete') {
        $payment_intent = $response->latest_invoice->payment_intent->client_secret;
        //send payment intent client secret to frontend to perform authorization
    }

在这里,我们应该将status=requires_action作为响应,但我们收到的却是status=null。在下一步中:

代码语言:javascript
复制
    stripe.handleCardPayment(paymentIntentSecret, element)

并且此处失败(没有其他操作或弹出窗口),并出现错误:

代码语言:javascript
复制
"error": {
    "charge": "ch_1EhvwjBqa3pLeb3ypVgXafhI",
    "code": "authentication_required",
    "decline_code": "authentication_required",
    "message": "Your card was declined. This transaction requires two-factor authentication.",
[...]

谢谢你,马可

EN

回答 1

Stack Overflow用户

发布于 2019-06-06 03:32:20

这是因为您使用的是不完整状态存在之前的较旧的API版本。要使用这个支持SCA的流程,您可以选择在创建订阅时传递API,或者使用https://stripe.com/docs/api/versioning使用更新的"enable_incomplete_payments" => true版本发出API请求。这里有详细的描述:

https://stripe.com/docs/billing/lifecycle#incomplete-opt-in

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56459396

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档