Shopify:如何处理卸载,然后立即重新安装?

Lou*_* B. 10 shopify

我最近遇到过用户卸载我的Shopify应用程序并立即重新安装它的情况.这导致了一个问题,因为我将所有用户都存储在数据库表中.

登录/安装的工作原理如下:

  1. 用户告诉我他的商店网址
  2. 我将用户转发到example.myshopify.com/admin/oauth/authorize,其中访问权限授予了我的应用
  3. 我检查该商店URL是否已存储在我的本地用户数据库中
    • 如果不是:我请求永久访问令牌并将用户转发到计划选择页面
    • 如果是:我从用户数据库获取存储的永久访问令牌,并将用户登录到我的应用程序中

卸载:

  1. 用户在他的Shopify后端卸载我的应用程序
  2. Shopify将webhook发送到我的应用程序
  3. 我从用户数据库中删除该用户的数据

问题是webhooks有时会延迟.如果用户卸载并立即重新安装,我的应用程序会认为安装是登录尝试,并将使用存储在用户数据库中的现在无效的访问令牌.

我想我可以检查授权页面的重定向是否包含临时访问令牌,如果是,它将是一个新安装,但即使已经安装了应用程序,似乎也会返回访问令牌.

所以我的问题是:如何才能优雅地处理即时重新安装?当然有一些我忽略的东西,Shopify API中不会出现如此巨大的"逻辑错误"?

小智 15

最近我的应用程序也遇到了这个问题.Webhooks在过去的两个月里才开始被推迟,如果大多数应用程序现在没有遭受这个回归错误,我会感到惊讶.

我处理它的方式是 - 当用户被重定向到应用程序并且旧的数据库对象/令牌仍然存在于数据库中时,尝试使用令牌调用Shopify API的虚拟API调用(例如获取商店详细信息)你有.如果您收到403 Unauthorized响应,则会使用户会话无效并刷新存储的令牌.

另一个问题是,在原始卸载webhook发生一两分钟后,执行相同的过程 - 检查403响应.如果你没有获得403,那么你就知道webhook已经过时了,不应该采取行动,因为如果你得到200 OK,那就意味着你的令牌很好而且应用程序仍在安装.

这有点令人费解,它为我的应用程序添加了相当多的代码,但这是我能在短时间内想到的唯一一件事 - 因为商家会经常快速卸载/重新安装.

  • 对于未经授权的响应,正确的代码是 401。https://help.shopify.com/api/getting-started/response-status-codes (3认同)