微信授权提示
如果把在网址拷贝出来,然后在非微信环境打开,就会看到“请在微信客户端中打开连接”的提示。
在微信外部访问提示
一直很好奇这个是怎么实现的,是微信提供的功能呢还是开发人员自己实现的?从页面展示的效果来看,应该是微信提供的功能。如果是微信提供的功能,该怎么样实现这样的效果呢?刚好我们有个H5网页需要获取用户的昵称信息,研究了下微信的相关文档。
前置要求
页面授权
在前文我们看到过一个微信授权提示的页面,这个页面其实是微信自动弹出的。当用户点击“允许”后,应用才可以获取到用户的基本信息。那么问题来了,怎么让微信弹出这个授权提示页面呢?其实很简单,只需要访问微信特定的一个网址即可。如下代码所示:
也就是说只要我们访问诸如:
https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx116c7ab3d519b006&redirect_uri=https://pk.migu.cn/pk/wechat/getUserInfoCallback&response_type=code&scope=snsapi_userinfo&state=/abc等地址,微信就会自动弹出授权提示。如果不是在微信客户端内部访问,就提示“请在微信客户端中打开连接”。
这里网址里面有几个需要主要的参数:
appid开发者ID,公众号的唯一标识,在微信公众号里面左侧菜“基本配置”里面可以看到
redirect_uri授权后重定向的回调链接地址,官方要求用urlEncode对链接进行处理
state重定向后会带上state参数,最多128字节
前两个参数是必须填写的,最后一个可以忽略。但是开发时state会很有用,可以传入一些辅助信息。比如在我们的页面中,授权成功后我们会通过state来让后台进行页面跳转。
回到上面那个URL地址,当用户在微信里面访问后,首先会弹出授权提示,如果用户点击“允许”,页面会自动重定向到
https://pk.migu.cn/pk/wechat/getUserInfoCallback?code=xxxxxx&state=/abc。
通过code换取access_token
拿到code后,可以通过code来换取access_token, 如下所示:
为开发者密钥,第一次创建密钥时微信会提示我们保存。
返回如下结果:
通过access_token获取用户基本信息
拿到access_token后,就可以获取用户的基本信息了
返回如下结果:
跳转到H5页面
后台获取到用户的昵称后,可以通过读取里面的参数来跳转到前端H5页面,比如跳转到
https://pk.migu.cn/test/pk/page/teachersday/index.html?nickName=石头,前端页面就可以很方便的获取到用户的昵称信息。
注意事项
公众号必须要通过认证,否则无法获取用户基本信息。
公众号需要到“安全中心”设置好白名单,比如后端服务器的外网IP地址,否则没法访问微信接口
公众号需要设置好和
针对后台开发同学,通过换取的是有时效限制的,大约2个小时会失效。需要通过接口返回的来获取新的。的有效期为30天。如下所示:
返回如下数据:
同时,微信还提供了一个API接口来校验是否有效。
如果有效,则返回如下数据,否则会提示错误信息:
如果数据不合法,会返回其他信息:
总结
看完本文有收获?点赞、分享是最大的支持!