Stripe events: Как захватить продукт, который был успешно оплачен с помощью Stripe events и webhook?

#stripe-payments

#stripe-платежи

Вопрос:

Пользователи моего сайта будут покупать кредиты, используя единый платежный процесс Stripe с сеансом оформления заказа. Они могут покупать отдельные кредиты или пакеты кредитов, например, пакет 10 кредитов по сниженной цене. После успешной оплаты я хочу захватить событие с помощью webhook и обновить баланс пользователя в соответствии с продуктом и количеством, оплаченным пользователем.

В настоящее время я отслеживаю payment_intent.succeeded события и вижу информацию об оплате и оплате, однако я не могу найти никакой информации, связанной с заказанным продуктом. Что я упускаю? Спасибо.

Это пример события намерения платежа, которое я фиксирую:

 {
  "amount": 5250,
  "amount_capturable": 0,
  "amount_received": 5250,
  "application": null,
  "application_fee_amount": null,
  "canceled_at": null,
  "cancellation_reason": null,
  "capture_method": "automatic",
  "charges": {
    "data": [
      {
        "amount": 5250,
        "amount_captured": 5250,
        "amount_refunded": 0,
        "application": null,
        "application_fee": null,
        "application_fee_amount": null,
        "balance_transaction": "txn_1HUSonCfZ37XLQD8mLERR2YR",
        "billing_details": {
          "address": {
            "city": null,
            "country": "JP",
            "line1": null,
            "line2": null,
            "postal_code": null,
            "state": null
          },
          "email": "xxxx.xxxx.xxxx@gmail.com",
          "name": "asd",
          "phone": null
        },
        "calculated_statement_descriptor": "XXX XXXX",
        "captured": true,
        "created": 1600847712,
        "currency": "jpy",
        "customer": "cus_I4c27DIUQuvAHQ",
        "description": null,
        "destination": null,
        "dispute": null,
        "disputed": false,
        "failure_code": null,
        "failure_message": null,
        "fraud_details": {},
        "id": "ch_1HUSomCfZ37XLQD8d133buOK",
        "invoice": null,
        "livemode": false,
        "metadata": {},
        "object": "charge",
        "on_behalf_of": null,
        "order": null,
        "outcome": {
          "network_status": "approved_by_network",
          "reason": null,
          "risk_level": "normal",
          "risk_score": 39,
          "seller_message": "Payment complete.",
          "type": "authorized"
        },
        "paid": true,
        "payment_intent": "pi_1HUSoWCfZ37XLQD82vnE1yQT",
        "payment_method": "pm_1HUSolCfZ37XLQD8gSn0oy4x",
        "payment_method_details": {
          "card": {
            "brand": "visa",
            "checks": {
              "address_line1_check": null,
              "address_postal_code_check": null,
              "cvc_check": "pass"
            },
            "country": "US",
            "exp_month": 11,
            "exp_year": 2050,
            "fingerprint": "uaJa23vzDgA7fnSC",
            "funding": "credit",
            "installments": null,
            "last4": "4242",
            "network": "visa",
            "three_d_secure": null,
            "wallet": null
          },
          "type": "card"
        },
        "receipt_email": null,
        "receipt_number": null,
        "receipt_url": "https://pay.stripe.com/receipts/acct_1HU77uCfZ37XLQD8/ch_1HUSomCfZ37XLQD8d133buOK/rcpt_I4c233eGeSYOaN9cPvncC4AcU2Sm4s7",
        "refunded": false,
        "refunds": {},
        "review": null,
        "shipping": null,
        "source": null,
        "source_transfer": null,
        "statement_descriptor": null,
        "statement_descriptor_suffix": null,
        "status": "succeeded",
        "transfer_data": null,
        "transfer_group": null
      }
    ],
    "has_more": false,
    "object": "list",
    "total_count": 1,
    "url": "/v1/charges?payment_intent=pi_1HUSoWCfZ37XLQD82vnE1yQT"
  },
  "client_secret": "pi_1HUSoWCfZ37XLQD82vnE1yQT_secret_XXX",
  "confirmation_method": "automatic",
  "created": 1600847696,
  "currency": "jpy",
  "customer": "cus_I4c27DIUQuvAHQ",
  "description": null,
  "id": "pi_1HUSoWCfZ37XLQD82vnE1yQT",
  "invoice": null,
  "last_payment_error": null,
  "livemode": false,
  "metadata": {},
  "next_action": null,
  "object": "payment_intent",
  "on_behalf_of": null,
  "payment_method": "pm_1HUSolCfZ37XLQD8gSn0oy4x",
  "payment_method_options": {
    "card": {
      "installments": null,
      "network": null,
      "request_three_d_secure": "automatic"
    }
  },
  "payment_method_types": [
    "card"
  ],
  "receipt_email": null,
  "review": null,
  "setup_future_usage": null,
  "shipping": null,
  "source": null,
  "statement_descriptor": null,
  "statement_descriptor_suffix": null,
  "status": "succeeded",
  "transfer_data": null,
  "transfer_group": null
}
  

Комментарии:

1. оплата происходит на вашем веб-сайте или на предварительно настроенных страницах, которые предлагает stripe?

2. @Berto99 Я использую сеанс оформления заказа stripe

Ответ №1:

Предполагая, что вы поместили сведения о продукте в line_items созданный вами сеанс оформления заказа (см. Шаг руководства), тогда вам нужно узнать, как «выполнить заказ» (см. Шаг руководства), что вы можете сделать, прослушивая checkout.session.completed события.

Когда вы получаете событие, событие data будет сеансом проверки по идентификатору, и затем вы можете получить этот сеанс и указать expand[]=line_items , чтобы иметь возможность проверять line_items для сеанса.

Обновление: я изменил приведенное выше, чтобы отразить то, что line_items не включено по умолчанию. Вы должны получить сеанс и включить его в расширение.

Комментарии:

1. Я передаю price_id line_items ссылку на продукт и цену. Ни одно из них не включено в data из checkout.session.completed payment_intent.succeeded событий или

2. Простите, line_items они не прикреплены по умолчанию, их необходимо запрашивать во время извлечения с expand помощью (чтобы их не было в данных события). Я обновил свой ответ выше.