早期实现方案

  1. 方案实现

    1. 通过微信的appSecret获取小程序accessToken并缓存
    2. 微信小程序上很多操作都需要使用accessToken,比如用户授权手机号,当然也包括获取小程序码
    3. 通过微信提供的api获取到对应的小程序码,由于http接口直接返回的是图片本身,所以考虑将图片上传七牛服务器并获取图片链接,最后使用图片的链接来展示或保存小程序码
  2. 方案优点
    1. 由于上传了小程序码,对于一些跳转固定页面和参数的码可以将图片链接存到数据库,以供用户下次分享使用,无需重复获取
  3. 存在的问题
    1. 稳定性很差,获取小程序码的失败率比较高,甚至会出现一个时间段内完全获取不到码的情况
    2. 接口效率不好,由于每次都会存在图片上传,而且上传本身又比较耗时,导致服务器压力巨大且频繁出现慢接口,可能会影响到项目中的其他服务

改造后方案

  1. 方案实现

    1. 获取小程序码后不再上传七牛,直接通过图片流的方式返回给前端
  2. 方案优点
    1. 取消了图片的上传操作,接口效率大幅提升,提高了小程序码的获取成功率,也减轻了服务的压力
  3. 存在的问题
    1. 依旧存在小程序码获取失败的情况
  4. 问题排查
    • 经排查日志发现是accessToken失效导致,缓存的accessToken失效时间远比微信规定的失效时间短,那究竟又是什么情况会导致accessToken失效呢?经讨论和实验发现以下三点:

      1. 我们微信的appSecret授权给第三方网站使用(比如阿拉丁),他们也有获取小程序码的服务,运营可以通过阿拉丁获取小程序码,这就会导致阿拉丁使用我们的appSecret获取accessToken导致我们缓存中的accessToken失效。
      2. 后端缓存中的accessToken存入和获取的逻辑存在缺陷,每当从缓存读取accessToken时,若缓存不命中,则通过微信api获取新的accessToken然后再存入缓存,这个逻辑容易导致缓存穿透,即当多个请求都没有命中缓存时,只有一个线程能通过微信api拿到新的accessToken,其他线程都拿不到。
      3. 当一个accessToken存在时间比较长时,手动调用微信api获取小程序码,会看到微信的api也会存在概率获取不到码的情况,但是一个全新生成的accessToken则不会有这种情况,至少在10分钟之内非常稳定。

最终的方案

  1. 方案实现

    1. 通知运营不要再使用阿拉丁的生成小程序码的功能,若有这方面需求可以找技术帮忙获取。
    2. 缓存中的accessToken有效时间缩短至5分钟,保证每次使用的accessToken都能稳定获取小程序码。
    3. 修改accessToken的获取机制,由定时器来获取accessToken并更新缓存,定时器每4分钟执行一次,以确保每个请求都能命中缓存,若定时器出现异常,则回退之前的逻辑(请求没有命中缓存,通过微信api重新获取accessToken)。
  2. 最终效果
    这一个方案上线后,线上再也没有出现小程序码没有获取成功的情况,观察日志也没再出现获取失败的情况,目前已经两周保持100%成功率了。

微信小程序码获取-从频繁失败到成功率100%相关推荐

  1. 微信小程序(二)我的第一个微信小程序(获取用户信息失败)

    入门篇 我的第一个小程序 步骤 申请AppID,去微信公众平注册小程序服务,并申请是开发者,在开发管理里获取AppID. 安装开发者工具.原生的wxml适合用微信开发者工具开发. 新建项目.(学习不建 ...

  2. 关于获取微信小程序码的“47001”错误码的坑

    最近在项目组用Java写了一条获取微信小程序码的api,根据微信的接口文档进行一步一步的操作,可就是按照微信的接口文档一步一步来,微信给我返回的结果一直都是47001. {"errcode& ...

  3. 获取微信小程序码传递的参数 / 微信开发者工具模拟扫描小程序码调试

    本文主要介绍如何在微信开发者工具中,模拟微信扫描小程序码打开小程序的场景,进行调试. 二维码调试可以看这篇文章:微信开发者工具模拟扫描二维码调试 添加编译模式 添加一个咱们自定义的编译模式 输入模式名 ...

  4. 关于.NET HttpClient方式获取微信小程序码(二维码

    随着微信小程序的火热应用,市面上有关小程序开发的需求也多了起来.近来分析了一项生成有关生成微信小程序码的需求--要求扫码跳转到小程序指定页面(带参数):看了下小程序官方文档,以及网上的例子,未看到多少 ...

  5. php实现自定义中间logo的微信小程序码

    php实现自定义中间logo的微信小程序码这里写自定义目录标题 小程序码生成的时候是默认使用小程序后台设置的小程序icon图片的,但是在有些场景我们可能要替换成我们自己想要的icon. 下面先放代码: ...

  6. 微信小程序之获取用户地址

    在微信小程序中获取定位信息 今天一整天基本上都在处理在微信小程序中获取准确地址,给出定位并给出所在城市的问题.经过走了半天弯路,现在总结一下所需要的步骤. 一. 先到腾讯位置服务中心获取KEY 通过小 ...

  7. 微信小程序制作——获取用户信息

    微信小程序制作--获取用户信息 1.获取用户信息 方式一 wxml <view bindtap="getUserName">获取当前用户名</view> j ...

  8. 微信小程序最新获取头像以及昵称方法

    微信小程序最新获取头像信息 之前是使用open-dada获取微信头像和昵称,但是后面由于官网更新,此方法被收回了,所以不能使用此方法了. 之前方法代码: <open-data type=&quo ...

  9. 微信小程序 getPhoneNumber获取用户手机号

    微信小程序 getPhoneNumber获取用户手机号 在使用getPhoneNumber前,可以先看下官方文档:文档地址 在注意这里,官方提到如果不使用之前wx.login调用获取的sessionK ...

  10. 微信小程序后台获取签名,裁剪并上传图片至阿里云oss

    微信小程序后台获取签名,裁剪并上传图片至阿里云oss 首先,设置微信开发者工具,选择校验合法域名,防止本地可应使用,线上报错问题: 其次,在微信公众平台–小程序开发,设置合法域名 Oss设置–> ...

最新文章

  1. 结对项目之需求分析与原型模型设计
  2. 【测试】ABAP直连外部数据库
  3. 单元测试之带你搞懂Mockito使用
  4. JavaSE 学习参考:变量(1)
  5. 问题步骤记录器——“懒教师”的好帮手
  6. 用python随机生成5000个网址_使用Python脚本生成随机IP的简单方法
  7. 出现红字是电脑问题吗_苹果12还会出现信号不好的问题吗?
  8. 基于NFC的Android读写软件,基于Android的NFC商场助手软件的设计与实现
  9. mp4格式-播放和断点续播
  10. 上海公积金网上提取_为什么提取上海公积金租房这么简单?
  11. 虚幻基础之Gameplay游戏框架之Level和World
  12. Phpspreadsheet 中文文档(六)读写文件+读取文件
  13. teambition、Tower、worktile 、trello 等任务管理工具哪个好?
  14. Linux:命令 执行操作符
  15. 如何将当前时间为:Sun Jan 08 16:47:00 CST 2023格式转换成“yyyy-MM-dd HH:mm:ss“
  16. 韩金融研究院院长:加密托管是市场增长的关键
  17. 计算机及处理器温度要求国标,【国家标准】GB 4967-1995电子计算器通用技术条件.pdf...
  18. 《能力陷阱》学习总结
  19. smbus协议的command_SMBus协议总结
  20. No.16 br标签 和 wbr标签

热门文章

  1. 【捞】明朝灭亡的经济原因
  2. 计算机科学技术的广告语,赞美科技的句子-十大经典深入人心科技类广告语
  3. FPGA vs ASIC
  4. linux系统转移到另一个硬盘,(扩展根目录容量方法汇总)把Linux系统迁移到另一个分区或者硬盘...
  5. linux注册浏览器协议,在Linux系统上安装Beaker浏览器的方法
  6. python为图像设置标记_Python OpenCV 图像标记,取经之旅第 12 天
  7. AndroidX迁移
  8. Linux服务器集群系统LVS(一)
  9. 阿基里斯与乌龟的悖论
  10. 会员消费积分管理系统c语言,三步教你玩转会员系统——会员等级、折扣、积分...