如何发送带有Stripe费用的附加数据以在webhook中返回?

时间:2015-01-04 00:53:13

标签: stripe-payments

我将网站从Google电子钱包转换为数字商品,并且我试图复制旧流程

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

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

  3. 我的服务器认为这意味着合法购买并完成了各种处理

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

    • 购买的产品 (并且charge.description无法用作唯一标识符)
    • 购买时,我的哪个网站的用户帐户已登录

    我试图整合Checkout并且没有看到

    使用客户对象?

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

    在本地Javascript回调中处理它?<​​/ h2>

    我可以做这样的事情,

    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示例说明{Check事程序已完成&#34;会调用token回调&#34;而不仅仅是成功收费。 token.id可以与其他数据一起存储为待定购买&#39;一旦charge.succeeded事件触发了一个webhook,就会被验证,但这可能会引入竞争条件,听起来很糟糕,并且token.id 不会在第一次发送回webhook的地方。

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

2 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:4)

您可以向包含条带脚本标记的表单添加隐藏的输入字段。

<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'网址中收到该值。