您如何发送带有 Stripe 费用的额外数据以在 webhook 中返回?

How do you send additional data with a Stripe charge to be returned in a webhook?

我正在将一个网站从 Google 数字商品钱包转移到 Stripe,我正在尝试复制

的旧流程
  1. 客户进行购买,user_idproduct_idquantity和其他任意数据被传递到Google钱包

  2. 一个回发被发送到我的服务器,包括所有额外的数据和一个密钥,所以我知道这不是客户欺骗回发

  3. 我的服务器假定这意味着合法购买已经发生并完成各种处理

对于每次购买,我的网站显然需要知道

我正在尝试集成 Checkout,但没有看到

使用客户对象?

客户对象似乎不是解决方案,因为 API 文档说 "Customer objects allow you to perform recurring charges and track multiple charges that are associated with the same customer",两者都不适用于我的情况。

在本地 Javascript 回调中处理它?

我可以做这样的事情,

var handler = StripeCheckout.configure({
    token: function(token) {
        var user_id = 123;
        var product_id = 456;
        var quantity = 2;
        var arbitrary = 'data';
        // fire off a POST call to http://example.com/hey_look_a_charge with the above data
    }
});

但 Checkout 示例表示 token 回调被调用 "when the Checkout process is complete",而不仅仅是为了成功收费。 token.id 可以与其他数据一起存储为 'pending purchase',一旦 charge.succeeded 事件触发 webhook 就会得到验证,但这可能会引入竞争条件,听起来非常复杂,并且token.id 一开始就没有随 webhook 一起发回。

这似乎是支付处理的一个非常普遍的要求,但我完全不知道如何使用 Stripe 实际实现它。有人可以建议吗?

我认为您对 Stripe Checkout 的工作原理感到困惑。获取 Stripe 令牌只是处理付款过程的第一步。使用 Stripe Checkout or Stripe.js you get a Stripe token back that you then need to send to your server where you then use the Create Charge API 创建费用并接收付款时。

因此,在您的情况下,您将能够在服务器端创建收费,并且在进行 API 调用后,您无需等待 webhook 中的 charge.succeeded 事件。您会收到一个指示成功的收费对象或一个指示收费失败的错误。然后您就可以在那个时候更新您的数据库。

您可以在包含 stripe 脚本标签的表单中添加一个隐藏的输入字段。

<form action="/your-server-side-code" method="POST">
  <input type="hidden" name="my_data" value="my_data_value">
  <script
    src="https://checkout.stripe.com/checkout.js" class="stripe-button"
    data-key="pk_test_d2luBCpkXXuIVPKS7hBN43jR"
    data-amount="999"
    data-name="Demo Site"
    data-description="Widget"
    data-image="https://stripe.com/img/documentation/checkout/marketplace.png"
    data-locale="auto">
  </script>
</form>

那么你可以在'/your-server-side-code'url.

中收到值