微信的openID、unionID等总结

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了微信的openID、unionID等总结相关的知识,希望对你有一定的参考价值。

参考技术A 结论:同一用户,对同一个微信开放平台下的不同应用,unionid是相同的

用处:用unionID关联同一个微信开放平台帐号下移动应用openID、网站应用openID和公众帐号(包括小程序)openID,维护自己的用户

获取unionID的4种方式:

1、调用接口 wx.getUserInfo,从解密数据中获取 UnionID。注意本接口需要用户授权,请开发者妥善处理用户拒绝授权后的情况。

2、如果开发者帐号下存在同主体的公众号,并且该用户已经关注了该公众号。开发者可以直接通过 wx.login + code2Session 获取到该用户 UnionID,无须用户再次授权。

3、如果开发者帐号下存在同主体的公众号或移动应用,并且该用户已经授权登录过该公众号或移动应用。开发者也可以直接通过 wx.login + code2Session 获取到该用户 UnionID ,无须用户再次授权。

4、小程序端调用云函数时,当满足 UnionID 获取条件时可在云函数中通过 cloud.getWXContext 获取 UnionID

参考: UnionID 机制说明

以小程序里面为例,上图:

code2Session  ,参数appid、secret、js_code、grant_type='authorization_code',请求地址:

下发小程序和公众号统一的服务消息 ,参数access_token、openid、mp_template_msg,请求地址:

access_token ,参数grant_type=client_credential、appid、secret,请求地址:

H5页面静默授权获取微信openid

参考技术A 前几天和业务谈需求的时候提到了要在微信公众号里面做一个申请页面A。当时我对微信的了解还不是很多,只知道公众号上原来已经做了一个其他功能的页面B,B页面可以获取到客户微信的openid。

当时我们业务同事说只有B页面可以拿到openid,其他的页面都拿不到,所以这个正在谈的A页面入口要做在已有页面B上,然后通过B获取openid之后再传给A。我当时因为不懂也只能听他说,毕竟那个同事说的好像很确定的样子。

事后我仔细想了想,页面B也就是个普通的html呀,凭什么就B页面能获取客户的openid呢?肯定有方法的!于是我就上网搜了一下,最后成功获取了自己的openid,下面介绍下方法吧。

首先,你要有个微信公众号,并且要获得这个接口的权限

点修改之后,在功能设置的“网页授权域名”处添加可以获取微信openid的域名,也就是你自己公众号里面需要获取openid网页的域名。

做完上面这些之后,其实已经可以实现我们想要的效果了,这里因为我不是要做一个完整的功能,我只是想试验下html的页面怎么获取openid,所以过程比较简陋。

这里是微信官方的网页授权方法:

其实看起来微信的说明有那么一大段,但核心的内容也就那么一点点,总结下来就是:先拿到code,再用code去换取网页授权access_token。

因为重定向的url要urlEncode,所以这里我用另一个网站把我要访问的url转换了一下,网址如下:

在微信浏览器里面输入下面的url,appid、redirect_uri改成自己的,其他的都可以不用改。

静默授权:scope=snsapi_base

非静默授权:scope=snsapi_userinfo

一般在微信中是看不到url也没办法输入url的,所以这里我是用微信开发者工具调试的。

输入完静默授权的url后,url自动跳转成有code的,这个code只有5分钟有效期。

同样的,获取openid也就是在微信浏览器中执行一下下面这个url就可以了。appid,secret换成自己的,code用上面一步获取的,其他的都不用改。

运行完后的结果就显示在左边这个图里啦,你看,openid不就拿到了吗。

我没尝试非静默授权的,不过我想应该也差不多吧。这里也不是一套完整的方案告诉大家怎么把这个部署到前端和后端自动获取openid。我只是想分享一下我试验的经历。

以上是关于微信的openID、unionID等总结的主要内容,如果未能解决你的问题,请参考以下文章

qq和微信的openid长度分别是多少?

H5页面静默授权获取微信openid

php小程序登录时解密getUserInfo获取openId和unionId等敏感信息

微信openid原理及支付过程中使用方案

什么情况下 微信openid会改变

微信“unionid”是啥意思?