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

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

一、首先你的微信公众号要获得相应的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()方法,此时

1
2
//获取授权临时票据(code)
$code = $_GET [ 'code' ];

 这行也已经能获取得到code的值了。接着进行第二步。

 

2、通过code获取access_token

  weixin.php

复制代码
 1 <?php
 2     class weixinController extends CI_Controller {
 3         public $userInfo;
 4         public $wxId;
 5 
 6 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值