Объект подписки на полосу из объекта Invoice имеет значение null - PullRequest
0 голосов
/ 06 марта 2019

Я разбираю события webhooks, и для события invoice.payment_succeeded мне нужно получить объект Invoice, объект Subscription и объект Plan:

            if (event.getType().equals("invoice.payment_succeeded")) {
                Invoice invoice = (Invoice) event.getData().getObject();
                Subscription subscription = invoice.getSubscriptionObject();
                Plan plan = subscription.getPlan();

Проблема в том, что объект Subscription, который он получает, является нулевым, поэтому я не могу получить план, но в webhook json счет-фактура явно не равен нулю:

<com.stripe.model.Invoice@1862723626 id=in_1EAqJIJIKy5oOMbPbbnFDfhe> JSON: {
  "id": "in_1EAqJIJIKy5oOMbPbbnFDfhe",
  "object": "invoice",
  "amount_due": 500,
  "amount_paid": 500,
  "amount_remaining": 0,
  "application_fee": null,
  "attempt_count": 1,
  "attempted": true,
  "auto_advance": false,
  "billing": "charge_automatically",
  "billing_reason": "subscription_create",
  "charge": "ch_1EAqJIJIKy5oOMbPzJWZRmkB",
  "created": 1551842448,
  "currency": "usd",
  "custom_fields": null,
  "customer": "cus_EdkAtTWX48vPlL",
  "date": 1551842448,
  "default_source": null,
  "deleted": null,
  "description": null,
  "discount": null,
  "due_date": null,
  "ending_balance": 0,
  "finalized_at": 1551842448,
  "footer": null,
  "hosted_invoice_url": "https://pay.stripe.com/invoice/invst_Xk5QCVu0wZGe8yDKRjNku8do3v",
  "invoice_pdf": "https://pay.stripe.com/invoice/invst_Xk5QCVu0wZGe8yDKRjNku8do3v/pdf",
  "lines": {
    "object": "list",
    "data": [
      {
        "id": "sli_b7542154e3401d",
        "object": "line_item",
        "amount": 500,
        "currency": "usd",
        "description": "1 ? Service (at $5.00 / month)",
        "discountable": true,
        "livemode": false,
        "metadata": {},
        "period": {
          "end": 1554520848,
          "start": 1551842448
        },
        "plan": {
          "id": "plan_EYQ3ShMp3aS5RZ",
          "object": "plan",
          "active": true,
          "amount": 500,
          "billing_scheme": "per_unit",
          "created": 1550523572,
          "currency": "usd",
          "interval": "month",
          "interval_count": 1,
          "livemode": false,
          "metadata": {},
          "nickname": "535281012935229482:540347090178670611",
          "product": "prod_EYQ2LpVmAUc2Kh",
          "tiers": null,
          "tiers_mode": null,
          "transform_usage": null,
          "usage_type": "licensed",
          "deleted": null,
          "name": null,
          "statement_description": null,
          "statement_descriptor": null,
          "trial_period_days": null
        },
        "proration": false,
        "quantity": 1,
        "subscription": "sub_Ee8abQjuYiFJXx",
        "subscription_item": "si_Ee8aKEipOAG8hQ",
        "type": "subscription"
      }
    ],
    "has_more": false,
    "total_count": 1,
    "url": "/v1/invoices/in_1EAqJIJIKy5oOMbPbbnFDfhe/lines",
    "count": null,
    "request_options": null,
    "request_params": null
  },
  "livemode": false,
  "metadata

Ответы [ 2 ]

0 голосов
/ 08 марта 2019

Прежде всего значение атрибута subscription может быть нулевым, например, в случае разовых счетов .

Весь объект Subscription по умолчанию не включен в объект Invoice, только его идентификатор. Объект Invoice, содержащийся в объекте Event, следует тому же правилу. Таким образом, вам необходимо получить Subscription с его идентификатором, как описано здесь

if (event.getType().equals("invoice.payment_succeeded")) {
    Invoice invoice = (Invoice) event.getData().getObject();
    Subscription subscription = Subscription.retrieve(invoice.getSubscription());
}

Атрибут plan будет установлен, только если подписка содержит один тарифный план.

Обратите внимание, что вы можете "развернуть" объекты Stripe при их получении. См. Раздел Расширяющиеся объекты Справочника по Stripe API.

0 голосов
/ 06 марта 2019

В документах указывается, что данные будут содержать только соответствующий объект для вашего веб-крючка.

В случае счета-фактуры это только объект счета-фактуры.К счастью, он содержит subscription идентификатор для вас:

"subscription": "sub_Ee8abQjuYiFJXx",

Вы можете использовать этот идентификатор для получения данных как

Subscription subscription = Subscription.retrieve("sub_Ee8abQjuYiFJXx");
...