我正在处理一个项目的订阅,并希望能够向最终用户展示他们今天将欠的费用(如果升级,则按比例分配差异)以及他们将每月支付的费用。这部分非常简单,但是当我还想让用户升级并应用新的优惠券代码时,问题就来了。
我正在向 Stripe invoices.retrieveUpcoming API 提交优惠券,返回的对象上有折扣信息,但订单项没有显示折扣价格。
以下是 API 调用的示例输出:
{
"object": "invoice",
"account_country": "US",
"account_name": "MPACT Assessment",
"account_tax_ids": null,
"amount_due": 8950,
"amount_paid": 0,
"amount_remaining": 8950,
"application_fee_amount": null,
"attempt_count": 0,
"attempted": false,
"billing_reason": "upcoming",
"charge": null,
"collection_method": "charge_automatically",
"created": 1619725969,
"currency": "usd",
"custom_fields": null,
"customer": "cus_J9130PfYbywDY7",
"customer_address": null,
"customer_email": "testylittletester@gmail.com",
"customer_name": "Testy Tester",
"customer_phone": null,
"customer_shipping": null,
"customer_tax_exempt": "none",
"customer_tax_ids": [],
"default_payment_method": null,
"default_source": null,
"default_tax_rates": [],
"description": null,
"discount": {
"id": "di_1IaR98G7MnKgivLUT7aFESCe",
"object": "discount",
"checkout_session": null,
"coupon": {
"id": "test_coupon50",
"object": "coupon",
"amount_off": null,
"created": 1616428624,
"currency": null,
"duration": "forever",
"duration_in_months": null,
"livemode": true,
"max_redemptions": null,
"metadata": {},
"name": "Test Coupon",
"percent_off": 50,
"redeem_by": null,
"times_redeemed": 19,
"valid": true
},
"customer": "cus_J9130PfYbywDY7",
"end": null,
"invoice": "in_1IaR98G7MnKgivLUhmyyoJUi",
"invoice_item": null,
"promotion_code": null,
"start": 1617047590,
"subscription": null
},
"discounts": [
"di_1IaR98G7MnKgivLUT7aFESCe"
],
"due_date": null,
"ending_balance": 0,
"footer": null,
"last_finalization_error": null,
"lines": {
"object": "list",
"data": [
{
"id": "il_tmp1IaR98G7MnKgivLU7VWoVDNL",
"object": "line_item",
"amount": -2900,
"currency": "usd",
"description": "Unused time on Teams Dashboard after 29 Mar 2021",
"discount_amounts": [
{
"amount": 0,
"discount": "di_1IaR98G7MnKgivLUT7aFESCe"
}
],
"discountable": false,
"discounts": [],
"invoice_item": "ii_1IaR98G7MnKgivLU7VWoVDNL",
"livemode": true,
"metadata": {},
"period": {
"end": 1619725969,
"start": 1617047590
},
"plan": {
"id": "teams_starter030421",
"object": "plan",
"active": true,
"aggregate_usage": null,
"amount": 2900,
"amount_decimal": "2900",
"billing_scheme": "per_unit",
"created": 1614974026,
"currency": "usd",
"interval": "month",
"interval_count": 1,
"livemode": true,
"metadata": {
"maxTeams": "3"
},
"nickname": "Starter Teams Dashboard",
"product": "prod_J3PgxhjcFS5hSY",
"tiers_mode": null,
"transform_usage": null,
"trial_period_days": null,
"usage_type": "licensed"
},
"price": {
"id": "teams_starter030421",
"object": "price",
"active": true,
"billing_scheme": "per_unit",
"created": 1614974026,
"currency": "usd",
"livemode": true,
"lookup_key": null,
"metadata": {
"maxTeams": "3"
},
"nickname": "Starter Teams Dashboard",
"product": "prod_J3PgxhjcFS5hSY",
"recurring": {
"aggregate_usage": null,
"interval": "month",
"interval_count": 1,
"trial_period_days": null,
"usage_type": "licensed"
},
"tiers_mode": null,
"transform_quantity": null,
"type": "recurring",
"unit_amount": 2900,
"unit_amount_decimal": "2900"
},
"proration": true,
"quantity": 1,
"subscription": "sub_JCqq4Pb9LCeqPt",
"subscription_item": "si_JCqqKM0mNJwXqR",
"tax_amounts": [],
"tax_rates": [],
"type": "invoiceitem"
},
{
"id": "il_tmp1IaR98G7MnKgivLUFy2gEVp3",
"object": "line_item",
"amount": 7900,
"currency": "usd",
"description": "Remaining time on Teams Dashboard after 29 Mar 2021",
"discount_amounts": [
{
"amount": 0,
"discount": "di_1IaR98G7MnKgivLUT7aFESCe"
}
],
"discountable": false,
"discounts": [],
"invoice_item": "ii_1IaR98G7MnKgivLUFy2gEVp3",
"livemode": true,
"metadata": {},
"period": {
"end": 1619725969,
"start": 1617047590
},
"plan": {
"id": "teams_leader031921",
"object": "plan",
"active": true,
"aggregate_usage": null,
"amount": 7900,
"amount_decimal": "7900",
"billing_scheme": "per_unit",
"created": 1616186579,
"currency": "usd",
"interval": "month",
"interval_count": 1,
"livemode": true,
"metadata": {
"maxTeams": "10"
},
"nickname": "Team Leader Dashboard",
"product": "prod_J3PgxhjcFS5hSY",
"tiers_mode": null,
"transform_usage": null,
"trial_period_days": null,
"usage_type": "licensed"
},
"price": {
"id": "teams_leader031921",
"object": "price",
"active": true,
"billing_scheme": "per_unit",
"created": 1616186579,
"currency": "usd",
"livemode": true,
"lookup_key": null,
"metadata": {
"maxTeams": "10"
},
"nickname": "Team Leader Dashboard",
"product": "prod_J3PgxhjcFS5hSY",
"recurring": {
"aggregate_usage": null,
"interval": "month",
"interval_count": 1,
"trial_period_days": null,
"usage_type": "licensed"
},
"tiers_mode": null,
"transform_quantity": null,
"type": "recurring",
"unit_amount": 7900,
"unit_amount_decimal": "7900"
},
"proration": true,
"quantity": 1,
"subscription": "sub_JCqq4Pb9LCeqPt",
"subscription_item": "si_JCqqKM0mNJwXqR",
"tax_amounts": [],
"tax_rates": [],
"type": "invoiceitem"
},
{
"id": "il_tmp_c014e7ccd7984e",
"object": "line_item",
"amount": 7900,
"currency": "usd",
"description": "1 × Teams Dashboard (at $79.00 / month)",
"discount_amounts": [
{
"amount": 3950,
"discount": "di_1IaR98G7MnKgivLUT7aFESCe"
}
],
"discountable": true,
"discounts": [],
"livemode": true,
"metadata": {},
"period": {
"end": 1622317969,
"start": 1619725969
},
"plan": {
"id": "teams_leader031921",
"object": "plan",
"active": true,
"aggregate_usage": null,
"amount": 7900,
"amount_decimal": "7900",
"billing_scheme": "per_unit",
"created": 1616186579,
"currency": "usd",
"interval": "month",
"interval_count": 1,
"livemode": true,
"metadata": {
"maxTeams": "10"
},
"nickname": "Team Leader Dashboard",
"product": "prod_J3PgxhjcFS5hSY",
"tiers_mode": null,
"transform_usage": null,
"trial_period_days": null,
"usage_type": "licensed"
},
"price": {
"id": "teams_leader031921",
"object": "price",
"active": true,
"billing_scheme": "per_unit",
"created": 1616186579,
"currency": "usd",
"livemode": true,
"lookup_key": null,
"metadata": {
"maxTeams": "10"
},
"nickname": "Team Leader Dashboard",
"product": "prod_J3PgxhjcFS5hSY",
"recurring": {
"aggregate_usage": null,
"interval": "month",
"interval_count": 1,
"trial_period_days": null,
"usage_type": "licensed"
},
"tiers_mode": null,
"transform_quantity": null,
"type": "recurring",
"unit_amount": 7900,
"unit_amount_decimal": "7900"
},
"proration": false,
"quantity": 1,
"subscription": "sub_JCqq4Pb9LCeqPt",
"subscription_item": "si_JCqqKM0mNJwXqR",
"tax_amounts": [],
"tax_rates": [],
"type": "subscription"
}
],
"has_more": false,
"total_count": 3,
"url": "/v1/invoices/upcoming/lines?customer=cus_J9130PfYbywDY7&subscription=sub_JCqq4Pb9LCeqPt&subscription_proration_behavior=create_prorations"
},
"livemode": true,
"metadata": {},
"next_payment_attempt": 1619729569,
"number": null,
"on_behalf_of": null,
"paid": false,
"payment_intent": null,
"payment_settings": {
"payment_method_options": null,
"payment_method_types": null
},
"period_end": 1619725969,
"period_start": 1617047569,
"post_payment_credit_notes_amount": 0,
"pre_payment_credit_notes_amount": 0,
"receipt_number": null,
"starting_balance": 0,
"statement_descriptor": null,
"status": "draft",
"status_transitions": {
"finalized_at": null,
"marked_uncollectible_at": null,
"paid_at": null,
"voided_at": null
},
"subscription": "sub_JCqq4Pb9LCeqPt",
"subscription_proration_date": 1617047590,
"subtotal": 12900,
"tax": null,
"total": 8950,
"total_discount_amounts": [
{
"amount": 3950,
"discount": "di_1IaR98G7MnKgivLUT7aFESCe"
}
],
"total_tax_amounts": [],
"transfer_data": null,
"webhooks_delivered_at": null
}
如果不考虑优惠券,我可以简单地将前两个项目组合起来,得出当前计划的时间与新计划的剩余时间之间的差值。如果此订阅已使用优惠券,则这些金额是正确的,但如果我尝试添加新优惠券,则这些金额不正确。
我已尝试提交付款并将生成的收据与即将开具的发票中的物品进行比较,但我找不到一种方法可以使用新的优惠券代码一致地确定今天的应付金额。
提前致谢!
编辑:这(下面的链接图片)是生成的收据的屏幕截图。基本上我想要做的是正确显示这些金额(包括新输入的促销代码/优惠券)
答案 0 :(得分:0)
正在应用折扣;详细信息显示在 total_discount_amounts
属性中:
"total_discount_amounts": [
{
"amount": 3950,
"discount": "di_1IaR98G7MnKgivLUT7aFESCe"
}
],
注意:折扣仅适用于单个发票项目(在本例中为 il_tmp_c014e7ccd7984e
)。这可能就是您没有看到预期的原因。
在你的问题中你说:
<块引用>我正在向 Stripe invoices.retrieveUpcoming API 提交优惠券,返回的对象上有折扣信息,但订单项没有显示折扣价格。
如果您查看 il_tmp_c014e7ccd7984e
,您可以看到 amount
设置为 7900
,discount_amounts.amount
设置为 3950
,这就是折扣的方式反映在那条线上。如果您想要该特定行的实际数量,您可以从 discount_amounts.amount
中减去 amount
。