Stripe -- 客户的默认付款方式不在卡对象中

时间:2020-12-18 19:23:47

标签: javascript express stripe-payments

我在如何组织代码方面遇到了问题,并且在过去 48 小时内无法弄清楚如何解决此问题。我的大脑基本上被卡住了,我想帮助如何找出解决方案。我在服务器端使用 expressjs,在前端使用 Svelte。

问题: 我可以创建客户、paymentMethods、paymentIntents 并将paymentMethod 附加到客户,将所述paymentMethod 设置为其客户的默认paymentMethod...等

要显示客户支付方法,我必须使用 Stripe.paymentMethods.list 返回一组卡片。卡对象不包含任何表明该卡是客户默认付款方式的字段。

存储默认支付方式的 default_payment_method 位于客户对象中。所以我需要获取客户对象,这就是我需要帮助的地方。我该如何解决这个问题,如何访问 Stripe.paymentMethods.list() 以获取卡片列表和 stripe.customer.retrieve() 以便我可以访问服务器句柄中的 defaultpaymentmethod 以便我可以返回所有这些信息到前面?

// get cards
stripe.paymentMethods.list({
        customer: customer,
        type: 'card'
    }).then(cards => {
        //I can return cards but not customer
        return res.end(JSON.stringify({ cards: cards}));
        }).catch(err => { console.log("err message :", err.message)});
});    

// now get customer
stripe.customers.retrieve(
  'cus_Ib01d7QtMdz2ez'
).then(customer=>{ 
      // I can return customer but not cards
     return res.end(JSON.stringify({customer : customer}));
});

// next step, send customer and cards to the frontst 

return res.end(JSON.Stringfy({cards : cards; customer : customer}))
    ?????

如何返回“卡片和客户”对象,以便我可以向客户展示他/她的卡片以及哪一种是默认付款方式。如何使用 res.end(JSON.stringfy({})) 两个独立的函数,我可以将它们结合起来返回一个吗?

1 个答案:

答案 0 :(得分:1)

看起来您已经完成了 80% 的工作。您绝对可以返回这两个对象,但我可能建议只返回您需要的特定信息位。不要在 .then() 块中响应,而是使用 async/await 来获得两个响应。

const cards = await stripe.paymentMethods.list({
    customer: 'cus_123',
    type: 'card'
})

const customer = stripe.customers.retrieve(
  'cus_123'
)

return res.send(JSON.Stringify({cards : cards, customer : customer}))
// or, send json directly
// return res.json({cards : cards, customer : customer})

(另外,请注意我用逗号 ; 替换了分号 , 并更正了错字):

return res.end(JSON.String**i**fy({cards : cards**,** customer : customer}))