6

前言

在《微课堂》这个项目中,我们采用了php与微信结合的方法,来实现我们想要的功能,如“上课签到”、“上课提醒”等功能,后来随着功能的不断完善,对微信的依赖也越来越多,不过微信开发这部分是另一个队友负责的,自己了解的还是太少了,了解到接下来的项目会用到微信小程序,觉得自己还是先提前了解一下的好。
主要想了解的就是几个概念性的东西,那就从“是什么”、“用来干什么”、“怎么用”来进行分析吧。


OpenID


是什么

openid是微信用户在公众号appid下的唯一用户标识(appid不同,则获取到的openid就不同),可用于永久标记一个用户,同时也是微信JSAPI支付的必传参数。 ——摘自《微信支付开发文档》
在《微课堂》项目的开发调试初期,我以为OpenID是不唯一的,就像cookie一样,cookie是有自己的有效期的,上一个cookie失效后,会重新生成一个新的cookie,但是在后期查看Navicat的数据表的过程中,我发现OpenID是唯一且不会改变的(当然仅限于当前公众号)
20191018151449.png
也就是说,即使我从当前数据表中删除我的数据,我再次注册后,表单里所存储的我的OpenID还是这个OpenID,就像上面的文档里说的“永久标记一个用户,下面的图片也说明了这一点。
20191018152110.png

什么是appid呢?
20191018152506.png
在微信开发文档的获取Access token 一页,我们可以大致了解到appid的作用,接下来我们再详细了解一下appid:appid是微信公众账号或开放平台APP的唯一标识,在公众平台申请公众账号或者在开放平台申请APP账号后,微信会自动分配对应的appid,用于标识该应用。
也就是说,appid是公众号或平台的“身份证”,用来区分和识别他们。

用来干什么

OpenID算是用户在本公众号或平台下的“身份证”,举个不太形象的例子吧,假如把微信比作整个地球,那么公众号或平台就可以看作国家,每个国家的人都有自己的身份证,不同国家的身份证也是不同的,有了这个身份证,用户才能与公众号交互,假如用户取关了该公众号,那么用户将无法与该公众号交互。

怎么用

对于我们的项目来说,OpenID的唯一性为我们判断用户是否注册提供了便利,当用户点击对应的主页按钮,如“学生主页”,后台就会先查看该OpenID的用户是否已存在在数据表中,若存在,就执行登录方法,若不存在,就跳转到注册方法,当然OpenID也在其他功能上起到了很大的作用,在此我也就不一一列举了。


access_token


是什么

access_token是公众号的全局唯一接口调用凭据,公众号调用各接口时都需使用access_token。开发者需要进行妥善保存。access_token的存储至少要保留512个字符空间。access_token的有效期目前为2个小时,需定时刷新,重复获取将导致上次获取的access_token失效。 ——摘自《微信官方文档》

用来干什么

公众平台以access_token为接口调用凭据,来调用接口,所有接口的调用需要先获取access_token,access_token在2小时内有效,过期需要重新获取,但1天内获取次数有限。
可以把access_token作为接口的钥匙,开发者要拿着access_token这把钥匙去调用接口,两小时后接口换锁,开发者在两小时后要更换钥匙再去调用接口。

怎么用

20191018163458.png
由于在项目中对方法进行了封装,并且我没有从开始进行了解,只能引用开发文档中的信息进行阐释了。

  public function getAccessToken($code){
        $url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid={$this->appid}&secret={$this->appsecret}&code={$code}&grant_type=authorization_code";
        $res = file_get_contents($url); //获取文件内容或获取网络请求的内容
        $access_token = json_decode($res,true);
        return $access_token;
    }

这是项目中获取access_token的代码,和官方文档给的没有太大差别。


UnionID


是什么

在解释什么是UnionID之前,我们先来看一下UnionID机制。

UnionID 机制说明

如果开发者拥有多个移动应用、网站应用、和公众帐号(包括小程序),可通过 UnionID 来区分用户的唯一性,因为只要是同一个微信开放平台帐号下的移动应用、网站应用和公众帐号(包括小程序),用户的 UnionID 是唯一的。换句话说,同一用户,对同一个微信开放平台下的不同应用,unionid是相同的。 ——摘自《微信官方文档.小程序》
UnionID 机制说明
如果说OpenID是“身份证”,那么UnionID可以看做“指纹”,在不同的“国家”有不同的“身份证”验证信息和实现交互,而在全球,我们可以通过“指纹”验证信息和实现交互,无论你在那个国家,你的指纹都是相同且唯一的。

用来干什么

假如用户拥有了UnionID,在他进入一个平台时,无论是选择公众号进入还是选择小程序进入,我们可以用UnionID判断这个用户是同一个人,因为用户的OpenID在公众号和小程序上是不同的,所以我们无法通过OpenID去判断。
开发者还可以通过OpenID来获取用户基本信息。
20191018172649.png

怎么用

20191018173606.png
由于我们在项目中并未使用到公众号或小程序分别进入的功能,所以对其引用没有进行实践,想了解更多可以进入官方文档查看。
获取用户个人信息(UnionID机制)


code


是什么

code作为换取access_token的票据,每次用户授权带上的code将不一样,code只能使用一次,5分钟未被使用自动过期。

请注意,这里通过code换取的是一个特殊的网页授权access_token,与基础支持中的access_token(该access_token用于调用其他接口)不同。公众号可通过下述接口来获取网页授权access_token。如果网页授权的作用域为snsapi_base,则本步骤中获取到网页授权access_token的同时,也获取到了openid,snsapi_base式的网页授权流程即到此为止。

尤其注意:由于公众号的secret和获取到的access_token安全级别都非常高,必须只保存在服务器,不允许传给客户端。后续刷新access_token、通过access_token获取用户信息等步骤,也必须从服务器发起。
原文地址:通过code换取网页授权access_token

用来干什么

由上文我们可以知道,code用来换取特殊网页授权access_token。
那么这个access_token和我们之前介绍的access_token有啥区别呢,我查询了一下资料,发现简书上的一位大佬对它们做了区分,在此我引用一下
20191019111628.png
原文链接:微信网页授权基本步骤
也就是说,在用户授权给公众号后,便会得到这个网页授权access_token,用这个access_token可以进行授权后的接口调用,而其他的微信接口,需要通过“获取acess_token”接口获取普通的access_token进行调用。

怎么用

20191019112340.png

https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code

20191019112421.png

20191019112606.png
|参数 |说明 |access_token |接口调用凭证 |expires_in |access_token接口调用凭证超时时间,单位(秒) |refresh_token |用户刷新access_token |openid |授权用户唯一标识 |scope |用户授权的作用域,使用逗号(,)分隔

由于本人没有接触太多微信开发,对其调用也是了解的不深,在此便引用了官方文档给出的示例。
通过code获取access_token

总结

由于在项目中没有太多的接触微信,所以对这些概念性的东西还是一知半解,好在新的项目马上就要开始了,与微信也是密切相关,跃跃欲试,想更深入的了解微信,相信在不久后,我会再发布一篇关于微信的博客,相信那时候也是收获满满的。


锦城
854 声望21 粉丝

好好生活