【发布时间】:2023-04-06 12:31:01
【问题描述】:
当客户增加订阅项目的数量时,我正在尝试从条带中检索按比例分配的发票价格。例如,基本计划为 10 美元,每月额外增加 2000 次 API 调用的选项为 4.99 美元。如果客户希望每月增加 4000 次 api 调用,那么他们会将 4.99 美元的订阅项目数量从 1 增加到 2。客户决定在计费周期中途增加数量时,价格会有所不同。在这种情况下,他们应支付 2.49 美元。下一个计费周期应在开始时收取 4.99 美元。
在尝试使用stripe.invoices.retrieveUpcoming({...}) 检索即将到来的发票后,它每次都返回错误的价格。它总是比它需要的更多。似乎是 10 美元基本计划的 2 倍,并且只有 4.99 美元的价格之一。这是我后端的代码(它是路由数组中的一个数组元素。):
{
url: '/invoice-amount',
type: eRequestType.GET,
handler: async (req, res) => {
const { proration_date, subscription, price, customer } = JSON.parse(req.headers["invoice-details"])
try {
const sub = await stripe.subscriptions.retrieve(subscription)
let siID = null, oldQuantity = null
for (let si of sub.items.data) { if (si.price.id === price) { siID = si.id; oldQuantity = si.quantity } }
if(!siID) {
const invoice = await stripe.invoices.retrieveUpcoming({
customer,
subscription_items: [{price}],
// subscription_proration_date: proration_date
})
return res.json({"amount": invoice.amount_due})
}
else {
const invoice = await stripe.invoices.retrieveUpcoming({
// customer,
subscription,
subscription_items: [{ id: siID, price, quantity: oldQuantity + 1}],
subscription_proration_date: proration_date
})
return res.json({"amount": invoice.amount_due})
}
}
catch (error) {
console.log(error)
res.json({ "error": error.message })
}
}
}
从前端调用该路由如下所示:
async function fetchInvoiceAmount() {
return axios.get('/invoice-amount', {
headers: {
"invoice-details": JSON.stringify({
"proration_date": Math.floor(Date.now() / 1000),
"subscription": props.subId,
"price": ePrices.EXTRA_API_CALLS,
"customer": props.user.cust_id
})
}
})
}
当我测试此代码时,客户以每月 10 美元的价格订阅了我的月度计划并且他们没有支付额外的 api 调用,路由返回 {"amount": 499} 或 4.99 美元。这似乎是正确的。在查看了条带文档后,它提到不传递订阅 id 并且只传递 subscription_items 将返回如果项目被添加到订阅中的金额。但就像之前一样,如果客户在一个月的中途注册怎么办?它不应该返回{"amount": 499},而应该返回{"amount": 249}。当客户已经以 4.99 美元的价格购买了至少一个订阅项目时,就会出现真正的问题。然后路由返回{"amount": 2497}。在分析这个输出时,我认为它将 10 美元的基本价格提高到 2 的数量,并且没有触及 4.99 美元的 api 价格。
我如何让这个只为api调用价格增加一个数量返回按比例分配的金额?
【问题讨论】:
标签: javascript stripe-payments