无法使用会话更新信用卡

时间:2019-12-27 18:53:35

标签: javascript node.js stripe-payments

我正在尝试使用credit-card更新StripeCheckout,我看到另一个用户问了类似的问题here

问题是我没有传递任何数量就无法复制会话对象,我做到了:

const domainURL = process.env.APP_DOMAIN;

let opts = {
    payment_method_types: ["card"],
    mode: 'setup',
    success_url: `${domainURL}/pay/success?session_id={CHECKOUT_SESSION_ID}`,
    cancel_url: `${domainURL}/pay/cancel`
};

// Make session
let session = await stripe.checkout.sessions.create(opts);

let url = `${domainURL}/pay/checkout-session?sessionId=${session.id}`;
return url;

上面的代码生成Stripe会话的网址,并打开以下窗口:

enter image description here

因此,这似乎显然可行,但是当我单击“ Salva carta”保存卡时,会得到:

  

UnhandledPromiseRejectionWarning:错误:条带化:参数“ id”必须是字符串,但是得到了:null(在对GET /customers/{id}的API请求中)

我也尝试过:

 let opts = {
        payment_method_types: ["card"],
        mode: 'setup',
        setup_intent_data: {
            metadata: {
              'customer_id': 'customer id',
            }
        },
        success_url: `${domainURL}/pay/success?session_id={CHECKOUT_SESSION_ID}`,
        cancel_url: `${domainURL}/pay/cancel`
    };

here

所述

但同样的问题

1 个答案:

答案 0 :(得分:2)

我可以使用以下会话选项来解决此问题:

let opts = {
            payment_method_types: ["card"],
            mode: 'setup',
            setup_intent_data: {
                metadata: {
                  'customer_id': customerData.stripe_id,
                }
            },
            success_url: `${domainURL}/pay/success?session_id={CHECKOUT_SESSION_ID}`,
            cancel_url: `${domainURL}/pay/cancel`
        };

        // Create session
        let session = await stripe.checkout.sessions.create(opts);

要基本上免费更新信用卡,必须使用customer_id中的metadata对象指定setup_intent_data参数。

关于此的重要说明是会话mode,实际上其值必须为setup,希望这对某人有帮助。