微信开放平台,公众平台,小程序,折腾起来了

最近被这几个概念和各种id,token搞晕了,简单记下笔记吐槽一下

1.公众平台 mp

主要是用来给自媒体或者企业推消息用的,但发现很多小网站会用关注公众号来实现网站第三方登录,大致流程我也用代码实现了

首先在代码端和公众号平台打通token验证和加密解密,然后这个代码放在服务器一直跑着,公众号被扫码关注和取消关注,腾讯那边会post消息过来

利用公众号实现网站登录,首先我们可以先向腾讯公众号平台获取二维码ticket,然后得到一个二维码图片地址,放在前端给用户扫,只要扫码关注了(不管以前有没有关注,只要扫码进了公众号就会有消息推过来),我们就可以通过消息得到扫码用户的openId,把这个openId和自己网站的userId挂钩起来就信了

这里网上有个开源的封装的挺好

https://gitee.com/binary/weixin-java-tools

不过要注意公众平台的模块对应的是 里面的 weixin-java-mp

2.利用 关注公众号 来实现网站登录虽然有点方便,但也有些问题,一个是,用户扫码之后要等腾讯推给我们后端消息,我们才知道用户扫码关注了,然后还要自己代码推给前端,所以要么得用上websocket,要么就要前端轮询,没有向开放平台那种"扫码后直接代码回调然后前端页面自动跳转"来的方便,另一个问题当你想要做一个同时支持安卓,ios,小程序,web端的产品的时候,会有openId和公众号openId不一致的问题,最终还是要用到微信开放平台

3.小程序

用户打开我们的一个小程序时,我们是可以获取到这个打开小程序的用户的一个code,然后我们可以拿这个code去给腾讯发一个请求,得到这个code对应的用户对应我们小程序的openId的

https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/login/auth.code2Session.html

这个接口,如果小程序绑定到了开放平台,那就还会多返回一个unionId参数

可问题是这用户关注我的公众号后我拿到的他的openId,和这用户用了我的小程序后我拿到的另一个openId 不是同一个id.....

没想到当我辛苦走完公众号验证审核流程后,以为一个公众号能搞定一切时,我被小程序和公众号之前的openId不一致给打败了,然后不得不再去走一遍300元验证开放平台账号的流程,来回加起来就是600元了

4.微信开放平台  open

上面提到了 如果要做支持多端的应用,还是不得不走 微信开放平台。在微信开放平台里,可以对1.网页应用 2.移动端 3.小程序 4.公众号 之间做些配置和绑定,然后能达到一个什么目的呢? 比如我一个产品A,分别由A-web,A-IOS,A-android,A-miniprogram这几个端,甚至还有公众号,我希望同一个用户不管用哪个端,在我后台数据库里就只对应这个产品A的user表的一个记录,这个时候就要用到开放平台的unionId了,并且这个unionId就开放平台才有,如果你仅仅做了公众平台那边的工作,你也是得不到unionId的,必须要在开放平台走下流程才行

https://gitee.com/binary/weixin-java-tools

开放平台对应的是 weixin-java-open

总之,如果只是做个小网站不做移动端,可以只在公众号端用用户的openId和自己网站的userId挂钩,但如果要做一个跨终端的产品,那就要利用开发平台的unionId了,公众平台公众号相当于只是公司的一个推广账号。

其实有一点我是挺想吐槽的,就是公众平台,开放平台,小程序的数据之前看似可以互通,可是又没有尽可能的互通,需要代码层面各种翻文档,并且他们之间的账号管理有点复杂

5.目前计划是,既然对于同一个用户,同一个产品,不管这个产品是web端还是移动端还是小程序,只要都绑定在同一个开放平台的账号下,那么他们之间的unionId是相同的。所以

我web端暂时继续使用关注公众号的方式进行登录,但能通过开放平台的api获取到unionID了

web端虽然还能够通过在开放平台创建网站应用的方式来实现网页回调登录,但我暂时先不弄(需要资料审核打印个文件)

小程序端,因为已经和公众号绑定在同一个开放平台账号下了,所以也可以能通过开放平台的api的获取unionID

至于以后如果产品更多了,也打不进,统统绑定到开放平台,然后无非自己数据库里多几个appId来自己通过代码区分是哪一个产品,

产品A-web:      unionID=1,appName = A,appId = 1 ,appName = A-web

产品A-android: unionID=1,appName = A,appId = 2 ,appName = A-android

产品A-ios:        unionID=1,appName = A,appId = 3 ,appName = A-ios

产品A-小程序:  unionID=1,appName = A,appId = 4 ,appName = A-miniprogram

6.具体做法

具体看官方文档说明

UnionID 机制说明 和小程序获取unionID

https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/union-id.html

6.1 小程序 获取openid和unionid 参考上面第三点

https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/login/auth.code2Session.html

这个接口,如果小程序绑定到了开放平台,那就还会多返回一个unionId参数

6.2 公众号获取unionid

参考:

https://developers.weixin.qq.com/doc/offiaccount/User_Management/Get_users_basic_information_UnionID.html

就是在受到用户扫码关注的时候拿用户的openId发请求到找个接口

https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN

这个接口会返回用户unionID还有昵称头像之类的

另外,微信没有提供根据unionID和公众号APPID来反查同一开放平台下某个公众号的粉丝的openID的功能,所以openId业务有用到的话就自己存起来处理

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值