谷歌钱包文档(用于数字商品)说:
注意:这些回调处理程序不安全。有人可以使用 Firebug 或 Chrome 开发者工具来调用其中一个函数,模拟成功或失败。您应该在服务器上确认购买。
引用中的链接用于指定回发 URL。
但既然 jwt 是由谷歌签署的——为什么需要这样做?我们可以在服务器上的页面代码隐藏中简单地检查成功处理程序的 jwt 的签名。
(如果签名还不够——回发网址也不应该足够,因为如果有人发现了这个网址——他们可能会在那里发送一个 POST 并且问题会再次出现。)
文档说明*IF*您指定了一个回发 url。因此,您可以尝试不提供并按照上面描述的方式进行处理(仍然是“服务器端”)。
假设您的测试有效,两者之间的区别:
在回发 url 的场景中,所有相关方、买家、您和 Google 都是“同步的”——如果您因任何原因无法履行,您的服务器出现问题等,那么交易失败(否生成的订单)为所有。
在没有回发 url的场景中,假设成功,事务可能有不同的状态:
希望这可以帮助...
在安全方面,还有另一个“好处”(在某些流程中可能很关键)。使用回发 url,您可以获得另一个验证步骤的订单详细信息(例如,基于 order-id)。您可以验证客户端发送/发送的订单是否“有效”(无论业务规则如何 - 例如if order-id exists then.....
),因为成功回调发生在回发之后。
例如,通过重播相同(有效)JWT(在 iat/任何过期范围内)进行模拟
卖家/开发者可能会在他们的应用程序中提出无数的流程,因此使用“回发 URL 验证流程”可以缓解可能出现的问题。
嗯……
我使用回传来交付货物(在我们的例子中是电子票)。我已经实现了钱包回发,这给了我各种参数,比如谷歌的 user_id。
我不知道如何确定用户是谁,没有这个,我无法向他们发送数字商品。有什么办法可以得到这个吗?
在其他系统上,我曾经提供进入支付按钮并通过回调出来的订单 ID。我在钱包代码示例或教程中看不到这样的输入。
谢谢保罗
注:我后来猜到了答案,测试了一下,在这里提供:如何在google wallet中获取用户信息
就像文档说的那样,所有客户端代码都可以使用各种浏览器开发工具轻松更改,因此不应该被信任。
我认为他们担心的是 javascript 可能会被操纵,以便您的服务器认为已经付款,并且用户获得了他们实际上并未支付的产品。
如果有人发现了 URL 并发布到它,他们无法控制服务器代码,因此服务器将从他们的卡中收取款项,所以这不是一个真正的问题。