近排在做微信接口开发,所以总结一下微信授权登录并获取用户信息 这个接口的开发流程。
一、首先你的微信公众号要获得相应的AppID和AppSecret,申请微信登录且通过审核后,才可开始接入流程。
二、授权流程
1、流程说明
(1). 第三方发起微信授权登录请求,微信用户允许授权第三方应用后,微信会拉起应用或重定向到第三方网站,并且带上授权临时票据code参数;
(2). 通过code参数加上AppID和AppSecret等,通过API换取access_token;
(3). 通过access_token进行接口调用,获取用户基本数据资源或帮助用户实现基本操作。
2、获取access_token时序图:
三、开发(我的用是CI框架,其实用什么框架都一样,MVC模式就行了)
1、请求CODE
weixin.php
1 <?php 2 class weixinController extends CI_Controller { 3 public $userInfo; 4 public $wxId; 5 6 7 public function __construct(){ 8 parent::__construct(); 9 10 //只要用户一访问此模块,就登录授权,获取用户信息11 $this->userInfo = $this->getWxUserInfo();12 }13 14 15 /**16 * 确保当前用户是在微信中打开,并且获取用户信息17 *18 * @param string $url 获取到微信授权临时票据(code)回调页面的URL19 */20 private function getWxUserInfo($url = '') {21 //微信标记(自己创建的)22 $wxSign = $this->input->cookie('wxSign');23 //先看看本地cookie里是否存在微信唯一标记,24 //假如存在,可以通过$wxSign到redis里取出微信个人信息(因为在第一次取到微信个人信息,我会将其保存一份到redis服务器里缓存着)25 if (!empty($wxSign)) {26 //如果存在,则从Redis里取出缓存了的数据27 $userInfo = $this->model->redisCache->getData("weixin:sign_{$wxSign}");28 if (!empty($userInfo)) {29 //获取用户的openid30 $this->wxId = $userInfo['openid'];31 //将其存在cookie里32 $this->input->set_cookie('wxId', $this->wxId, 60*60*24*7);33 return $userInfo;34 }35 }36 37 //获取授权临时票据(code)38 $code = $_GET['code'];39 if (empty($code)) {40 if (empty($url)) {41 $url = rtirm($_SERVER['QUERY_STRING'], '/');42 //到WxModel.php里获取到微信授权请求URL,然后redirect请求url43 redirect($this->model->wx->getOAuthUrl(baseUrl($url)));44 }45 }46 47 48 }49 50 51 52 53 54 55 56 57 58 59 60 61 }62 ?>
Wxmodel.php
1 <?php 2 class WxModel extends ModelBase{ 3 public $appId; 4 public $appSecret; 5 public $token; 6 7 public function __construct() { 8 parent::__construct(); 9 10 //审核通过的移动应用所给的AppID和AppSecret11 $this->appId = 'wx0000000000000000';12 $this->appSecret = '00000000000000000000000000000';13 $this->token = '00000000';14 }15 16 /**17 * 获取微信授权url18 * @param string 授权后跳转的URL19 * @param bool 是否只获取openid,true时,不会弹出授权页面,但只能获取用户的openid,而false时,弹出授权页面,可以通过openid获取用户信息20 * 21 */22 public function getOAuthUrl($redirectUrl, $openIdOnly, $state = '') {23 $redirectUrl = urlencode($redirectUrl);24 $scope = $openIdOnly ? 'snsapi_base' : 'snsapi_userinfo';25 $oAuthUrl = "https://open.weixin.qq.com/connect/oauth2/authorize?appid={$this->appId}&redirect_uri={$redirectUrl}&response_type=code&scope=$scope&state=$state";26 return $oAuthUrl;27 }
这里附上请求参数说明和返回值说明
请求参数说明:
响应返回值说明:
当请求成功,会redirect到请求参数中的redirect_uri的值中去,其实又回到weixin.php的$this->userInfo = $this->getWxUserInfo();这行去,然后再一次进入到getWxUserInfo()方法,此时
//获取授权临时票据(code) $code = $_GET['code'];
这行也已经能获取得到code的值了。接着进行第二步。
2、通过code获取access_token
weixin.php
WxModel.php
这里附上参数说明
请求参数说明:
响应返回值说明:
当返回错误时是这样子的:
3、通过access_token调用接口(获取用户信息)
获取access_token后,进行接口调用,有以下前提:
(1)access_tokec有效且未超时;
(2)微信用户已授权给第三方应用账号相应的接口作用域(scope)。
以下是获取用户信息的代码
weixin.php
WxModel.php
Common.php
通过以上三步调用接口,就可以获取到用户的微信账号信息了。
大家可以认真看看代码, 里面很多地方我都带上了注释,很容易理解。希望想学习的朋友可以认真看看。
如果此博文有哪里讲得让人难以理解的,欢迎留言交流,如文章有解释出的地方,欢迎指出。
如果您觉得能在此博文学到新知识,请在下方为我顶一个,如文章有解释错的地方,欢迎指出。
互相学习,共同进步!
联系客服