summary: 微信开放平台、微信公众平台、微信小程序、AppID、UnionID 以及 OpenID 搞得人头大
tags: 前端、微信开放平台、微信公众平台、微信小程序、AppID、UnionID、OpenID
author: 大熊
目前互联网应用的推广和传播都离不开微信,进而了解微信相关生态十分重要,本文主要带领大家一起梳理一下微信生态下的 微信开放平台、微信公众平台、微信小程序、AppID、UnionID 以及 OpenID,从此让你明明白白做人。
微信公众平台(OpenID)
- 会给微信用户生成
OpenID; - 不管是 微信公众号 还是 微信小程序,二者都是在微信公众平台进行管理的,所以他俩就放一起讲,为了识别用户,每个微信用户针对每个 公众号 或者 小程序 会产生一个安全的
OpenID;
举个🌰
你们公司有
3 个公众号:公众号A、公众号B、公众号C;
3 个小程序:小程序A、小程序B、小程序C;
那么针对同一微信用户,这六个平台会分别为这个用户各生成一个唯一的 OpenID;
看起来是这样的👇🏻:
公众号A 👉 微信用户A 👉
OpenID_1公众号B 👉 微信用户A 👉
OpenID_2公众号C 👉 微信用户A 👉
OpenID_3小程序A 👉 微信用户A 👉
OpenID_4小程序B 👉 微信用户A 👉
OpenID_5小程序C 👉 微信用户A 👉
OpenID_6
微信开放平台(UnionID)
- 会给微信用户生成
UnionID; - 为了识别用户,每个微信用户针对每个 微信开放平台 会产生一个安全的
UnionID;
举个🌰
你们公司由于业务广泛,同时也开发了三个原生应用:App_A、App_B、App_C;
这三个 App 都需要做微信授权登录,你们就需要将这三个 App 绑定到一个微信开放平台下(同一个开放平台);
那么针对同一微信用户,这个微信开放平台会为这个用户生成一个唯一的 UnionID。
❗️❗️❗️敲黑板:
- 同一微信用户在 App_A、App_B、App_C 下的
UnionID是同一个,因为这 3 个 App 绑定在同一个开放平台下; - 由于 App 是直接绑定在微信开放平台下,所以开放平台同时也会为 3 个 App 的同一用户分别生成 3 个
OpenID;
看起来是这样的👇🏻:
App_A 👉 微信用户A 👉
OpenID_7👉UnionID_1App_B 👉 微信用户A 👉
OpenID_8👉UnionID_1App_C 👉 微信用户A 👉
OpenID_9👉UnionID_1
如果需要在多公众号、小程序、移动应用之间做用户共通,则需前往微信开放平台,将这些公众号和应用绑定到一个开放平台账号下,绑定后一个用户虽然对多个公众号和移动应用有多个不同的 OpenID,但他对所有这些同一开放平台账号下的公众号和应用,只有一个 UnionID。
此时,看起来是这样的👇🏻:
公众号A 👉 微信用户A 👉
OpenID_1👉UnionID_1公众号B 👉 微信用户A 👉
OpenID_2👉UnionID_1公众号C 👉 微信用户A 👉
OpenID_3👉UnionID_1小程序A 👉 微信用户A 👉
OpenID_4👉UnionID_1小程序B 👉 微信用户A 👉
OpenID_5👉UnionID_1小程序C 👉 微信用户A 👉
OpenID_6👉UnionID_1App_A 👉 微信用户A 👉
OpenID_7👉UnionID_1App_B 👉 微信用户A 👉
OpenID_8👉UnionID_1App_C 👉 微信用户A 👉
OpenID_9👉UnionID_1
AppID
另外插一嘴,还有一个东西叫 AppID,此时你的心情可能是 woc 它又是个什么鬼呢???
还是拿你们公司来说吧,目前你们公司有 3 个公众号、3 个小程序、3 个 App ,暂且把它们理解为 9 个不同的应用,那么 AppID 分别就是这 9 个不同应用的唯一标识;
说人话:
- 通过微信公众平台注册一个 公众号A,那么 公众号A 就有一个自己的唯一标识
AppID_1; - 通过微信公众平台注册一个 小程序A,那么 小程序A 就有一个自己的唯一标识
AppID_4; - 通过微信开放平台绑定一个 App_A,那么 App_A 就有一个自己的唯一标识
AppID_7;
看起来是这样的👇🏻:
公众号A 👉
AppID_1👉 微信用户A 👉OpenID_1👉UnionID_1公众号B 👉
AppID_2👉 微信用户A 👉OpenID_2👉UnionID_1公众号C 👉
AppID_3👉 微信用户A 👉OpenID_3👉UnionID_1小程序A 👉
AppID_4👉 微信用户A 👉OpenID_4👉UnionID_1小程序B 👉
AppID_5👉 微信用户A 👉OpenID_5👉UnionID_1小程序C 👉
AppID_6👉 微信用户A 👉OpenID_6👉UnionID_1App_A 👉
AppID_7👉 微信用户A 👉OpenID_7👉UnionID_1App_B 👉
AppID_8👉 微信用户A 👉OpenID_8👉UnionID_1App_C 👉
AppID_9👉 微信用户A 👉OpenID_9👉UnionID_1
相信你已经发现端倪了吧,mou 错:
AppID对应 平台应用OpenID和UnionID对应 用户
你也可以这么理解,对于 同一用户,一个平台应用的 AppID 就会为他生成一个对应的 OpenID,如果这些平台应用都绑定在同一个 微信开放平台 下,那么这个用户的这些 OpenID 都会对应同一个 UnionID;
OpenID 和 UnionID 如何处理
AppID是不需要我们存储的,准确来说 它不属于用户数据;- 但是
OpenID和UnionID就属于用户数据了,是需要作为用户信息进行存储的;
怎么存储❓❓❓
首先我们已经知道了 UnionID 和 OpenID 是一对多的关系, 同一个开放平台下的多个应用对于同一微信用户所生成的 UnionID 是一致的, 所以 UnionID 就和我们在用户表里给注册用户生成的 userID 一样,可以作为用户的唯一标识, 但是同一用户分别在多端(小程序、App)登录时的 OpenID 却是多个, 此时我们就要通过不同端(小程序、App)的标识来把这几个不同的 OpenID 区分开来关联到 UnionID 和 userID 上, 也就是一条用户信息里会包含有:1 个 userID、1 个 UnionID、多个可以区分开来的 OpenID;
有人可能会说了,有 UnionID 就行了,为啥还要存储这个不能作为唯一标识的 OpenID 呢,那我来告诉你吧,主要就以下几点:
- 微信 SDK 的某些
api可能会用到OpenID作为参数; - 之前,
OpenID的获取不需要用户授权就能拿到,但是UnionID的获取就需要用户授权同意了之后才能获取到,你不能排除公司的某些业务为了缩短流程链路,不想进行用户授权,所以这个时候就需要用OpenID作为当前平台用户的唯一标识来使用了; - 补充一点:现在微信对
UnionID的获取做了调整,无需授权也可以直接获取到了; - 还有最重要一点,涉及到开放平台主体迁移的时候,
OpenID可是能派上大用场,往下看👇🏻;
微信公众号主体迁移
具体流程本文不细讲,可查看官方提供的文档:
🔗 https://kf.qq.com/product/weixinmp.html#hid=2488
❗️❗️❗️主要强调一些注意事项:
- 需要用新主体注册一个新的公众号作为目标主体公众号;
AppID会变,所有涉及到的业务逻辑都要变更;AppSecret会变,所有涉及到的业务逻辑都要变更;OpenID会变,但是官方提供了接口,可以将老的OpenID映射到新的OpenID,以供开发者做数据变更 🔗 OpenID 转换接口 🔗 https://kf.qq.com/faq/1901177NrqMr190117nqYJze.html;- 迁移完成后,用户扫描原账号的二维码会自动跳转到目标账号关注页面,目前仅支持普通二维码的跳转,带参数二维码暂不支持跳转;
- 只要不涉及到微信开放平台的主体变更,
UnionID就不会变,相关业务逻辑也可以正常使用;
微信小程序主体迁移
具体流程本文不细讲,可查看官方提供的文档:
🔗 https://kf.qq.com/product/wx_xcx.html#hid=2790
❗️❗️❗️主要强调一些官方文档没说的注意事项:
AppID不会变,所以之前生成的 小程序二维码、小程序码 都可以继续使用;AppSecret不会变,所以服务端之前写的涉及到微信的接口都可以继续使用;OpenID不会变,所以之前有关OpenID的业务逻辑也可以继续使用;- 只要不涉及到微信开放平台的主体变更,
UnionID就不会变,相关业务逻辑也可以正常使用;
微信开放平台主体迁移
具体流程本文不细讲,可查看官方提供的文档:
🔗 https://kf.qq.com/faq/170811F3aAjM170811zme6rq.html
❗️❗️❗️主要强调一些注意事项:
- 需要用新主体注册一个新的开放平台作为迁入开放平台,且需要完成认证;
- 开放平台仅支持
移动/网站应用迁移; - 绑定在原开放平台的
App的AppID不会变,可继续使用; AppSecret不会变,可继续使用;UnionID会变,需要提前做好相关数据映射;OpenID不会变,可继续使用;
可以看出,小程序 和 公众号 的迁移,都没有涉及 UnionID 的变更,但是 开放平台 的迁移,就涉及到 UnionID 的变更了,UnionID 作为多平台关联的唯一标识,如何处理至关重要,由于微信官方并没有提供具体 api 来做数据映射,所以我们开发者只能自行处理了,以下提供一个比较好的方案来映射新老 UnionID:
- 迁移完成后,我们之前的微信授权登录接口肯定是要做相应的改动;
- 用户在
App端或者小程序端使用微信授权登录时,我们可以拿到OpenID(没变,老的) 和UnionID(变了,新的); - 首先用
UnionID去用户信息表里查找,如果匹配不到用户数据,那就说明他有可能是新注册用户,也有可能是没有做过 老UnionID映射 新UnionID的老用户; - 此时不能区分出来这两者,所以我们还需要用
OpenID来判断,如果通过OpenID在用户信息表里能查找用户数据,就说明他是老用户,此时我们需要用新的UnionID替换掉表里老的UnionID即可; - 如果用
OpenID也没有在用户信息表里查找到数据,那就说明他是个新注册用户,正常存储OpenID和UnionID即可;
总结
以上总结的经验基本都是我踩过的坑,可谓一本🩸💦💩,提供出来希望能给大家带来一点帮助, 相信能看到这里的朋友,一定对 微信开放平台、微信公众平台、微信小程序、AppID、UnionID 以及 OpenID 之间的关系有一个清晰的认知了,如果还是有疑问,欢迎留言讨论~
今天的文章AppID、UnionID 和 OpenID 分不清楚?分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/15440.html