使用优惠券预览条纹订阅价格变化

时间:2021-03-29 19:54:21

标签: stripe-payments

我正在处理一个项目的订阅,并希望能够向最终用户展示他们今天将欠的费用(如果升级,则按比例分配差异)以及他们将每月支付的费用。这部分非常简单,但是当我还想让用户升级并应用新的优惠券代码时,问题就来了。

我正在向 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
}

如果不考虑优惠券,我可以简单地将前两个项目组合起来,得出当前计划的时间与新计划的剩余时间之间的差值。如果此订阅已使用优惠券,则这些金额是正确的,但如果我尝试添加新优惠券,则这些金额不正确。

我已尝试提交付款并将生成的收据与即将开具的发票中的物品进行比较,但我找不到一种方法可以使用新的优惠券代码一致地确定今天的应付金额。

提前致谢!

编辑:这(下面的链接图片)是生成的收据的屏幕截图。基本上我想要做的是正确显示这些金额(包括新输入的促销代码/优惠券)

Stripe receipt for subscription upgrade

1 个答案:

答案 0 :(得分:0)

正在应用折扣;详细信息显示在 total_discount_amounts 属性中:

    "total_discount_amounts": [
        {
            "amount": 3950,
            "discount": "di_1IaR98G7MnKgivLUT7aFESCe"
        }
    ],

注意:折扣仅适用于单个发票项目(在本例中为 il_tmp_c014e7ccd7984e)。这可能就是您没有看到预期的原因。

在你的问题中你说:

<块引用>

我正在向 Stripe invoices.retrieveUpcoming API 提交优惠券,返回的对象上有折扣信息,但订单项没有显示折扣价格。

如果您查看 il_tmp_c014e7ccd7984e,您可以看到 amount 设置为 7900discount_amounts.amount 设置为 3950,这就是折扣的方式反映在那条线上。如果您想要该特定行的实际数量,您可以从 discount_amounts.amount 中减去 amount