为什么使用回发网址确认购买?

时间:2013-07-17 09:04:31

标签: android-pay

Google Wallet docs(对于数字商品)说:

  

注意:这些回调处理程序不安全。有人可以使用   Firebug或Chrome开发者工具调用其中一个功能,   嘲笑成功或失败。 您应该确认购买on the server

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

但由于jwt是由Google签署的 - 为什么需要?我们可以在服务器的页面代码隐藏中检查成功处理程序的jwt的签名。

(如果签名不够 - 在回发网址上也不够,因为如果有人发现了网址 - 他们可能会在那里发送一个POST并且问题会返回。)

3 个答案:

答案 0 :(得分:7)

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

    文档说明 *IF* you specify a postback url 。因此,您可以尝试不提供一个并按上述方式处理(仍然是“服务器端”)。

    可能的问题

    假设您的测试有效,两者之间存在差异:

    • 回发网址的情况下,所有相关方,买方,您和Google都“同步” - 如果因任何原因无法满足,请遇到服务器问题在您的结尾等,然后交易失败(没有生成订单)所有

    • 没有回发网址的情况下,假设成功,事务可能具有不同的状态:

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

    希望这会有所帮助......

    更新

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

    e.g。通过重播相同(有效)JWT (在iat /任何到期范围内)进行模拟

    卖家/开发人员可能会在他们的应用程序中出现无数的流量,因此使用“回发网址验证流程”可以减轻可能出现的问题。

    H个....

答案 1 :(得分:0)

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

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

在其他系统上,我曾经提供了一个订单ID,该订单ID进入了付费按钮并通过回调传出。我在钱包代码示例或教程中没有看到这样的输入。

保罗先生

注意:我后来猜到答案,测试并在此提供:how to get user information in google wallet

答案 2 :(得分:-1)

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

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

如果有人发现了该网址并向其发帖,则他们无法控制服务器代码,因此服务器将从其卡中收取付款,因此这不是真正的问题。