微信授权登录并获取用户信息接口开发近排在做微信接口开发,所以总结一下微信授权登录并获取用户信息 这个接口的开发流程。 一、首先你的微信公众号要获得相应的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)回调页面的URL 19 */ 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 //获取用户的openid 30 $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请求url 43 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和AppSecret 11 $this->appId = 'wx0000000000000000'; 12 $this->appSecret = '00000000000000000000000000000'; 13 $this->token = '00000000'; 14 } 15 16 /** 17 * 获取微信授权url 18 * @param string 授权后跳转的URL 19 * @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
获取access_token的控制器代码
WxModel.php
获取access_token的Model代码
这里附上参数说明 请求参数说明:
响应返回值说明: 当返回错误时是这样子的:
3、通过access_token调用接口(获取用户信息) (1)access_tokec有效且未超时; (2)微信用户已授权给第三方应用账号相应的接口作用域(scope)。
以下是获取用户信息的代码 weixin.php
获取用户信息的Controller
WxModel.php
获取用户信息的Model
Common.php
获取用户信息的自定义函数
通过以上三步调用接口,就可以获取到用户的微信账号信息了。 大家可以认真看看代码, 里面很多地方我都带上了注释,很容易理解。希望想学习的朋友可以认真看看。
如果此博文有哪里讲得让人难以理解的,欢迎留言交流,如文章有解释出的地方,欢迎指出。
如果您觉得能在此博文学到新知识,请在下方为我顶一个,如文章有解释错的地方,欢迎指出。 互相学习,共同进步!
|
|