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

2024-02-08

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

登录/安装工作如下:

  1. 用户告诉我他的商店网址
  2. 我将用户转发至 example.myshopify.com/admin/oauth/authorize 授予访问权限的位置 到我的应用程序
  3. I check if that shop URL is already stored in my local user DB
    • 如果不是:我请求永久访问令牌并转发 用户进入计划选择页面
    • 如果是:我从用户数据库获取存储的永久访问令牌并将用户登录到我的应用程序

卸载:

  1. 用户在他的 Shopify 后端卸载我的应用程序
  2. Shopify 向我的应用程序发送网络钩子
  3. 我从用户数据库中删除该用户的数据

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

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

所以我的问题是:如何优雅地处理即时重新安装?当然,我忽略了一些事情,Shopify API 中不可能存在如此巨大的“逻辑错误”?


最近我的应用程序也遇到了这个问题。 Webhooks 在过去 2 个月才开始出现延迟,如果大多数应用程序现在没有遭受此回归错误的困扰,我会感到惊讶。

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

另一个问题是,一两分钟后,当原始卸载 Webhook 触发时,执行相同的过程 - 检查 403 响应。如果你DON'T得到 403,那么您就知道 webhook 是旧的,不应该对其进行操作,因为如果您得到 200 OK,则意味着您的令牌是好的并且该应用程序仍然安装。

这有点复杂,它在我的应用程序中添加了相当多的代码,但这是我在短时间内能想到的唯一事情 - 因为商家确实经常快速卸载/重新安装。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Shopify:如何处理卸载然后立即重新安装? 的相关文章

  • shopify cli 的命令

    shopify theme 多语言国际化开发 shopify theme 跨境电商开发 liquid 本地编辑shopify主题的方式一 shopify cli 的命令 使用shopify help
  • 今天给一个shopify网站修改了一下

    今天的客户是浙江的 他们没有设计稿 给了我一个需要模仿的网站 要求是把自己的商品详情页搞成和对标网站一样的 这个事情两天给搞定了 他们很满意 对标网站是一个卖狗粮的 他们是卖玩具的 哈哈 但是因为没有设计稿 修修补补了很多地方 还要求在页面
  • 使用 JavaScript 导入节点模块

    对于这个简单的问题 我深表歉意 但我对 Web 开发和 JavaScript 还很陌生 我想导入使用 npm 安装的软件包 特别是按照此处的指南进行 shopify buy https shopify github io js buy sd
  • 单击产品标签时标签计数会自动更改

    我正在使用 Shopify 我在集合页面中 我获取所有带有标签计数的过滤器 例如 All Products Apple 4 Banana 2 Orange 1 Mango 8 现在 当我单击任何标签 例如我单击香蕉 时 它将显示香蕉产品 现
  • Shopify 中的内容安全违规

    我正在使用 Shopify 并向不同的服务器发出 ajax get 请求 我刚刚实现了它 所以我正在控制台上测试它 请求正在通过 我得到了我想要的响应 但我也收到以下消息 仅限报告 拒绝连接到 https myurl com ApiClie
  • Oauth 错误 invalid_request: 未找到授权代码或已使用授权代码“shopify。当我使用代码点击 api 时显示这样的错误

    client id client secret code https test app myshopify com admin oauth access token 当我点击此端点的 api 来获取脱机访问令牌时 显示类似 未找到授权代码或
  • Shopify API:如何向客户发送有关正在发货的产品的电子邮件?

    我正在尝试通过更新订单履行情况向客户发送一封包含订单跟踪信息的电子邮件 但该电子邮件未发送出去 我可以检索履行情况并添加跟踪代码 它可以正确保存 但状态不会更新 fulfillment id 3252574519475 shopify or
  • JS Cookie 隐藏/显示 div

    尝试使用 jQuery cookie 隐藏 显示框JS 饼干 https github com carhartl jquery cookie 但我不知何故无法让它发挥作用 该框根本不会显示 我正在使用 Shopify pop up disp
  • Shopify 结账中的脚本标签

    我正在考虑为 Shopify 开发一款应用程序 该应用程序将为商店的结帐页面添加功能 如果用户不必将代码复制并粘贴到文件中 那将是理想的选择 因此我正在考虑使用 ScriptTag API http api shopify com scri
  • Shopify option_selection.js - 如何修改?

    我遇到了一点麻烦 我正在重新设计我的商店 并尝试改变变体下拉菜单在前端的显示方式 据我所知 option selection js 是一个从 Shopifys 服务器托管和加载的全局资产 它改变了我的产品选项在我的主题中的显示方式 目前 它
  • 通过 Shopify API 获取产品列表时,分页在服务器端如何工作?

    场景 商店有1000种产品 需要全部下载 产品请求每次调用最多 250 个产品 显然 API 可能会也可能不会返回所请求的 限制 例如 根据我的观察 使用 limit 250 的调用可能会返回少于 250 个项目 因此 要获取 1000 个
  • 在 Shopify 应用程序的 Django HttpResponse 对象中设置 Content-Type

    我正在使用 Django 开发 Shopify 应用程序 该应用程序托管在带有 nginx 和 Gunicorn 的 VPS 上 我正在尝试将 HttpResponse 对象的 Content Type 更改为application liq
  • 我的应用程序如何修改商店的模板文件

    安装应用程序时 我需要将液体标记注入商店的主题模板 我知道有 ScriptTags 但它们加载脚本 我知道脚本可以更改页面的 DOM 但我需要将我的液体安装到产品详细信息页面 是否可以 我会将您的 Liquid 添加为新的片段资产 然后 可
  • Shopify 购物车更改事件 - javascript

    当 Shopify 购物车发生更改时是否会触发一个事件 我可以每隔 x 秒刷新一次购物车 看看是否有什么变化 但基于事件的方法总是更好 虽然没有一站式 购物 呵呵 的方法 但这是可以做到的 在 Shopify 中 商品可以通过常规 HTML
  • 用于制作自定义支付网关的 Shopify 插件

    我想在shopify中制作自定义支付网关 以便哪种编程语言适合制作插件 并给出一些如何继续进行的提示 为了制作支付网关插件 我们必须使用公共应用程序还是私人应用程序 由于 Shopify 应用程序通过 REST 集成 因此您熟悉的任何应用程
  • 如何将外部 JavaScript 与 Shopify 网站结合起来

    我已经使用 Pingdom 测试了我的网站 并建议结合外部 javascript 但我不知道如何使用 shopify 网站来做到这一点 为 Shopify 主题添加外部脚本文件非常简单 您只需将脚本文件上传到主题文件的 asset 文件夹中
  • Web API 2 返回 OK 响应但继续在后台处理

    我已经为 shopify 创建了一个 mvc web api 2 webhook public class ShopifyController ApiController PUT api Afilliate SaveOrder Respon
  • 使用 cURL 访问 API 可以正常工作,但使用 Fetch API 则不行 [重复]

    这个问题在这里已经有答案了 我知道这个问题已经得到解决lotSO 上的次数 但所有答案大多都是 向服务器添加某个标头 在这种情况下 API Shopify 工作得非常好 并且可以通过curl轻松访问 我已经使用 Axios 库和 Fetch
  • 如何使用Shopify API更改订单的付款状态?

    我正在为我自己的 Shopify 商店构建 iOS 应用程序 我创建了一个私有应用程序 并使用 API 密钥和密码来调用以下格式的 API https apikey password hostname admin resource json
  • 为什么将域连接到“Shopify”需要 CNAME 和 A 记录?

    为什么将域连接到 Shopify 需要CNAME and ARecord ref https help shopify com en manual domains add a domain using existing domains co

随机推荐

  • MySql查询缓存中的“query_cache_wlock_invalidate”有什么用?

    在添加MySql Query Cache的概念时 我们有一个名为 query cache wlock invalidate 的参数 我想知道这个参数有什么用 Thanks 当您在查询缓存中进行查询时 通常会返回缓存的内容 即使该查询使用另一
  • 无法提交 Hibernate 事务;嵌套异常是 org.hibernate.Transaction 异常:JDBC 提交失败

    我在应用程序中使用 Windows Azure SQL Server 当我连接到应用程序时 它显示以下错误 org springframework transaction TransactionSystemException Could n
  • UIImageView内容模式

    蓝线是图像视图的边界 UIImageView s contentMode is UIViewContentModeScaleAspectFit 我想保持原始图片的比例 怎样才能让图片的左边缘在UIImageView的左边缘 但不喜欢UIVi
  • Android 上的 PhoneGap 不会加载外部脚本

    我正在制作一个简单的应用程序来加载谷歌地图 但问题是每次我加载这个 它无法在我的 Android 模拟器上运行 而在桌面上则可以正常运行 如何让 Phonegap 或 Android 允许外部脚本工作 加载 更新 我总是收到此错误 应用程序
  • 我无法在 Android 真实手机上获取位置

    public class LocationService extends Service private Handler mHandler new Handler private Timer mTimer null private int
  • 有 typeid 可供参考吗?

    我正在寻找一种获取类型名称的方法 类似于typeid但仅供参考 根据这一页 http en cppreference com w cpp language typeid typeid删除引用 如果 type 是引用类型 则结果引用引用的类型
  • 在 C# 中生成运行哈希(或校验和)?

    Preface 我正在执行具有验证提交阶段的数据导入 这个想法是 第一阶段允许从各种来源获取数据 然后在数据库上运行各种插入 更新 验证操作 提交被回滚 但会生成 验证哈希 校验和 提交阶段是相同的 但是 如果 验证哈希 校验和 相同 则将
  • 使用 tfds.load() 无法访问 CelebA 数据集

    我正在尝试在深度学习项目中使用 CelebA 数据集 我有来自 Kaggle 的压缩文件夹 我想解压缩 然后将图像拆分为训练 测试和验证 但后来发现这在我的设备上是不可能的不那么强大 system 因此 为了避免浪费时间 我想使用 Tens
  • 为什么安装opencv后缺少cv2.so?

    今天我将opencv 2 4 4安装到Ubuntu 12 10 但是 import cv2 不起作用 root python Python 2 7 3 default Sep 26 2012 21 53 58 GCC 4 7 2 on li
  • Hello-jni 示例在 Android Studio 2.0 预览版中不起作用

    我正在尝试实施hello jni sample https github com googlesamples android ndk tree master hello jni进入我的项目 我有Gradle2 8 和 com android
  • 切换按钮折叠在 Bootstrap 导航栏中不起作用

    当导航栏折叠时 我的切换按钮不起作用 我已经检查了数据目标几次 看起来没问题 这是我的代码 div class navbar navbar fixed top navbar inverse div class container div d
  • REST API:请求正文为 JSON 或纯 POST 数据?

    我目前正在构建一个 REST API 当前所有 GET 方法都使用 JSON 作为响应格式 POST 和 PUT 操作的最佳实践是什么 在请求正文中使用 JSON 还是纯 POST 我找不到任何关于此事的信息 例如 我看到 Twitter
  • 使用 appcfg.py 时出现意外的关键字参数“context”

    我尝试通过 appcfg py 更新 Google App Engine 上的项目 C gt C Program Files x86 Google google appengine appcfg py update c secondApp
  • 单击时按钮周围出现不需要的轮廓或边框

    我的网站上有一个样式按钮 但是当我单击它时 它会创建一个不需要的边框或轮廓 我不知道是哪个 我怎样才能删除那个边框 以下是与该按钮相关的所有代码 button border hidden cursor pointer outline non
  • UIGraphicsGetImageFromCurrentImageContext() - 内存泄漏

    我正在打开相机UIImagePickerControllerSourceTypeCamera和一个习惯cameraOverlayView这样我就可以拍摄多张照片 而无需 使用照片 步骤 这很好用 但是保存照片功能存在内存泄漏 通过大量的调试
  • 建设 DAL。使用 EDM(来自数据库)

    我必须开发一个在 Windows wpf 中工作的 lob 应用程序 但应该以两种方式部署 使用本地数据库 同一台计算机 具有远程数据库 在同一网络中 我将使用从数据库生成的实体数据模型 dbcontext EF 4 0 VS2012 sq
  • NSURLConnection 返回错误而不是 401 响应

    我有一个 Web API 对于特定请求 如果一切正常 则返回状态代码 200 如果用户未根据授权令牌登录 则返回 401 如果响应状态为 200 则一切正常 但如果响应状态为 401 则似乎无法正常工作 返回代码为 1012 的连接错误 而
  • 使用指向非常量指针和指向相同地址的常量参数的指针的函数调用

    我想编写一个函数 输入一个数据数组并使用指针输出另一个数据数组 我想知道如果两者都结果是什么src and dst指向相同的地址 因为我知道编译器可以针对 const 进行优化 这是未定义的行为吗 我标记了 C 和 C 因为我不确定它们之间
  • 为什么 ProcessPoolExecutor 一直运行

    我尝试使用Python进程池执行器要计算一些 FFT 并行 请参见以下代码 import concurrent futures import numpy as np from scipy fft import fft def fuc sig
  • Shopify:如何处理卸载然后立即重新安装?

    我最近遇到过这样的情况 用户卸载了我的 Shopify 应用程序并立即重新安装 这导致了一个问题 因为我将所有用户存储在数据库表中 登录 安装工作如下 用户告诉我他的商店网址 我将用户转发至 example myshopify com ad