【问题标题】:Stripe Webhook doesnt capture product data/meta dataStripe Webhook 不捕获产品数据/元数据
【发布时间】:2022-12-28 19:27:38
【问题描述】:

我想使用条纹支付链接系统,支付方式可以是卡/钱包

我不想使用结帐按钮系统,因为付款不是动态的

付款成功后(自动订阅或手动结帐)我需要将激活码发送到用户电子邮件。明年当费用自动从卡中扣除时,我需要再次生成激活密钥并在下一年发送相同的激活密钥。

我看到 Stripe payment webhooks 中有很多事件,我用过充电.成功事件侦听器,它确实向我发送了对象(粘贴在下面)。

我这里有一个问题。如果我依赖这个 charge.succeeded 对象,我找不到关于购买的产品的信息。我的系统里有很多产品

回复有用户提供的电子邮件,但我无法在充电.成功目的。我在支付链接页面中提供了元数据信息,如下所示。我还提供了产品中的元数据以及每个定价中的元数据

我使用此链接 - https://buy.stripe.com/test_28o3cn6hC5bgdoIcMM 测试卡号:4242 4242 4242 4242 任何日期和 CVV 号码都可以。

Webhook 响应在此处捕获 - https://docs.google.com/spreadsheets/d/1RjnFnjHvs9ca8tIPoRiNHFUph_npm5pVK2S15wVllzI/edit?usp=sharing

任何帮助是极大的赞赏

{
  "id": "evt_1KWzCbHpIo9Nhh5aYEv7XlY8",
  "object": "event",
  "api_version": "2017-12-14",
  "created": 1645777861,
  "data": {
    "object": {
      "id": "ch_1KWzCaHpIo9Nhh5atK09dpaO",
      "object": "charge",
      "amount": 100,
      "amount_captured": 100,
      "amount_refunded": 0,
      "application": null,
      "application_fee": null,
      "application_fee_amount": null,
      "balance_transaction": "txn_1KWzCaHpIo9Nhh5anEebLs4X",
      "billing_details": {
        "address": {
          "city": null,
          "country": "IN",
          "line1": null,
          "line2": null,
          "postal_code": null,
          "state": null
        },
        "email": "te...@email.com",
        "name": "CARDNAME",
        "phone": null
      },
      "calculated_statement_descriptor": "XXXXXXXXXXX",
      "captured": true,
      "created": 1645777860,
      "currency": "inr",
      "customer": "cus_LDQ2DBhL2VkPOH",
      "description": "Subscription creation",
      "destination": null,
      "dispute": null,
      "disputed": false,
      "failure_code": null,
      "failure_message": null,
      "fraud_details": {
      },
      "invoice": "in_1KWzCYHpIo9Nhh5ammBkFvU1",
      "livemode": false,
      "metadata": {
      },
      "on_behalf_of": null,
      "order": null,
      "outcome": {
        "network_status": "approved_by_network",
        "reason": null,
        "risk_level": "normal",
        "risk_score": 58,
        "seller_message": "Payment complete.",
        "type": "authorized"
      },
      "paid": true,
      "payment_intent": "pi_1KWzCYHpIo9Nhh5aj6Xgl3tS",
      "payment_method": "pm_1KWzCXHpIo9Nhh5aADMKyWPc",
      "payment_method_details": {
        "card": {
          "brand": "visa",
          "checks": {
            "address_line1_check": null,
            "address_postal_code_check": null,
            "cvc_check": "pass"
          },
          "country": "US",
          "exp_month": 2,
          "exp_year": 2022,
          "fingerprint": "MxtsbEBU2BmJbOn4",
          "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_1BhpF1HpIo9Nhh5a/ch_1KWzCaHpIo9Nhh5atK09dpaO/rcpt_LDQ2FDPK6fwsEyBOISiDCItSv8JeNbl",
      "refunded": false,
      "refunds": {
        "object": "list",
        "data": [

        ],
        "has_more": false,
        "total_count": 0,
        "url": "/v1/charges/ch_1KWzCaHpIo9Nhh5atK09dpaO/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
    }
  },
  "livemode": false,
  "pending_webhooks": 1,
  "request": {
    "id": "req_QzrolSFU0OA7D7",
    "idempotency_key": "228c5670-85ea-4047-9f9f-9d1e519ffc2c"
  },
  "type": "charge.succeeded"
}

【问题讨论】:

    标签: stripe-payments metadata webhooks


    【解决方案1】:

    当您的客户打开付款链接时,将在后台生成结帐会话。因此,您应该监听 checkout.session.completed 事件,并从 Checkout Session 对象的 line_items 属性中获取产品数据。

    【讨论】:

    • checkout.session.completed 响应是否也会在订阅期间自动向卡收费的下一年发送?
    • 当订阅自动从卡中扣款时会触发哪个事件?
    • 您可以收听 invoice.paid (stripe.com/docs/api/events/types#event_types-invoice.paid) 事件。他们将在订阅续订成功后被解雇。
    【解决方案2】:

    在 Stripe 中使用 webhook 解决方案时,我遇到了类似的问题。虽然我在产品中定义了元数据,但它没有发货,即metadata在 JSON 中是空的。

    在我的例子中,解决方案是改用价格的元数据(在产品中定义)。为此,只需单击 Stripe 网站上产品页面上的价格部分...

    ...并在价格页面上定义元数据。

    还有另一篇有趣的帖子 https://stackoverflow.com/a/69117489/10849985 显示是否提供元数据取决于事件,即链接到 webhook 的一些事件包含它,其他事件则不包含。

    【讨论】:

      【解决方案3】:

      对我来说,问题是我将价格对象和产品对象合并在一起,这会用价格对象的空元数据覆盖产品上的元数据。

      为了解决这个问题,我只是确保元数据正在接收来自产品对象的值

          const product = await stripe.products.list();
          const price = await stripe.prices.list();
          const productData = product.data.map((productData, index) => {
            return { 
              ...productData, 
              ...price.data[index], 
              quantity: 1, 
              addedToCart: false,
              metadata: productData.metadata };
          });
      

      【讨论】:

        猜你喜欢
        • 2021-01-09
        • 2020-12-12
        • 2021-12-05
        • 2021-03-28
        • 1970-01-01
        • 2020-02-22
        • 2021-10-04
        • 2017-11-01
        • 2023-04-07
        相关资源
        最近更新 更多