【发布时间】:2021-02-21 10:30:38
【问题描述】:
我是 Stripe API 的新手,我正在尝试为我的电子商务网站实现 prebuilt Checkout page。我希望客户最多可以购买 6 件商品,并且我希望这 6 件商品出现在结帐页面上。
documentation 提到 line_items 是“客户正在购买的商品列表”,因此我在 line_items 数组中为每个产品有 6 个对象;但是,stripe.sessions.create() 不会执行并且 Checkout 页面不会加载。如果我删除了 line_items 中除 1 个之外的所有对象,则会话正常工作并加载页面。
以下来自我的后端,它处理创建结帐会话的请求。任何帮助表示赞赏!
app.post('/create-session', async (req, res) => {
const YOUR_DOMAIN = 'http://localhost:3000/Home';
const session = await stripe.checkout.sessions.create({
payment_method_types: ['card'],
line_items: [
{
price_data: {
currency: 'usd',
product_data: {
name: 'Product1',
images: ['https://i.imgur.com/EHyR2nP.png'],
},
unit_amount: 1899,
},
quantity: 1,
},
{
price_data: {
currency: 'usd',
product_data: {
name: 'Product2',
images: ['https://i.imgur.com/EHyR2nP.png'],
},
unit_amount: 1899,
},
quantity: 1,
},
{
price_data: {
currency: 'usd',
product_data: {
name: 'Product3',
images: ['https://i.imgur.com/EHyR2nP.png'],
},
unit_amount: 1899,
},
quantity: 1,
},
{
price_data: {
currency: 'usd',
product_data: {
name: 'Product4',
images: ['https://i.imgur.com/EHyR2nP.png'],
},
unit_amount: 1899,
},
quantity: 1,
},
{
price_data: {
currency: 'usd',
product_data: {
name: 'Product5',
images: ['https://i.imgur.com/EHyR2nP.png'],
},
unit_amount: 1899,
},
quantity: 1,
},
{
price_data: {
currency: 'usd',
product_data: {
name: 'Product6',
images: ['https://i.imgur.com/EHyR2nP.png'],
},
unit_amount: 1899,
},
quantity: 1,
},
],
mode: 'payment',
success_url: `${YOUR_DOMAIN}?success=true`,
cancel_url: `${YOUR_DOMAIN}?canceled=true`,
});
res.json({ id: session.id });
});
编辑: 我正在使用条带节点 8.119.0。
在 Stripe 开发人员日志中,我收到 POST /v1/checkout/sessions 的 400 错误。这是响应正文:
{
"error": {
"code": "parameter_invalid_integer",
"doc_url": "https://stripe.com/docs/error-codes/parameter-invalid-integer",
"message": "This value must be greater than or equal to 1.",
"param": "line_items[1][quantity]",
"type": "invalid_request_error"
}
}
在前端,我在控制台中得到以下信息: error message
【问题讨论】:
-
"stripe.sessions.create() 不执行,结帐页面不加载" 您的控制台或 Stripe 开发者日志中是否有错误消息?
-
正如@ceejayoz 所说:你能提供更多细节吗?这看起来正确/有效,因此我们需要任何错误来帮助您调试。您能分享一下您使用的
stripe-node的哪个版本以及您的默认API 版本是什么? -
我的条带节点版本是 8.119.0。我的后端没有任何问题,但我的 Stripe 开发者控制台显示 POST /v1/checkout/sessions 存在 400 错误:{“error”:{“code”:“parameter_invalid_integer”,“doc_url”:“ stripe.com/docs/error-codes/parameter-invalid-integer", "message": "这个值必须大于等于1。", "param": "line_items[1][quantity]", "type": "invalid_request_error" } }
-
您的数量是否来自某个变量或数据库?还是它们总是硬编码为
quantity: 1,如上例所示? Stripe 开发者控制台应该显示您发送的内容以及他们回复的内容;匹配吗? -
@creejayoz 是的,我的数量暂时是硬编码的。但是在以前的版本中,我让它们依赖于从值 0 开始的状态,看起来我还没有完全更新我的后端。现在每个数量都被硬编码为 1,所以它似乎是设置为 0 的数量导致了这个问题。如果您不介意我再问一个问题,这是否意味着我不能始终在结帐会话中定义所有 6 种产品?我的方法是在每个会话中定义所有 6 个,但数量会有所不同(从 0 开始),具体取决于在前端选择了多少产品。
标签: node.js express stripe-payments