当前位置: 首页 > news >正文

关于移动端H5获取微信非静默授权被拦截进入【微信快照页】问题及解决方案

业务需求场景:登录用户 — 微信分享H5页面URL — 好友(非登录用户)打开分享页面时,要求获取用户授权,拿到非登录用户的微信相关信息才可以继续访问


问题描述:有部分用户反馈,页面访问不正常即,打开分享页面,进入了微信快照页,并且右下角有提示,需要用户点击【使用完整服务】后,才能正常拉取授权进入分享页


官方描述:快照页将会默认对用户屏蔽网页授权弹窗,用户在快照页中仅可进行滑动浏览操作,其他交互将被限制,并提示用户 “该网页需获取个人信息才可使用完整服务,当前仅可浏览部分内容”。用户如需要使用完整网页服务,可轻触右下角 “使用完整服务” 按钮触发授权弹窗,用户确认后进入原网页。

微信网页授权能力调整公告https://developers.weixin.qq.com/community/minihome/doc/000c2c34068880629ced91a2f56001


授权流程:(vue项目为例)


解决方案:

首先要明白为什么会进入快照页,客观看这里:

现有的业务代码逻辑正好命中不规范中第一条: 访问网页时就去拉取授权

猜想,如果在拉取授权前跳转一个过渡页,过渡页明确告知用户要去拉取微信授权获取个人信息,且由用户点击确定按钮操作后,再执行网页授权逻辑,这样就符合微信授权规范了吧?修改授权逻辑,增加过渡页:

测试,ok,完美解决分享页面拉取授权进入快照页问题 ~ 


授权过渡页逻辑代码:(供参考)

<template>
  <div>
    <h2 class="double-pd14">正在获取授权,请耐心等待...</h2>

    
    <confirm-dialog
      :is-show-dialog="showDialog"
      :show-cancel-btn="false"
      dialog-title="授权确认提示xxxxxx"
      dialog-message="是否允许获取您的微信授权xxxxxxx"
      @confirmEvents="onSetWxAuthHandle"
    />
  </div>
</template>

<script>
export default {
  name: 'wx-auth-page',
  components: {
    confirmDialog
  },
  data () {
    return {
      showDialog: false
    }
  },
  created () {
    this.onCheckWxRedirect()
  },
  methods: {
    async onCheckWxRedirect () {
      const {
        code,
        state
      } = this.$route.query
      
      // 判断是否授权重定向
      if (code && state === 'shareLogin') {
        // 重定向回来,业务逻辑
        // 请求接口续签token,跳转分享页
      } else {
        // 非重定向,唤起授权提示
        this.showDialog = true
      }
    },

    // 发起微信授权
    async onSetWxAuthHandle () {
      const {
        origin,
        pathname
      } = this.onReturnWindowOpt()
      this.showDialog = false
      // 接口逻辑略
      await setWxOpenAuth({
        state: 'shareLogin',
        redirectUrl: encodeURIComponent(origin + pathname)
      })
    },

    // 失败跳转登录,错误补偿机制
    wxAuthErrorEffect () {
      this.$toast('授权失败')
      const { origin } = this.onReturnWindowOpt()
      window.location.replace(`${origin}${PRODUCT_NAME}login`)
    },

    onReturnWindowOpt () {
      const {
        origin,
        pathname
      } = window.location
      return {
        origin,
        pathname
      }
    }
  }
}
</script>

相关文章:

  • token和JWT token区别、登录安全、页面权限、数据权限、单点登录
  • Liteos信号量的使用
  • 基于Verilog搭建一个卷积运算单元的简单实现
  • pytorch-实现mnist手写数字识别(彩色)
  • C/C++语言100题练习计划 99——找第一个只出现一次的字符
  • Go使用Gin+mysql实现增删改查
  • PIE-Engine:房山区洪涝灾害风险评价
  • 【我的渲染技术进阶之旅】如何编译Filament的windows版本程序?
  • 03 C++ 字符串、向量和数组
  • python 代码 C 执行
  • 字节外包凭借【ui自动化测试框架】成功进入内部编制
  • 用 Plop 加快项目相似代码生成
  • Codeforces Round #822 (Div. 2) 补题 (A、B、C)
  • 【初阶与进阶C++详解】第十六篇:AVL树-平衡搜索二叉树(定义+插入+旋转+验证)
  • 去除多重共线性的5种方法,你学废了嘛?
  • [ JavaScript ] 数据结构与算法 —— 链表
  • leetcode386. Lexicographical Numbers
  • Linux gpio口使用方法
  • Mysql5.6主从复制
  • spring + angular 实现导出excel
  • 搭建gitbook 和 访问权限认证
  • 个人博客开发系列:评论功能之GitHub账号OAuth授权
  • 聊一聊前端的监控
  • 猫头鹰的深夜翻译:JDK9 NotNullOrElse方法
  • 前端面试之闭包
  • 入口文件开始,分析Vue源码实现
  • 想晋级高级工程师只知道表面是不够的!Git内部原理介绍
  • 异步
  • No resource identifier found for attribute,RxJava之zip操作符
  • Python 之网络式编程
  • 没有任何编程基础可以直接学习python语言吗?学会后能够做什么? ...
  • 支付宝花15年解决的这个问题,顶得上做出十个支付宝 ...
  • (2022 CVPR) Unbiased Teacher v2
  • (4)logging(日志模块)
  • (第9篇)大数据的的超级应用——数据挖掘-推荐系统
  • (第一天)包装对象、作用域、创建对象
  • (二十一)devops持续集成开发——使用jenkins的Docker Pipeline插件完成docker项目的pipeline流水线发布
  • (附源码)springboot炼糖厂地磅全自动控制系统 毕业设计 341357
  • (三)mysql_MYSQL(三)
  • (十二)python网络爬虫(理论+实战)——实战:使用BeautfulSoup解析baidu热搜新闻数据
  • (十三)Java springcloud B2B2C o2o多用户商城 springcloud架构 - SSO单点登录之OAuth2.0 根据token获取用户信息(4)...
  • (使用vite搭建vue3项目(vite + vue3 + vue router + pinia + element plus))
  • (顺序)容器的好伴侣 --- 容器适配器
  • (原创)Stanford Machine Learning (by Andrew NG) --- (week 9) Anomaly DetectionRecommender Systems...
  • (转)EXC_BREAKPOINT僵尸错误
  • (转)http-server应用
  • (转载)CentOS查看系统信息|CentOS查看命令
  • .NET Core SkiaSharp 替代 System.Drawing.Common 的一些用法
  • .NET Core实战项目之CMS 第十二章 开发篇-Dapper封装CURD及仓储代码生成器实现
  • .net framework 4.0中如何 输出 form 的name属性。
  • .Net各种迷惑命名解释
  • .net和jar包windows服务部署
  • .py文件应该怎样打开?
  • @31省区市高考时间表来了,祝考试成功
  • [20180129]bash显示path环境变量.txt