前要: 之前做过的公众号授权一般是在登录时的,最近遇到一个直接微信打开企业微信发过来的链接进去预约页面,需要进来时查询当前微信的用户有没有预约过对应的申请,如果有就跳转到index的列表页,没有的话留在当前的预约页!所以需要用到微信用户访问微信内部的小程序/公众号产生的用户唯一标识openid来查询有没有对应的数据列表!

其实在未关注公众号时,用户访问公众号的网页,也会产生一个用户和公众号唯一的OpenID

准备工作:
1、已经认证的公众号(企业号可以,个人号是不能绑定H5的),并且获取公众号的appid
2、https认证域名,没有认证的域名微信中不能配置回调地址,并且公众号后台配置网页授权的相关域名,要不会报redirect_uri域名还是与后台配置不一致 10003
3、微信公众平台认证通过,并创建app
4、逻辑图:

实现步骤:
1、最终需要拼接成的地址:

https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appid}&redirect_uri=${redirect}&response_type=code&scope=snsapi_base&state=#wechat_redirect

2、进来微信获取code,只能在微信客户端中发起,其中有两种方式,scope=snsapi_base(只能获取openid,并且是静默获取的,没有弹窗),scope=snsapi_userinfo(有弹窗,不仅仅可以获取openid,还可以获取用户微信的基本信息)
3、获取code成功后对链接进行截取!使用code去和后端换取openid!

最终代码:

//这为了兼容其他业务逻辑必须要处理的一层判断
onLoad(options) {var isMobile = window.navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i); // 是否手机端var isWx = /micromessenger/i.test(navigator.userAgent); // 是否微信var isComWx = /wxwork/i.test(navigator.userAgent); // 是否企业微信if (options.id) {this.id = options.id;this.getDetail(options.id)} else if (!options.id && !options.type && isWx && isMobile) {this.getCode()}
}
getCode() {let appid = "XXXXXXXX"; //个人开发者appid let redirect = encodeURIComponent(`https://XXXXXXX.com/pindex.html#/visitor/appointment/appointment`); let wx_code = this.getUrlParam("code"); // 截取url中的codeif (!wx_code) {//回来的地址中会在redirect基础上携带拼接上一个code重定向回来的window.location.href = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appid}&redirect_uri=${redirect}&response_type=code&scope=snsapi_base&state=#wechat_redirect`;    } else {this.getOpenId(wx_code); //把code传给后台获取用户openid}
},
getUrlParam: function(name) {var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");var r = window.location.search.substr(1).match(reg);if (r != null) return unescape(r[2]);return null;
},

踩坑总结:
1、第一次会犯的错:没有配置后台域名、appid写错、redirect 写错会重定向不回来、每一次进来不对wx_code进行判断会不断得闪…
2、480001:api功能未授权:scope=snsapi_base时是静默的,不弹出授权界面,只能获取用户openid,此时api未获得用户授权,所以你要拉取用户信息,就会弹出480001.如果要拉取用户信息请用snsapi_userinfo,当用户进入页面会弹出授权确认界面
3、获取openid时请求的后端域名是http的,安卓系统可以调后台的接口,并且可以获取openid回来!但是在苹果系统中
会请求超时的!对比了大半天,所有参数一样的,后来改回https协议就可以了!

微信H5公众号获取openid爬坑记相关推荐

  1. php微信获取openid_微信公众号获取openid(php实例)

    微信公众号获取openid 公众号获取openid的方法跟小程序获取openid其实是一样的,只是code获取的方式不一样 小程序获取code: 用户授权登录时调用wx.login即可获取到code ...

  2. 微信公众号获取OpenId(未授权)(需要关注公众号)

    文章的一开始,我先解释下微信公众号的openId. openId是微信对于用户的唯一辨识,只要有用户关注你的公众号,微信会通过公众号和用户微信号通过一种算法生成一种唯一标识码,也就是openId,用数 ...

  3. JAVA版微信公众号获取openId,微信用户信息

    一. 前端页面js 1.获取页面传来的数据 function GetQueryString(name) {var reg = new RegExp("(^|&)" + na ...

  4. 根据微信的公众号获取公众号的二维码 根据公众号获得二维码的图片

    最近在维护一个老项目,就是根据微信的公众号,也就是英文数字那串的公众号 来获得公众号的二维码的,我看了下,之前的代码是用的这个网址 http://open.weixin.qq.com/qr/code/ ...

  5. 微信公众号获取openid(java后端+html实现)

    准备工作: 1.认证通过的微信公众号 2.获取微信公众号的appid和secret 3.配置回调地址:开发>接口权限>网页服务>网页授权>修改 该示例为用户静默状态下获取ope ...

  6. 微信公众号获取openid(vue)

    export default {created () {this.page= (this.getUrlParam("page")===null)?this.getUrlParam( ...

  7. 微信公众号获取openid失败

    前提:微信公众号设置中的"网页授权域名"已经配置好. 现象:获取code成功,但是通过code获取openid失败,报错 : {"errcode":40029, ...

  8. uniapp微信H5公众号授权与支付

    目录 前言 准备工作 配置回调域名 授权方式 参数 完整代码 前言 网页授权微信官方文档:网页授权 | 微信开放文档 如果用户在微信客户端中访问第三方网页,公众号可以通过微信网页授权机制,来获取用户基 ...

  9. 微信H5公众号chooseImg上传图片

    公司公众号项目,之前是使用Vant框架 构建.一期的时候上传图片使用Vant提供 的Uploader组件,当时没有提到要为客户提供多图上传这个功能,且测试的小姐姐当初的iphone很给力 ,几乎没什么 ...

最新文章

  1. JAVA NIO知识点总结(2)——直接缓冲区和非直接缓冲区
  2. 4.19. 在线用户表
  3. load和pageshow的区别
  4. 云服务器租用成本节约在哪里?
  5. nginx 的启动、停止与重启
  6. 洛谷——P2077 红绿灯(解法2)
  7. 如何吧家庭网络从计算机去掉,3个简单电脑、路由器设置,迅速解决网络瓶颈提高家庭网络速度...
  8. 用Python批量下载MOOC资源
  9. 基于VHDL的vivado2017.4使用教程
  10. java 判断客户端是手机端还是PC端(SSH框架)
  11. oracle imp命令参数,oracle exp和imp命令参数详解
  12. OpenCV轮廓相关操作 C++
  13. 计算机硬盘格式化三个步骤,电脑格式化五种操作方法教程
  14. JAVA-微信网页授权
  15. GCC官方文档13 SSA
  16. 转载:国学与古代文学的关系
  17. Python实现Word2vec学习笔记
  18. 泰坦服务器装系统,深海泰坦X8Ti笔记本安装win10系统操作方法
  19. 易助ERP账号密码集成
  20. ESXI客户端软件下载

热门文章

  1. 开水果店的风险,开水果店有什么风险
  2. 红黑树时间复杂度为什么是O(logn)?
  3. java版飞机大战代码
  4. 视频转文字怎么操作?快把这些方法收好
  5. 【檀越剑指大厂--redis】redis基础篇
  6. 约约约,文章约起来!
  7. C#行转列绑定DGV
  8. zotero如何用markdown记笔记
  9. 不开方求两点距离的算法
  10. 支付宝 AR 红包技术探讨及如何在下一波技术浪潮中畅泳