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

isp*_*iro 5 android-pay

Google电子钱包文档(针对数字商品)说:

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

引用中的链接是指定回发URL.

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

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

EdS*_*dSF 7

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

我没有测试过这个(我使用的是postback url)

文档声明*IF*您指定了一个回发网址.因此,您可以尝试不提供一个并按上述方式处理(仍然是"服务器端").

可能的问题

假设您的测试工作,两者之间的差异:

  • 使用回发网址的情况下,所有相关方,买方,您和Google都"同步" - 如果由于某种原因无法履行,在您的服务器上出现问题,等等,则交易失败(否)订单生成)为所有人.

  • 没有回发网址的情况,假设成功,交易可能有不同的状态:

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

希望这可以帮助...

更新:

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

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

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

心连心....


Cur*_*aul -1

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

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

如果有人发现该 URL 并发布到该 URL,他们无法控制服务器代码,因此服务器将从他们的卡中收取费用,因此这并不是真正的问题。