这是我参与更文挑战的第10天,活动详情查看: 更文挑战
1. 前言
该话题来源于测试组的一个问题: 同一个微信号, 同时在微信开发者工具和真机上访问小程序,有可能是代表两个不同的用户吗?
眉头一紧、发现事情没这么简单, 故梳理此文章以解惑!
2. 微信账户体系
2.1 appID
appID: 小程序的唯一标识.
可在微信公众平台-开发-开发管理-开发设置中获取appID,如下图所示.
这上面也有个AppSecret、主要用于解密数据;若没生成过AppSecret、则点击生成即可(需要管理员的同意);生成后记得及时保存该信息、忘记了就只能重置哦!
用途:
- 打开另外一个小程序;
2.2 openID
用户在同一个小程序下的唯一标识.
openID = 用户微信号&&公众平台appID(2个数据加密得到的字符串) 故可得出如下结论:
- 同一个微信号、不管用什么工具(微信开发者工具/真机), 都是同个openID.(这也回答了测试童鞋的问题)
- 同一用户在不同小程序有不同的openID
2.3 unionID
如果开发者拥有多个移动应用、网站应用和公众帐号,可通过获取用户基本信息中的unionid来区分用户的唯一性,因为同一用户,对同一个微信开放平台下的不同应用(移动应用、网站应用和公众帐号),unionid是相同的。
微信开放平台地址: open.weixin.qq.com/
我们先列举个业务场景:
比如某多多平台、有公众号、有小程序、有App、那你如何确保同一用户登陆不同端、用户数据一致呢?比如A用户在公众号端看到账户内有2张优惠券、然后再小程序端打开发现我的账户却一张券都没有、客诉不?
而unionID的出现就是为了解决此问题的、实现账号的互通.
unionID: 用户微信号&开放平台appID(两个数据加密得到的字符串) 注意事项:
- 同一个微信开放平台账号下的移动应用、公众号、小程序等、用户的unionID是唯一的、But却有不同的openID;
- 必须要先将公众号跟小程序绑定在同一个开放平台下、才能得到'同一'用户判定-> 即同一unionID;
- 一个公众号或小程序只能绑定一个开放平台(unionID的生成机制决定的、若绑定多个则会造成混乱)
3. 如何获取?
作为技术人、不能纯理论、技术干货也要来点、接下来演示下如何获取openID和unionID.
// wxml
<view bindtap="loginFn">戳我去登陆</view>
// js
loginFn: function () {
const _this = this
wx.login({
success: function (res) {
console.log('wx.login回调',res)
if (res.code) {
//发起网络请求
// code: 就是登录凭证(code)
_this.getSession(res.code)
}
}
})
},
// 该接口一般是前端负责传code、然后由后端同学去调用此接口的;
// 这里为了演示整个流程、故前端直接调用
getSession (code) {
wx.request({
url: 'https://api.weixin.qq.com/sns/jscode2session',
/**
* 参数说明:
* appid跟secret可由微信公众平台处获取;
* js_code为wx.login()拿到的code登陆凭证;
* grant_type不用改动;
*/
data: {
appid: 'wx87175f7067feb659',
secret: '5f0148582cf565f4b90cd6cb16b0e2ed',
js_code: code,
grant_type: 'authorization_code'
},
header: {
'content-type': 'application/json' // 默认值
},
success (res) {
console.log('jscode2session回调',res)
}
})
}
先看看控制台打印了什么:
再看看network请求:
你会发现这里只返回了session_key跟openid、怎么没获取到unionid字段呢?
session_key: 回话密钥
unionid: 用户在开放平台的唯一标识符、只有满足一定条件的情况下才会返回.
openid: 用户唯一标识
获取unionid需要满足的条件:
- 微信开发平台上有绑定小程序;
- 微信开发平台账号已完成开发者资质认证;
4. 待解决
本来想熟悉测试下整个流程的、但是发现个人开发者没法正常使用微信开放平台, 问题描述如下:
个人开发者已成功注册微信开放平台、但一定要填写企业信息.
官方建议: 个人主体账号,按实际信息先完善下,例如企业名称和主体信息这一栏,先填写个人名称;
不过需要提示注意下,后续如果进行认证了,这个页面的企业信息需要改成跟认证主体一致的主体名称.
申请大概还需要填这么些信息、内容过于繁琐复杂、期待对个人开发者开放.
5. 写在最后
若有错误之处, 恳请留言, 定会及时更正!
若觉着对您有帮助的话恳请点个赞或着收藏吧!