微信公众号开发之授权登录

微信公众号新闻 / 来源:code李 发布日期:2020-08-05 热度:48C
敬告:本站部分内容转载于网络,若有侵权、侵害您的利益或其他不适宜之处,请联系我们,本站将立即删除。
联系邮箱:2876218132#qq.co m
本页标题:微信公众号开发之授权登录
本页地址:https://www.weixinba.cc/89810-1.html
相关话题:微信公众号平台登陆
#微信公众号平台登陆#微信公众号开发之授权登录

文章来源:code李
原标题:微信公众号开发之授权登录





一、UnionId和openId


微信登录最重要的两个返回信息,一个是UnionId,一个是OpenId。两者之间有着必然的联系。
UnionID机制的作用说明:如果开发者拥有多个移动应用、网站应用和公众帐号,可通过获取用户基本信息中的unionid来区分用户的唯一性,因为同一用户,对同一个微信开放平台下的不同应用(移动应用、网站应用和公众帐号),unionid是相同的。
OpenId是公众号的普通用户的一个唯一标识,只针对当前的公众号有效。
用一张图来表示他们之间的关系:


总结起来就一句话,一个微信和不同应用以OpenId联系,与开放平台下以UnionId联系。



      二、授权登录类型


1.静默授权登录(snsapi_base授权登录以snsapi_base为scope发起的网页授权,是用来获取进入页面的用户的openid的,并且是静默授权并自动跳转到回调页的。用户感知的就是直接进入了回调页(往往是业务页面)特点:用户无感知;
2.非静默授权登录(snsapi_userinfo非静默授权以snsapi_userinfo为scope发起的网页授权,是用来获取用户的基本信息的。但这种授权需要用户手动同意,并且由于用户同意过,所以无须关注,就可在授权后获取该用户的基本信息。(区别:除了scope不一样,以及调用微信接口不一样,功能上,静默授权不需要用户确认,只需要用户访问某个网页,属于嵌套在普通网页里的授权形式,但是只能获取到用户的唯一标示openid和union id,无法拿到用户的微信头像、微信名称等个人信息,对于用户的简单认证还是很有用的)下图为scope等于snsapi_userinfo时的授权页面:


三、开发前配置准备

1.填写网页授权回调域名在微信公众号管理平台首页中,点击左边导航栏:"设置" ---> "公众号设置" --->"功能设置"。就会看到包括图片水印,业务域名,JS接口安全域名,网页授权域名。我们要设置的就是网页授权回调域名,点击网页授权域名栏的设置按钮,进行域名设置。



需要下载图片上的一个txt文件,上传到服务器指定位置,能通过url直接访问,让微信服务器可以访问进行字符串对比校验即可,配置成功。2.填写服务器配置在管理平台首页左边的导航栏选择: 开发 --> 基本配置。就会进入该公众号的开发基本配置管理。就可以看到有个区域是服务器配置,这个服务器配置,就是填写我们将开发测试完成后的项目部署所在的服务器,且要填写已经备案后域名地址(若是要进行微信支付开发)。



在填写完所有服务器配置信息后,点击提交,那么微信服务器会发送一个GET请求到我们上述URL填写的地址上,我们服务器上通过接收微信服务器发送请求进行按照某种规则进行处理,将得到的结果返回微信服务器,进行判断我们的服务器是否通过校验。
四、开发步骤


1.用户同意授权,获取code
必须是在微信客户端,引导微信用户访问下面文档指定的url。注意,我们可以修改的仅仅是接口中重定向redirect_uri部分,可以重定向到我们自己开发的页面中。https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx520c15f417810387&redirect_uri=https://chong.qq.com/php/index.php&response_type=code&scope=snsapi_base&state=123#wechat_redirect



如果用户同意授权,页面将跳转redirect_uri/code=CODE&state=STATE

code说明 :code作为换取access_token的票据,每次用户授权带上的code将不一样,code只能使用一次,5分钟未被使用自动过期。
2.通过code换取网页授权access_token通过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:https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code





3.刷新access_token(如果需要)由于access_token拥有较短的有效期,当access_token超时后,可以使用refresh_token进行刷新,refresh_token有效期为30天,当refresh_token失效之后,需要用户重新授权。
获取第二步的refresh_token后,请求以下链接获取access_token: https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=APPID& grant_type=refresh_token&refresh_token=REFRESH_TOKEN

4.拉取用户信息(需scope为 snsapi_userinfo)

如果网页授权作用域为snsapi_userinfo,则此时开发者可以通过access_token和openid拉取用户信息了。
http:GET(请使用https协议) https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN




附:已关注公众号获取用户信息
微信公众号开发文档中,有指定的api 接口可以让我们调用,获取微信用户的基本信息。这个接口调用的成功的前提条件是:所要获取的微信用户信息是已经关注了我们的微信公众号的。若是该微信用户没有关注,则不能通过此接口调用,只能通过上述的网页授权方式获取用户信息。详情参考: https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Get_access_token.html
http请求方式: GEThttps://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN## 参数说明access_token 是 调用接口凭证openid 是 普通用户的标识,对当前公众号唯一lang 否 返回国家地区语言版本,zh_CN 简体,zh_TW 繁体,en 英语这里要注意的是这个access_token是微信接口调用的凭证。与网页授权通过code拿到的access_token是不同的。这个接口凭证,是全局token,也就是说,若是项目中要调用所有微信其他jssdk等接口,请求url参数中多数时候都是需要这个参数token值的。
http请求方式: GEThttps://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET## 参数说明grant_type 是 获取access_token填写client_credentialappid 是 第三方用户唯一凭证secret  是   第三方用户唯一凭证密钥,即appsecret## 返回{"access_token":"ACCESS_TOKEN","expires_in":7200}
至此,这个微信公众号的基本基础开发配置完成了
微信开发文档网页授权地址:

https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_webpage_authorization.html





论坛
  阅读原文
支持0次 | 反对0次  
  用户评论区,文明评论,做文明人!

通行证: *邮箱+888(如:123@qq.com888)