【发布时间】:2015-03-01 21:53:03
【问题描述】:
我正在将一个网站从 Google Wallet for Digital Goods 转换为 Stripe,并且我正在尝试复制旧的流程
客户进行购买并将
user_id、product_id、quantity和其他任意数据传递到 Google 电子钱包回发被发送到我的服务器,包括所有额外的数据和密钥,所以我知道这不是客户欺骗回发
我的服务器假定这意味着发生了合法购买并完成了各种处理
对于每次购买,我的网站显然需要知道
-
购买了什么产品 (并且
charge.description不能用作唯一标识符) - 客户在购买时登录了我网站的哪个用户帐户
我正在尝试集成 Checkout,但看不到
- its documentation 中似乎允许随收费一起传递任意数据的任何内容和
-
the API's documentation for the
chargeobject(webhook 将其发送回我的服务器)中没有任何内容可以传回任意数据。
使用客户对象?
客户对象似乎不是解决方案,因为 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.succeededwebhook 接收charge对象。不过,我对 Stripe 完全陌生,而且很有可能我遗漏了一些明显的东西。
标签: stripe-payments