我在node js后端创建订阅。它一直工作得很好,但今天我得到了这个错误。我没有对代码做任何更改-它只是开始返回此错误。后台代码:
app.post('/api/subscription', async (req, res) => {
const { priceId } = req.body;
try {
const session = await stripe.checkout.sessions.create({
mode: "subscription",
payment_method_types: ["card"],
line_items: [
{
price: priceId,
// For metered billing, do not pass quantity
quantity: 1,
},
],
// {CHECKOUT_SESSION_ID} is a string literal; do not change it!
// the actual Session ID is returned in the query parameter when your customer
// is redirected to the success page.
success_url: 'https://someurl',
cancel_url: 'https://someurl',
});
res.send({
sessionId: session.id,
});
} catch (e) {
console.log(e)
res.status(400);
return res.send({
error: {
message: e.message,
}
});
}
})
从我的委托人那里
fetch("http://localhost:8000/api/subscription", {
method: "POST",
body: JSON.stringify({ priceId }),
});
我已经采取了这个代码从官方条纹的例子在这里https://stripe.com/docs/billing/subscriptions/checkout和正如我所说,它的工作正常,现在我已经测试了两个不同的条纹帐户,并得到相同的错误。它看起来像是在条带上发生了更改,但在其文档中没有发生更改
2条答案
按热度按时间f45qwnt81#
如果
priceId
是undefined
/null
,则不会在请求中发送。如果Price不存在,API会假设您正在尝试指定有关行项目的信息而不使用Price,并且它执行的第一个检查之一是有效的currency
(您没有),这将导致Missing required param: line_items[0][currency].
错误。要解决这个问题,您需要找出为什么
priceId
没有按预期填充,并且您可能还需要添加一个检查,以确保priceId
在继续Checkout Session创建步骤之前有效。zlhcx6iw2#
如果其他人正在挣扎-在添加文档时,请确保使用“价格:XXX“而非”priceId:XXX”,如某些教程中所示。它给了我丢失的货币错误。