5

谷歌钱包文档(用于数字商品)说:

注意:这些回调处理程序不安全。有人可以使用 Firebug 或 Chrome 开发者工具来调用其中一个函数,模拟成功或失败。您应该在服务器上确认购买。

引用中的链接用于指定回发 URL。

但既然 jwt 是由谷歌签署的——为什么需要这样做?我们可以在服务器上的页面代码隐藏中简单地检查成功处理程序的 jwt 的签名。

(如果签名还不够——回发网址也不应该足够,因为如果有人发现了这个网址——他们可能会在那里发送一个 POST 并且问题会再次出现。)

4

3 回答 3

7
  1. 回调 url 的目的是让您知道已经进行了购买
  2. 您在实际“使用”数据之前验证发布的数据,如果您的回发网址在野外“被发现”并不重要。
  3. 您告诉 Google,您能够在您的系统中成功记录上述订单,并且您可以“履行”上述订单。否则,如果由于任何原因您的终端无法记录/处理/等订单,这意味着您不会“履行它”,那么用户(买方)也必须知道。

我没有测试过这个(我使用回发网址)

文档说明*IF*您指定了一个回发 url。因此,您可以尝试不提供并按照上面描述的方式进行处理(仍然是“服务器端”)。

可能的问题

假设您的测试有效,两者之间的区别:

  • 在回发 url 的场景,所有相关方、买家、您和 Google 都是“同步的”——如果您因任何原因无法履行,您的服务器出现问题等,那么交易失败(否生成的订单)为所有

  • 在没有回发 url的场景中,假设成功,事务可能有不同的状态:

    • 谷歌:好,记录在买家的电子钱包交易列表中
    • 你的系统:可能好,也可能不好,甚至没有记录
      • 但是基于您的页面当时处理数据
      • 客户端/浏览器上的任何脚本错误,或来自客户端的任何其他可能阻止您的页面处理的原因
    • 用户/买家 - 在他/她的电子钱包交易中有订单 - 就 Google 而言“成功”

希望这可以帮助...

更新:

在安全方面,还有另一个“好处”(在某些流程中可能很关键)。使用回发 url,您可以获得另一个验证步骤的订单详细信息(例如,基于 order-id)。您可以验证客户端发送/发送的订单是否“有效”(无论业务规则如何 - 例如if order-id exists then.....),因为成功回调发生回发之后。

例如,通过重播相同(有效)JWT(在 iat/任何过期范围内)进行模拟

卖家/开发者可能会在他们的应用程序中提出无数的流程,因此使用“回发 URL 验证流程”可以缓解可能出现的问题。

嗯……

于 2013-07-17T15:34:41.567 回答
0

我使用回传来交付货物(在我们的例子中是电子票)。我已经实现了钱包回发,这给了我各种参数,比如谷歌的 user_id。

我不知道如何确定用户是谁,没有这个,我无法向他们发送数字商品。有什么办法可以得到这个吗?

在其他系统上,我曾经提供进入支付按钮并通过回调出来的订单 ID。我在钱包代码示例或教程中看不到这样的输入。

谢谢保罗

注:我后来猜到了答案,测试了一下,在这里提供:如何在google wallet中获取用户信息

于 2013-08-31T07:29:51.257 回答
-1

就像文档说的那样,所有客户端代码都可以使用各种浏览器开发工具轻松更改,因此不应该被信任。

我认为他们担心的是 javascript 可能会被操纵,以便您的服务器认为已经付款,并且用户获得了他们实际上并未支付的产品。

如果有人发现了 URL 并发布到它,他们无法控制服务器代码,因此服务器将从他们的卡中收取款项,所以这不是一个真正的问题。

于 2013-07-17T09:11:33.463 回答