编程语言
首页 > 编程语言> > 小程序登录机制的剖析

小程序登录机制的剖析

作者:互联网

在分析小程序登录机制之前,需要明确几个问题:
1. 微信小程序是什么
2. 微信公众平台、微信开放平台以及商户平台的区别
3. 微信openid与unionid的区别
4. 小程序unionid的机制

1. 小程序是什么

官方给出的解释是:小程序是一种新的开放能力,开发者可以快速地开发一个小程序。小程序可以在微信内被便捷地获取和传播,同时具有出色的使用体验。官方的解释过于含蓄,通俗点来说,对于用户而已,小程序是用户不需要在设备上下载对应的app应用,利用小程序即可在设备上使用该应用,并且用完该应用后,随时可以关闭也随时可以打开,无需下载安装与卸载。而对于企业与开发者而言,小程序开发相对于app开发简单,并且依附于微信生态,具有现成的流量入口,极大地降低了小程序的开发、运营成本。

2. 微信公众平台、微信开放平台以及商户平台的区别是什么

1. 微信公众平台

微信公众平台,简而言之是用于管理、开发微信公众号(包括订阅号、服务号、企业号),是微信公众号的后台运营、管理系统。日常微信公众号的运营人员,借助微信公众平台发推送,做营销等活动。

2. 微信开放平台

微信开放平台,摘录网上通常拿来解释的一段话:微信开发平台主要面对移动应用/网站应用开发者,为其提供微信登录、分享、支付等相关权限和服务。微信开放平台还提供了数据统计功能,用于开发者统计接入应用的登录、分享等数据情况。
接入步骤
以京东APP举例,比如京东APP需要使用微信登录、分享和微信支付功能,首先注册微信开发平台-开发者账号,并按照以下流程在微信开放平台创建京东APP:审核通过后,即可获得以下的初级权限,如要获得更高如微信支付权限,需要再单独申请,具体微信支付权限申请步骤详见附件《移动应用-微信支付权限申请流程》

微信公众平台开发与微信开放平台开发的局别:微信公众平台开发功能是在微信平台上的,而微信开放平台是指开发者在自己的应用上接入微信相关的功能,如支付等等。

3. 商户平台

商户平台,无论是申请 公众平台商户 还是 开放平台商户,申请成功后,都会拥有商户平台账号,可登陆商户平台进行操作。
商户平台主要就是做微信支付用的,如果APP或者公众号需要接入支付功能,那么就需要在公众平台申请公众平台商户,或者在开放平台申请开放平台商户。申请成功后会分配商户平台账号。

3. 微信openid与unionid的区别

1. 微信openid

对于微信的不同应用,如微信公众号或者微信小程序,用户在登陆后,微信会为其生成一个标识符openid。需要注意的是,同一公众号下,用户的openid是唯一的。同一微信小程序的openid也是唯一的,如果将小程序关联到公众号上,公众号的用户openid与小程序的用户openid是不同的,因为就用户而言,公众号与小程序是不同的两个应用。同一微信公众号关联的多个微信小程序,同一用户在不同的小程序的openid也是不同的,因为不同的小程序是不同的应用。

2. 微信unionid

因为微信openid在设计上是区分不同应用的标识符,如果同一家公司有多个微信应用,如何将不同应用下同一用户关联到一个账号下呢,此时微信提供了微信开放平台。将多个公众号或者小程序绑定到同一开放平台账号下,其具有相同的unionid。对于不同开放平台,冠梁同一公众号或者小程序,其同一用户的unionid也是不一样的。

举个例子:比如万达集团下有万达广场和万达影院,万达广场的公众号用户有自己的openid,而万达影院公众号下相同用户它对应的openid不一样,如果万达集团要分析同一用户在万达广场或者万达影院的消费情况,他们需要做的是万达集团申请一个微信开放平台,万达广场和万达影院的公众号绑定上去,这样同一用户在万达广场和万达影院的公众号就有相同的标识符unionid。

4. 小程序unionid的机制

关于小程序unionid的机制,在小程序开发文档中有详尽的介绍(点击查看),摘录一段很重要的话:如果开发者拥有多个移动应用、网站应用、和公众帐号(包括小程序),可通过 UnionID 来区分用户的唯一性,因为只要是同一个微信开放平台帐号下的移动应用、网站应用和公众帐号(包括小程序),用户的 UnionID 是唯一的。换句话说,同一用户,对同一个微信开放平台下的不同应用,unionid是相同的。

通过以上4个问题的解释,我们可以认清楚openid和unionid的区别。在本文中小程序登录机制的剖析,结合了实际的开发经验,对于登录机制的方案选取见下文。

 

账号系统,对于用户唯一标识符关联的选择

账号系统对于一个应用来说,关系到整个系统设计逻辑。做小程序应用开发时,我们通常会将现有的账号系统与微信给我们提供的用户标识符进行关联。是选择openid还是unionid,需要根据自身应用登陆态获取的方式来定。

1. 通过账号系统自身的账号密码登陆

可以将小程序的unionid与账号系统用户id关联,获取用户unionid需要用户授权,在用户第一次使用小程序时,强制引导用户完成授权,获取unionid并完成关联。此做法,可以将未来可能出现的多个小程序应用账号打通。

2. 无单独的登入页面,需要借助wx.login接口获取登陆态

此方式获取登陆态的方式,可以节省用户输入账号密码的操作。但由于wx.login接口在未授权的情况下读不到用户的unionid,因此我们假如用unionid关联我们的账号系统,以此来获取用户的登陆态,用户在取消授权或者删除应用再进入应用时,每次都要强制用户授权,而我们在调取接口时,也需要提前查微信授权接口,这样会由于接口原因产生的应用bug不可控。

另一方面,我们在用户第一次授权后已经拿到了用户的unionid等信息,因此我们无需过分依赖于微信授权。此种应用场景,建议用openid关联用户的登陆态。因为在wx.login接口,我们可以获取到用户的openid。用户使用小程序应用的最初状态,我们可以强制用户进行一次授权,去获取用户的unionid和openid并与账户系统关联,之后仅需使用openid去关联登陆态。

以上两种登陆机制是我们在小程序应用中通常会使用的两种方式,对于登陆机制的选择,就不同应用场景我们可以做更多合理的调整。

标签:openid,登录,微信,程序,用户,开放平台,剖析,unionid
来源: https://blog.csdn.net/weixin_37861326/article/details/87900850