Stripe API checkoutSession 创建与元数据字段不一致

问题描述 投票:0回答:1

使用Stripe API,我意识到checkoutSession创建不一致。

回想一下:您可以在服务器上创建一个 checkoutSession,成功后,您将在 Stripe 控制台上获得

payment
信息。

还要记住:您可以使用两种不同的

modes
创建结账会话:a)
mode = payment
mode = subscription

现在的问题是:

  • 如果我使用

    mode = 'payment'
    创建 checkoutSession,那么我会在
    metadata
    元数据中找到
    payment
    字段。 (即在控制台中
    Payments: Metadata
    下清晰可见)

  • 如果我使用

    mode = 'subscription'
    创建 checkoutSession,那么我在
    metadata
    元数据中找不到
    payment
    字段。 (但元数据可以在
    Subscriptions
    控制台下找到。

问题:如何确保

Payments
控制台的元数据也显示元数据(首先创建 checkoutSession 时给出的元数据)??

const checkoutSession: checkout_sessions = {
      id: checkoutSessionId,
      mode: 'subscription',
      customer: customerId,
      client_reference_id: referenceId,
      currency: currency,
      created: Date.now() / 1000,
      line_items: line_items,
      success_url: session.success_url,
      metadata: {
        checkoutSessionId: checkoutSessionId,
        // bunch of other metadata-properties
      },      
      billing_address_collection: 'auto',
};

const returnCheckoutSession = await customer.checkout_sessions.create(checkoutSession);

上面的代码清楚地说明了

mode = 'subscription'
,并且还包括元数据属性。但是成功的
payment
的结果元数据字段是
null
?我怎样才能改变它?

(我不关心是否可以在订阅面板下找到元数据。我只感兴趣将它们放入

Payments
控制台的元数据中。即相同的位置,它们最终也以
mode = 'payment'
......

stripe-payments metadata
1个回答
0
投票

Stripe API 中的元数据是每个 API 资源,并且在几乎所有情况下都不会自动复制到其他 API 资源。有一些例外,例如 Charge 在创建时继承其父 PaymentIntent 的元数据,但这种情况很少见。

您共享的代码在

Checkout Session
API 资源上设置 metadata。预计它不会被复制到 API 中生成的 PaymentIntent 或 Charge 或 Subscription。您提到您在控制台中看到它,我认为这意味着仪表板,但这可能指的是结帐本身。

相反,您应该做的是显式强制底层对象上的元数据。对于付款,您希望使用

payment_intent_data[metadata]
参数;对于订阅,您希望使用
subscription_data[metadata]
参数

了解订阅模式也很重要,它将在 Subscription API 资源上设置元数据。这不会神奇地被发票、PaymentIntent 或费用继承。如果您想要的话,您必须在创建每个 Invoice 或 PaymentIntent 后编写一些代码/逻辑来自己同步。

© www.soinside.com 2019 - 2024. All rights reserved.