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

  近距离做微信交流勋绩,从此,总结微信鉴定合格登录和作客用户信息 该代言人的勋绩快跑。

一、率先,你的微信大众号理应记载相配的AppID A。,声请微信登录并经过复核,只要因此,才干启动作客快跑。。

二、鉴定合格工艺流程

1、工艺流程阐明

(1). 第三方起航微信鉴定合格登录需求,微信用户容许鉴定合格第三方敷用后,微信将拉敷用程序或重取向到第三方网站,并具有鉴定合格的暂时客票法典决定因素;

(2). 经过法典决定因素添加AppID、AppStand等,经过API使更叠产生作客预兆:预示或象征;

(3). 经过Access预兆:预示或象征代言人命令,获取用户的根本材料资源或帮忙用户博得根本的OPER。

2、获取Access预兆:预示或象征序列图:

三、勋绩(我运用CI边框),竟,所若干边框都是类似于的。,MVC花样就可以了。

1、需求CODE

  

   

附加的是需求决定因素表现和使恢复原状值表现。

  需求决定因素直立支柱:

  回报或回复使恢复原状值表现:

  需求成时,将重取向到需求决定因素说话中肯重取向值URI的值,实际的,使恢复原状到$->用户信息 = 这事-> GETWXUSER信息(),当时的使恢复原状到GETWXUSeriFo()方式,此刻

            鉴定合格暂时票据的获取(法典)
            $code = 获取[法典]

这当事人曾经可以博得法典的值。。当时的停止次货步。。

2、经过code获取access_token

  

 1 php
 2class weixinController extends CI_Controller {
 3public$userInfo;
 4public$wxId;
 5 6 7publicfunction __construct(){
 8             parent::__construct();
 910//一旦用户作客该模块,登录鉴定合格,获取用户信息11$this->userInfo = $this->getWxUserInfo();
12        }
131415/**
16         * 确保通常用户在推特中翻开,获取用户信息
17         *
18         * @param string $url 获取到微信鉴定合格暂时票据(code)回调页表的URL
19*/20privatefunction getWxUserInfo($url = '''') {
21//Wechat Marker(自创)22$wxSign = $this->input->cookie(''wxSign'');
23//让我们看一眼在本国的cookie中即使有本人微信口头禅。,
24            //假设在,可以经过$wxSign到redis里取出微信个人信息(由于在概要的取到微信个人信息,我会把本人拷贝拘押到ReDIS维修中停止缓存。25if (!empty($wxSign)) {
26//假设在,缓存的材料是从ReDIS中检索的。27$userInfo = $this->model->redisCache->getData("weixin:sign_{$wxSign}");
28if (!empty($userInfo)) {
29//获取用户的OpenID30$this->wxId = $userInfo[''openid''];
31//把它藏在爆竹里32$this->input->set_cookie(''wxId'', $this->wxId, 60*60*24*7);
33return$userInfo;
34                }
35            }
3637//鉴定合格暂时票据的获取(法典)38$code = $_GET[法典]];
39if (empty($code)) {
40if (empty($url)) {
41$url = rtirm($_SERVER[''QUERY_STRING''], ''/'');
42//上网鸣禽鉴定合格需求URL,当时的重取向需求URL43                     redirect($this->model->wx->getOAuthUrl(baseUrl($url)));
44                }
45            }
46/*这是次货步。:经过code获取access_token****************/47$result = $this->model->wx->getOauthAccessToken($code);
4849//假设有误差50if (伊塞特($result[''errcode''])) {
51returnarray(MSG)=鉴定合格失败,请接触客户服务局。,产物$result);
52            }
5354//此刻,已作客Access预兆:预示或象征。55$this->wxId = $result[''openid''];
56$accessToken = $result[''access_token''];
57$openId = $result[''openid''];
5859//在Cookie中贮藏OpenID和作客预兆:预示或象征60$this->input->set_cookie(''wx_id'', $this->wxId, 60*60*24*7);
61$this->input->set_cookie(''access_token'', $accessToken);

获取作客预兆:预示或象征的为引航法典

  

在这里是决定因素的表现。

  需求决定因素直立支柱:

  回报或回复使恢复原状值表现:

  这是当使恢复原状误差时产生的局面。:

3、经过Access预兆:预示或象征命令代言人(获取用户信息)
博得作客预兆:预示或象征晚年的,代言人命令,有以下必要的:

  (1)Access ToKEC无效且不使超过时期。;

  (2)小额学分用户已被鉴定合格进入相配的代言人SC。。

  上面是获取用户信息的法典

  

 1 php
 2class weixinController extends CI_Controller {
 3public$userInfo;
 4public$wxId;
 5 6 7publicfunction __construct(){
 8             parent::__construct();
 910//一旦用户作客该模块,登录鉴定合格,获取用户信息11$this->userInfo = $this->getWxUserInfo();
12        }
131415/**
16         * 确保通常用户在推特中翻开,获取用户信息
17         *
18         * @param string $url 获取到微信鉴定合格暂时票据(code)回调页表的URL
19*/20privatefunction getWxUserInfo($url = '''') {
21//Wechat Marker(自创)22$wxSign = $this->input->cookie(''wxSign'');
23//让我们看一眼在本国的cookie中即使有本人微信口头禅。,
24            //假设在,可以经过$wxSign到redis里取出微信个人信息(由于在概要的取到微信个人信息,我会把本人拷贝拘押到ReDIS维修中停止缓存。25if (!empty($wxSign)) {
26//假设在,缓存的材料是从ReDIS中检索的。27$userInfo = $this->model->redisCache->getData("weixin:sign_{$wxSign}");
28if (!empty($userInfo)) {
29//获取用户的OpenID30$this->wxId = $userInfo[''openid''];
31//把它藏在爆竹里32$this->input->set_cookie(''wxId'', $this->wxId, 60*60*24*7);
33return$userInfo;
34                }
35            }
3637//鉴定合格暂时票据的获取(法典)38$code = $_GET[法典]];
39if (empty($code)) {
40if (empty($url)) {
41$url = rtirm($_SERVER[''QUERY_STRING''], ''/'');
42//上网鸣禽鉴定合格需求URL,当时的重取向需求URL43                     redirect($this->model->wx->getOAuthUrl(baseUrl($url)));
44                }
45            }
46/*这是次货步。:经过code获取access_token****************/47$result = $this->model->wx->getOauthAccessToken($code);
4849//假设有误差50if (伊塞特($result[''errcode''])) {
51returnarray(MSG)=鉴定合格失败,请接触客户服务局。,产物$result);
52            }
5354//此刻,已作客Access预兆:预示或象征。55$this->wxId = $result[''openid''];
56$accessToken = $result[''access_token''];
57$openId = $result[''openid''];
5859//在Cookie中贮藏OpenID和作客预兆:预示或象征60$this->input->set_cookie(''wx_id'', $this->wxId, 60*60*24*7);
61$this->input->set_cookie(''access_token'', $accessToken);
6263/*这是第三步。:经过Access预兆:预示或象征命令代言人,截用户信息*/64$this->userInfo = $this->model->wx->getUserInfo($openId, $accessToken);
6566//自定义微信最好的认出67$wxSign =substr(md5($this->wxId.''k2a5dd''), 8, 16);
68//把它保在爆竹里69$this->input->set_cookie(''wxSign'', $wxSign, 60*60*24*7);
70//将个人信息缓存到ReDIS中71$this->library->redisCache->set("weixin:sign_{$wxSign}", $userInfo, 60*60*24*7);
72return$userInfo;
73        }
74757677787980818283848586    }
87 ?>

获取用户信息的为引航

  

  1 php
  2class WxModel extends ModelBase{
  3public$appId;
  4public$appSecret;
  5public$token;
  6  7publicfunction __construct() {
  8             parent::__construct();
  9 10//鼓励的搬家敷用程序的AppID和AppS秘密 11$this->appId = ''wx0000000000000000'';
 12$this->appSecret = ''00000000000000000000000000000'';
 13$this->token = ''00000000'';
 14        }
 15 16 17/**
 18         * 上网鸣禽的鉴定合格URL
 19         * @param string 鉴定合格后跳过的URL
 20         * @param bool 只获取OpenID,true时,缺少鉴定合格页表记号,但唯一的获取用户的OpenID,假时期,记号鉴定合格页表,用户信息可以经过OpenID博得
 21         *   
 22*/ 23publicfunction getOAuthUrl($redirectUrl, $openIdOnly, $state = '''') {
 24$redirectUrl = urlencode($redirectUrl);
 25$scope = $openIdOnly ? ''snsapi_base'' : ''snsapi_userinfo'';
 26$oAuthUrl = "{$this->appId}&redirect_uri={$redirectUrl}&response_type=code&scope=$scope&state=$state#wechat_redirect";
 27return$oAuthUrl;
 28        }
 29 30 31/**
 32        * 获取access_token
 33*/ 34publicfunction getoAuthAccessToken($code) {
 35return json_decode(file_get_contents("{$this->AppId}&secret={$this->AppSecret}&code={$authCode}&grant_type=authorization_code",true);
 36        }
 37 38/**
 39        * 获取用户信息  
 40*/ 41publicfunction getUserInfo($openId, $accessToken) {
 42$url = '''';
 43//获取用户的鸣禽账号信息 44$userInfo = $this->callApi("$url?access_token=$accessToken&openid=$openId&lang=zh-CN");
 45 46if ($userInfo[''errcode'']) {
 47returnarray(''msg''=>''获取用户信息失败,请接触客户服务局。, $userInfo);
 48            }
 49 50$userInfo[''wx_id''] = $openId;
 51 52return$userInfo;
 53        }
 54 55/**
 56         * 启动API需求,记载使恢复原状产物
 57         * @param string 需求URL
 58         * @param mixed 需求决定因素 (街区字母行)
 59         * @param string 需求典型 (博得帖子)
 60         * @return array        
 61*/ 62publicfunction callApi($apiUrl, $param = array(), $method = 记载) {
 63$result = curl_request_json($error, $apiUrl, 帕拉姆, $method);
 64//假设使恢复原状的街区有误差法典,或许变量$值有值 65if (!empty($result[''errcode''])) {
 66$errorCode = $result[''errcode''];
 67$errorMsg = $result[ ErrMSG ]];
 68             } elseif ($error != false) {
 69$errorCode = $error[误差码]];
 70$errorMsg = $error[''errorMessage''];
 71            }
 72 73if (伊塞特($errorCode)) {
 74//将其拔出日记证件 75file_put_contents("/data/", "callApi:url=$apiUrl,error=[$errorCode]$errorMsg");
 76 77if ($errorCode === 40001) {
 78//尝试感化Access预兆:预示或象征并重试 79try {
 80$pos = strpos(strtolower($url), ''access_token='');
 81if ($pos !==false ) {
 82$pos += strlen(''access_token='');
 83$pos2 = strpos($apiUrl, ''&'' ,$pos);
 84$accessTokened = substr($apiUrl, $pos, $pos2 === false ? null : ($pos2 - $pos));
 85return$this->callApi(str_replace($accessTokened, $this->_getApiToken(true), $apiUrl), $param, $method);
 86                        }
 87                     }catch (WeixinException $e) { 
 88 89                    }
 90                }
 91//在在这里射出非常,你所拥若干是未知的。 92thrownew WeixinException($errorMessage, $errorCode);
 93            }
 94return$result;
 95        }
 96 97/**
 98        * 上网鸣禽 api 的 access_token 。 在不同 OAuth 说话中肯 access_token ,求教于  =%E8%8E%B7%E5%8F%96access_token
 99        *
100        * @param bool 即使力革新 accessToken
101*/102privatefunction _getApiToken($forceRefresh = false) {
103//率先反省即使已在ReIDIS中缓存Access预兆:预示或象征104$accessToken = $this->library->redisCache->get(''Weixin:AccessToken'');
105if($forceRefresh || empty($accessToken)) {
106$result = $this->callApi("{$this->appId}&secret={$this->appSecret}");
107$accessToken = $result[''access_token''];
108$expire = max(1, intval($result[''expires_in'']) - 60);
109//缓存作客预兆:预示或象征到RIDIS110$this->library->redisCache->set(''Weixin:AccessToken'', $accessToken, $expire);
111            }
112return$accessToken;
113        }
114115116117118119120121 ?>

一种获取用户信息的在前的

  Common.php

  1 php
  2/**
  3     *   启动HTTP需求,并以JSON体式使恢复原状回报或回复材料
  4     *   @param array 误差信息  街区(误差法典), $errorMessage)
  5     *   @param string 需求Url
  6     *   @param array 需求决定因素
  7     *   @param string 需求典型(博得帖子)
  8     *   @param int 使超过时期时期
  9     *   @param array 额定分配
 10     *   
 11     *   @return array
 12*/ 13publicfunction curl_request_json(&$error, $url, $param = array(), $method = 记载, $timeout = 10, $exOptions = null) {
 14$error = false;
 15$responseText = curl_request_text($error, $url, $param, $method, $timeout, $exOptions);
 16$response = null;
 17if ($error == false && $responseText > 0) {
 18$response = json_decode($responseText, true);
 19 20if ($response == null) {
 21$error = array(ErrOr码)=>1, ''errorMessage''=>''json decode 失败, ''responseText''=>$responseText);
 22//在日记证件中记载误差音讯 23$logText = "json decode fail : $url";
 24if (!empty($param)) {
 25$logText .= ", param=".json_encode($param);
 26                }
 27$logText .= ", responseText=$responseText";
 28file_put_contents("/data/", $logText);
 29            }
 30        }
 31return$response;
 32    }
 33 34/**
 35    *  启动HTTP需求,并使恢复原状回报或回复发短信
 36    *   @param array 误差信息  街区(误差法典), $errorMessage)
 37    *   @param string 需求Url
 38    *   @param array 需求决定因素
 39    *   @param string 需求典型(博得帖子)
 40    *   @param int 使超过时期时期
 41    *   @param array 额定分配
 42    *   
 43    *   @return string
 44*/ 45publicfunction curl_request_text(&$error, $url, $param = array(), $method = 记载, $timeout = 15, $exOptions = NULL) {
 46//决定即使启用卷曲物冲洗 47if (!function_exists(''curl_init'')) exit(请) open this curl 冲洗名);
 48 49//大写需求法 50$method = strtoupper($method);
 51 52$ch = curl_init();
 53         curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
 54         curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
 55         curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
 56         curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
 57         curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
 58         curl_setopt($ch, CURLOPT_HEADER, false);
 59if (伊塞特($_SERVER[''HTTP_USER_AGENT''])) curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER[''HTTP_USER_AGENT'']);
 60if (伊塞特($_SERVER[''HTTP_REFERER''])) curl_setopt($ch, CURLOPT_REFERER, $_SERVER[''HTTP_REFERER'']);
 61         curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
 62switch ($method) {
 63case 邮政
 64                 curl_setopt($ch, CURLOPT_POST, true);
 65if (!empty($param)) {
 66                     curl_setopt($ch, CURLOPT_POSTFIELDS, (is_array($param)) ? http_build_query($param) : $param);
 67                }
 68break;
 69 70case 记载:
 71case 72if ($method == 截) {
 73                     curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 截);
 74                }
 75if (!empty($param)) {
 76$url = $url.(strpos($url, ''?'') ? ''&'' : ''?'').(is_array($param) ? http_build_query($param) : $param);
 77                }
 78break;
 79        }
 80         curl_setopt($ch, CURLINFO_HEADER_OUT, true);
 81         curl_setopt($ch, CURLOPT_URL, $url);
 82//设置附加分配 83if (!empty($exOptions)) {
 84foreach ($exOptionsas$k => $v) {
 85                 curl_setopt($ch, $k, $v);
 86            }
 87        }
 88$response = curl_exec($ch);
 89 90$error = false;
 91//看一眼有缺少错。 92$errorCode = curl_errno($ch);
 93if ($errorCode) {
 94$errorMessage = curl_error($ch);
 95$error = array(Error Cal码)$errorCode, ''errorMessage''=>$errorMessage);
 96//在日记证件中写信反映误差 97$logText = "$method$url: [$errorCode]$errorMessage";
 98if (!empty($param)) $logText .= ",$param".json_encode($param);
 99file_put_contents(''/data/'', $logText);
100        }
101102         curl_close($ch);
103104return$response;
105106107108    }
109110111112113114115116117118119120121122 ?>

获取用户信息的自定义功能

  经过上述的三个举步命令代言人,你可以记载用户的微信账号信息。。

  你可以慎看法典。, 我在很多地区都产生了正文。,这简单明了了解。。贫穷那些的想学的资助者可以负责的看一下。。

  假设这事视频博客里有是什么很难了解的,欢送留言使更叠产生,假设文字中有解说,欢送按生活指数调整。

  假设你以为你可以在在这里学到已确定的新东西,请在上面给我顶本人。,假设文字中有诸如此类曲解,欢送按生活指数调整。

   彼此竞争,共同进步!

Add a Comment

电子邮件地址不会被公开。 必填项已用*标注