处理您所描述的流程的一种方法是结合backdate_start_date 和billing_cycle_anchor 属性。这个想法是,在创建订阅时,您会将billing_cycle_anchor 设置为下个月的第一天,并将backdate_start_date 设置为当月的第一天。例如,假设您想为用户注册从今天(2 月 5 日)开始的 10.00 美元订阅,但您想立即向他们收取 10.00 美元的全部费用(即使他们错过了前 5 天)。然后,您想在 3 月 1 日和之后每个月的第一天再次向他们收取 10.00 美元的账单。创建订阅时,您将设置:
-
billing_cycle_anchor: 1614556800(3月1日)
-
backdate_start_date: 1612137600(2月1日)
这将导致今天开出 10.00 美元的发票,并在 3 月 1 日再次开出 10.00 美元的发票,之后每个月的第一天都会开出 10.00 美元的发票。
这是 Node 中的样子:
(async () => {
const product = await stripe.products.create({ name: "t-shirt" });
const customer = await stripe.customers.create({
name: "Jenny Rosen",
email: "jenny.rosen@gmail.com",
payment_method: "pm_card_visa",
invoice_settings: {
default_payment_method: "pm_card_visa",
},
});
const subscription = await stripe.subscriptions.create({
customer: customer.id,
items: [
{
quantity: 1,
price_data: {
unit_amount: 1000,
currency: "usd",
recurring: {
interval: "month",
},
product: product.id,
},
},
],
backdate_start_date: 1612137600,
billing_cycle_anchor: 1614556800,
expand: ["latest_invoice"],
});
console.log(subscription);
})();