分享

微信授权登录并获取用户信息接口开发

 quasiceo 2016-07-06

微信授权登录并获取用户信息接口开发

  近排在做微信接口开发,所以总结一下微信授权登录并获取用户信息 这个接口的开发流程。

一、首先你的微信公众号要获得相应的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调用接口(获取用户信息)
  获取access_token后,进行接口调用,有以下前提:

  (1)access_tokec有效且未超时;

  (2)微信用户已授权给第三方应用账号相应的接口作用域(scope)。

  

  以下是获取用户信息的代码

  weixin.php

获取用户信息的Controller

  WxModel.php

获取用户信息的Model

  Common.php

获取用户信息的自定义函数

  

  通过以上三步调用接口,就可以获取到用户的微信账号信息了。

  大家可以认真看看代码, 里面很多地方我都带上了注释,很容易理解。希望想学习的朋友可以认真看看。

  

 

  如果此博文有哪里讲得让人难以理解的,欢迎留言交流,如文章有解释出的地方,欢迎指出。

  

  如果您觉得能在此博文学到新知识,请在下方为我顶一个,如文章有解释错的地方,欢迎指出。

   互相学习,共同进步!

 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约