【问题标题】:How do you send additional data with a Stripe charge to be returned in a webhook?如何发送带有 Stripe 费用的额外数据以在 webhook 中返回?
【发布时间】:2015-03-01 21:53:03
【问题描述】:

我正在将一个网站从 Google Wallet for Digital Goods 转换为 Stripe,并且我正在尝试复制旧的流程

  1. 客户进行购买并将user_idproduct_idquantity 和其他任意数据传递到 Google 电子钱包

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

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

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

  • 购买了什么产品 (并且charge.description 不能用作唯一标识符)
  • 客户在购买时登录了我网站的哪个用户帐户

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

使用客户对象?

客户对象似乎不是解决方案,因为 API 文档说“客户对象允许您执行经常性费用并跟踪与同一客户相关联的多项费用”,这两者都不适用于我的情况。

在本地 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 回调在“结帐过程完成时”被调用,而不仅仅是为了成功收费。 token.id 可以与其他数据一起存储为“待购买”,一旦charge.succeeded 事件触发 webhook,就会得到验证,但这可能会引入竞争条件,听起来像地狱一样令人费解,token.id 一开始就没有与 webhook 一起发回。

这似乎是支付处理的一个非常普遍的要求,但我完全不知道如何用 Stripe 实现它。谁能给点建议?

【问题讨论】:

  • 您无需等待charge.succeeded 知道收费成功,一旦您创建收费并取回收费对象,您知道收费成功并且您可以在那时将这些详细信息存储在您的数据库中。
  • Checkout 的文档没有提到在成功收费后获取charge 对象的任何方法。 似乎您在 Javascript 回调中获得了token 对象,并且必须等待charge.succeeded webhook 接收charge 对象。不过,我对 Stripe 完全陌生,而且很有可能我遗漏了一些明显的东西。

标签: stripe-payments


【解决方案1】:

我认为您对 Stripe Checkout 的工作方式感到困惑。获取 Stripe 令牌只是处理付款过程的第一步。使用 Stripe CheckoutStripe.js 时,您会得到一个 Stripe 令牌,然后您需要将其发送到您的服务器,然后您可以使用 Create Charge API 创建费用并接收付款。

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

【讨论】:

  • 但是发送token到我们的服务器调用create charge api有什么用呢?我的意思是为什么我们不能在我的最后打电话给create charge api。你能帮我理解Stripe使用的概念吗?
  • 这是出于安全原因。否则,任何人都可以创建 Charge 客户端并向您的其他卡收费。他们也可以尝试为一件 T 恤支付 0.50 美元而不是 19.99 美元,因为这一切都发生在 JS 的客户端。为了避免所有这些问题,Stripe 需要一个服务器来创建 Charge
【解决方案2】:

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

<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”网址中接收值。

【讨论】:

  • 隐藏字段未进入服务器端 POST
猜你喜欢
  • 2019-01-17
  • 1970-01-01
  • 2017-09-27
  • 2020-06-26
  • 2016-11-09
  • 1970-01-01
  • 2021-09-30
  • 2015-07-19
  • 2020-10-24
相关资源
最近更新 更多