我将网站从Google电子钱包转换为数字商品,并且我试图复制旧流程
客户进行购买,user_id
,product_id
,quantity
和其他任意数据都会传递到Google电子钱包
回发邮件发送到我的服务器,包括所有额外数据和密钥,所以我知道它不是欺骗回发的客户
我的服务器认为这意味着合法购买并完成了各种处理
对于每次购买,我的网站显然需要知道
charge.description
无法用作唯一标识符) 我试图整合Checkout并且没有看到
charge
object(webhook发送回我的服务器)中没有任何内容传回任意数据。客户对象似乎不是解决方案,因为API文档说"客户对象允许您执行经常性费用并跟踪与同一客户相关的多项费用"适用于我的情况。
我可以做这样的事情,
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事程序已完成"会调用token
回调"而不仅仅是成功收费。 token.id
可以与其他数据一起存储为待定购买'一旦charge.succeeded
事件触发了一个webhook,就会被验证,但这可能会引入竞争条件,听起来很糟糕,并且token.id
不会在第一次发送回webhook的地方。
这似乎是支付处理的一个非常普遍的要求,但我完全不知道如何使用Stripe实现这一目标。有人可以建议吗?
答案 0 :(得分:4)
我认为您对Stripe Checkout的工作原理感到困惑。获取Stripe令牌只是处理付款过程的第一步。使用Stripe Checkout或Stripe.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'网址中收到该值。