


Connexion autorisée à WeChat et obtention de l'interface d'informations utilisateur
Mar 01, 2017 am 09:19 AMJ'ai récemment développé l'interface WeChat, je vais donc résumer le processus de développement de cette interface pour autoriser la connexion avec WeChat et obtenir des informations sur l'utilisateur.
1. Tout d'abord, votre compte public WeChat doit obtenir l'AppID et l'AppSecret correspondants. Ce n'est qu'après avoir demandé la connexion à WeChat et réussi l'examen que vous pourrez démarrer le processus d'accès.
2. Processus d'autorisation
1. Description du processus
(1) Un tiers lance une demande de connexion d'autorisation WeChat, et après que l'utilisateur WeChat autorise l'autorisation. de l'application tierce, WeChat lancera l'application ou redirigera vers un site Web tiers et apportera le paramètre de code de ticket temporaire d'autorisation
(2). , etc. via le paramètre code, via l'API En échange de access_token;
(3) Effectuer des appels d'interface via access_token pour obtenir les ressources de données de base de l'utilisateur ou aider l'utilisateur à implémenter les bases. opérations.
2. Obtenez le diagramme de séquence access_token :
3. Développement (J'utilise le framework CI, en fait, n'importe quel framework est le même, MVC Le mode fera l'affaire)
1. Demander CODE
weixin.php
<?php class weixinController extends CI_Controller { public $userInfo; public $wxId; public function __construct(){ parent::__construct(); //只要用戶一訪問(wèn)此模塊,就登錄授權(quán),獲取用戶信息 $this->userInfo = $this->getWxUserInfo(); } /** * 確保當(dāng)前用戶是在微信中打開,并且獲取用戶信息 * * @param string $url 獲取到微信授權(quán)臨時(shí)票據(jù)(code)回調(diào)頁(yè)面的URL */ private function getWxUserInfo($url = '') { //微信標(biāo)記(自己創(chuàng)建的) $wxSign = $this->input->cookie('wxSign'); //先看看本地cookie里是否存在微信唯一標(biāo)記, //假如存在,可以通過(guò)$wxSign到redis里取出微信個(gè)人信息(因?yàn)樵诘谝淮稳〉轿⑿艂€(gè)人信息,我會(huì)將其保存一份到redis服務(wù)器里緩存著) if (!empty($wxSign)) { //如果存在,則從Redis里取出緩存了的數(shù)據(jù) $userInfo = $this->model->redisCache->getData("weixin:sign_{$wxSign}"); if (!empty($userInfo)) { //獲取用戶的openid $this->wxId = $userInfo['openid']; //將其存在cookie里 $this->input->set_cookie('wxId', $this->wxId, 60*60*24*7); return $userInfo; } } //獲取授權(quán)臨時(shí)票據(jù)(code) $code = $_GET['code']; if (empty($code)) { if (empty($url)) { $url = rtirm($_SERVER['QUERY_STRING'], '/'); //到WxModel.php里獲取到微信授權(quán)請(qǐng)求URL,然后redirect請(qǐng)求url redirect($this->model->wx->getOAuthUrl(baseUrl($url))); } } } } ?>
Obtenir le code du contr?leur
Wxmodel .php
<?php class WxModel extends ModelBase{ public $appId; public $appSecret; public $token; public function __construct() { parent::__construct(); //審核通過(guò)的移動(dòng)應(yīng)用所給的AppID和AppSecret $this->appId = 'wx0000000000000000'; $this->appSecret = '00000000000000000000000000000'; $this->token = '00000000'; } /** * 獲取微信授權(quán)url * @param string 授權(quán)后跳轉(zhuǎn)的URL * @param bool 是否只獲取openid,true時(shí),不會(huì)彈出授權(quán)頁(yè)面,但只能獲取用戶的openid,而false時(shí),彈出授權(quán)頁(yè)面,可以通過(guò)openid獲取用戶信息 * */ public function getOAuthUrl($redirectUrl, $openIdOnly, $state = '') { $redirectUrl = urlencode($redirectUrl); $scope = $openIdOnly ? 'snsapi_base' : 'snsapi_userinfo'; $oAuthUrl = "https://open.weixin.qq.com/connect/oauth2/authorize?appid={$this->appId}&redirect_uri={$redirectUrl}&response_type=code&scope=$scope&state=$state"; return $oAuthUrl; } 獲取code的Model代碼
Obtenir le code modèle du code
Ci-joint la description du paramètre de requête et la description de la valeur de retour
Description du paramètre de requête?:
Description de la valeur de retour de la réponse?:
Lorsque la requête réussit, elle sera redirigée vers la valeur de redirect_uri dans le paramètre de requête. En fait, elle reviendra à la ligne $this->userInfo = $this->getWxUserInfo(); dans weixin.php, puis entrez à nouveau Accédez à la méthode getWxUserInfo() à ce stade, la ligne
//獲取授權(quán)臨時(shí)票據(jù)(code) $code = $_GET['code'];
peut également obtenir la valeur de. le code. Passez ensuite à la deuxième étape. ?>>
WxModel.phpObtenez le code du modèle d'access_tokenuserInfo = $this->getWxUserInfo(); } /** * 確保當(dāng)前用戶是在微信中打開,并且獲取用戶信息 * * @param string $url 獲取到微信授權(quán)臨時(shí)票據(jù)(code)回調(diào)頁(yè)面的URL */ private function getWxUserInfo($url = '') { //微信標(biāo)記(自己創(chuàng)建的) $wxSign = $this->input->cookie('wxSign'); //先看看本地cookie里是否存在微信唯一標(biāo)記, //假如存在,可以通過(guò)$wxSign到redis里取出微信個(gè)人信息(因?yàn)樵诘谝淮稳〉轿⑿艂€(gè)人信息,我會(huì)將其保存一份到redis服務(wù)器里緩存著) if (!empty($wxSign)) { //如果存在,則從Redis里取出緩存了的數(shù)據(jù) $userInfo = $this->model->redisCache->getData("weixin:sign_{$wxSign}"); if (!empty($userInfo)) { //獲取用戶的openid $this->wxId = $userInfo['openid']; //將其存在cookie里 $this->input->set_cookie('wxId', $this->wxId, 60*60*24*7); return $userInfo; } } //獲取授權(quán)臨時(shí)票據(jù)(code) $code = $_GET['code']; if (empty($code)) { if (empty($url)) { $url = rtirm($_SERVER['QUERY_STRING'], '/'); //到WxModel.php里獲取到微信授權(quán)請(qǐng)求URL,然后redirect請(qǐng)求url redirect($this->model->wx->getOAuthUrl(baseUrl($url))); } } /***************這里開始第二步:通過(guò)code獲取access_token****************/ $result = $this->model->wx->getOauthAccessToken($code); //如果發(fā)生錯(cuò)誤 if (isset($result['errcode'])) { return array('msg'=>'授權(quán)失敗,請(qǐng)聯(lián)系客服','result'=>$result); } //到這一步就說(shuō)明已經(jīng)取到了access_token $this->wxId = $result['openid']; $accessToken = $result['access_token']; $openId = $result['openid']; //將openid和accesstoken存入cookie中 $this->input->set_cookie('wx_id', $this->wxId, 60*60*24*7); $this->input->set_cookie('access_token', $accessToken); 獲取access_token的控制器代碼Ci-joint la description du paramètre
Description du paramètre de requête?:
<?php class WxModel extends ModelBase{ public $appId; public $appSecret; public $token; public function __construct() { parent::__construct(); //審核通過(guò)的移動(dòng)應(yīng)用所給的AppID和AppSecret $this->appId = 'wx0000000000000000'; $this->appSecret = '00000000000000000000000000000'; $this->token = '00000000'; } /** * 獲取微信授權(quán)url * @param string 授權(quán)后跳轉(zhuǎn)的URL * @param bool 是否只獲取openid,true時(shí),不會(huì)彈出授權(quán)頁(yè)面,但只能獲取用戶的openid,而false時(shí),彈出授權(quán)頁(yè)面,可以通過(guò)openid獲取用戶信息 * */ public function getOAuthUrl($redirectUrl, $openIdOnly, $state = '') { $redirectUrl = urlencode($redirectUrl); $scope = $openIdOnly ? 'snsapi_base' : 'snsapi_userinfo'; $oAuthUrl = "https://open.weixin.qq.com/connect/oauth2/authorize?appid={$this->appId}&redirect_uri={$redirectUrl}&response_type=code&scope=$scope&state=$state#wechat_redirect"; return $oAuthUrl; } /** * 獲取access_token */ public function getoAuthAccessToken($code) { return json_decode(file_get_contents("https://api.weixin.qq.com/sns/oauth2/access_token?appid={$this->AppId}&secret={$this->AppSecret}&code={$authCode}&grant_type=authorization_code",true); } 獲取access_token的Model代碼
Description de la valeur de retour de la réponse?:
Lorsqu'une erreur est renvoyé, il ressemble à ceci?:
3. Appelez l'interface via access_token (obtenir les informations utilisateur)
Après avoir obtenu le access_token, créez l'interface. appel avec les conditions préalables suivantes?: (1) access_tokec est valide et n'a pas expiré
(2) les utilisateurs de WeChat ont autorisé la portée de l'interface correspondante (portée) de l'application tierce?; compte.
Contr?leur pour obtenir des informations utilisateur
WxModel.phpModèle pour obtenir des informations sur l'utilisateuruserInfo = $this->getWxUserInfo(); } /** * 確保當(dāng)前用戶是在微信中打開,并且獲取用戶信息 * * @param string $url 獲取到微信授權(quán)臨時(shí)票據(jù)(code)回調(diào)頁(yè)面的URL */ private function getWxUserInfo($url = '') { //微信標(biāo)記(自己創(chuàng)建的) $wxSign = $this->input->cookie('wxSign'); //先看看本地cookie里是否存在微信唯一標(biāo)記, //假如存在,可以通過(guò)$wxSign到redis里取出微信個(gè)人信息(因?yàn)樵诘谝淮稳〉轿⑿艂€(gè)人信息,我會(huì)將其保存一份到redis服務(wù)器里緩存著) if (!empty($wxSign)) { //如果存在,則從Redis里取出緩存了的數(shù)據(jù) $userInfo = $this->model->redisCache->getData("weixin:sign_{$wxSign}"); if (!empty($userInfo)) { //獲取用戶的openid $this->wxId = $userInfo['openid']; //將其存在cookie里 $this->input->set_cookie('wxId', $this->wxId, 60*60*24*7); return $userInfo; } } //獲取授權(quán)臨時(shí)票據(jù)(code) $code = $_GET['code']; if (empty($code)) { if (empty($url)) { $url = rtirm($_SERVER['QUERY_STRING'], '/'); //到WxModel.php里獲取到微信授權(quán)請(qǐng)求URL,然后redirect請(qǐng)求url redirect($this->model->wx->getOAuthUrl(baseUrl($url))); } } /***************這里開始第二步:通過(guò)code獲取access_token****************/ $result = $this->model->wx->getOauthAccessToken($code); //如果發(fā)生錯(cuò)誤 if (isset($result['errcode'])) { return array('msg'=>'授權(quán)失敗,請(qǐng)聯(lián)系客服','result'=>$result); } //到這一步就說(shuō)明已經(jīng)取到了access_token $this->wxId = $result['openid']; $accessToken = $result['access_token']; $openId = $result['openid']; //將openid和accesstoken存入cookie中 $this->input->set_cookie('wx_id', $this->wxId, 60*60*24*7); $this->input->set_cookie('access_token', $accessToken); /*******************這里開始第三步:通過(guò)access_token調(diào)用接口,取出用戶信息***********************/ $this->userInfo = $this->model->wx->getUserInfo($openId, $accessToken); //自定義微信唯一標(biāo)識(shí)符 $wxSign =substr(md5($this->wxId.'k2a5dd'), 8, 16); //將其存到cookie里 $this->input->set_cookie('wxSign', $wxSign, 60*60*24*7); //將個(gè)人信息緩存到redis里 $this->library->redisCache->set("weixin:sign_{$wxSign}", $userInfo, 60*60*24*7); return $userInfo; } } ?> 獲取用戶信息的ControllerCommon.php
Fonction personnalisée Obtenir les informations utilisateur
<?php class WxModel extends ModelBase{ public $appId; public $appSecret; public $token; public function __construct() { parent::__construct(); //審核通過(guò)的移動(dòng)應(yīng)用所給的AppID和AppSecret $this->appId = 'wx0000000000000000'; $this->appSecret = '00000000000000000000000000000'; $this->token = '00000000'; } /** * 獲取微信授權(quán)url * @param string 授權(quán)后跳轉(zhuǎn)的URL * @param bool 是否只獲取openid,true時(shí),不會(huì)彈出授權(quán)頁(yè)面,但只能獲取用戶的openid,而false時(shí),彈出授權(quán)頁(yè)面,可以通過(guò)openid獲取用戶信息 * */ public function getOAuthUrl($redirectUrl, $openIdOnly, $state = '') { $redirectUrl = urlencode($redirectUrl); $scope = $openIdOnly ? 'snsapi_base' : 'snsapi_userinfo'; $oAuthUrl = "https://open.weixin.qq.com/connect/oauth2/authorize?appid={$this->appId}&redirect_uri={$redirectUrl}&response_type=code&scope=$scope&state=$state#wechat_redirect"; return $oAuthUrl; } /** * 獲取access_token */ public function getoAuthAccessToken($code) { return json_decode(file_get_contents("https://api.weixin.qq.com/sns/oauth2/access_token?appid={$this->AppId}&secret={$this->AppSecret}&code={$authCode}&grant_type=authorization_code",true); } /** * 獲取用戶信息 */ public function getUserInfo($openId, $accessToken) { $url = 'https://api.weixin.qq.com/sns/userinfo'; //獲取用戶微信賬號(hào)信息 $userInfo = $this->callApi("$url?access_token=$accessToken&openid=$openId&lang=zh-CN"); if ($userInfo['errcode']) { return array('msg'=>'獲取用戶信息失敗,請(qǐng)聯(lián)系客服', $userInfo); } $userInfo['wx_id'] = $openId; return $userInfo; } /** * 發(fā)起Api請(qǐng)求,并獲取返回結(jié)果 * @param string 請(qǐng)求URL * @param mixed 請(qǐng)求參數(shù) (array|string) * @param string 請(qǐng)求類型 (GET|POST) * @return array */ public function callApi($apiUrl, $param = array(), $method = 'GET') { $result = curl_request_json($error, $apiUrl, $params, $method); //假如返回的數(shù)組有錯(cuò)誤碼,或者變量$error也有值 if (!empty($result['errcode'])) { $errorCode = $result['errcode']; $errorMsg = $result['errmsg']; } else if ($error != false) { $errorCode = $error['errorCode']; $errorMsg = $error['errorMessage']; } if (isset($errorCode)) { //將其插入日志文件 file_put_contents("/data/error.log", "callApi:url=$apiUrl,error=[$errorCode]$errorMsg"); if ($errorCode === 40001) { //嘗試更正access_token后重試 try { $pos = strpos(strtolower($url), 'access_token='); if ($pos !==false ) { $pos += strlen('access_token='); $pos2 = strpos($apiUrl, '&' ,$pos); $accessTokened = substr($apiUrl, $pos, $pos2 === false ? null : ($pos2 - $pos)); return $this->callApi(str_replace($accessTokened, $this->_getApiToken(true), $apiUrl), $param, $method); } }catch (WeixinException $e) { } } //這里拋出異常,具有的就不詳說(shuō)了 throw new WeixinException($errorMessage, $errorCode); } return $result; } /** * 獲取微信 api 的 access_token 。 不同于 OAuth 中的 access_token ,參見(jiàn) http://mp.weixin.qq.com/wiki/index.php?title=%E8%8E%B7%E5%8F%96access_token * * @param bool 是否強(qiáng)制刷新 accessToken */ private function _getApiToken($forceRefresh = false) { //先查看一下redis里是否已經(jīng)緩存過(guò)access_token $accessToken = $this->library->redisCache->get('Weixin:AccessToken'); if($forceRefresh || empty($accessToken)) { $result = $this->callApi("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$this->appId}&secret={$this->appSecret}"); $accessToken = $result['access_token']; $expire = max(1, intval($result['expires_in']) - 60); //將access_token緩存到redis里去 $this->library->redisCache->set('Weixin:AccessToken', $accessToken, $expire); } return $accessToken; } ?>
En appelant l'interface dans les trois étapes ci-dessus, les informations du compte WeChat de l'utilisateur peuvent être obtenues.
Vous pouvez examiner attentivement le code. J'y ai commenté de nombreux endroits, ce qui le rend facile à comprendre. J'espère que les amis qui veulent apprendre pourront y regarder de plus près.Pour plus d'articles liés à la connexion autorisée de WeChat et à l'accès à l'interface d'informations utilisateur, veuillez faire attention au site Web PHP chinois?!

Outils d'IA chauds

Undress AI Tool
Images de déshabillage gratuites

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
échangez les visages dans n'importe quelle vidéo sans effort grace à notre outil d'échange de visage AI entièrement gratuit?!

Article chaud

Outils chauds

Bloc-notes++7.3.1
éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

PHP est un langage de script open source largement utilisé dans le développement Web et la programmation c?té serveur, notamment dans le développement de WeChat. Aujourd'hui, de plus en plus d'entreprises et de développeurs commencent à utiliser PHP pour le développement de WeChat, car il est devenu un langage de développement vraiment facile à apprendre et à utiliser. Dans le développement de WeChat, le cryptage et le décryptage des messages sont une question très importante car ils impliquent la sécurité des données. Pour les messages sans méthodes de cryptage et de décryptage, les pirates peuvent facilement obtenir les données, ce qui constitue une menace pour les utilisateurs.

Dans le développement des comptes publics WeChat, la fonction de vote est souvent utilisée. La fonction de vote est un excellent moyen pour les utilisateurs de participer rapidement aux interactions, et c'est également un outil important pour organiser des événements et recueillir des opinions. Cet article vous présentera comment utiliser PHP pour implémenter la fonction de vote WeChat. Obtenez l'autorisation du compte officiel WeChat. Tout d'abord, vous devez obtenir l'autorisation du compte officiel WeChat. Sur la plateforme publique WeChat, vous devez configurer l'adresse API du compte public WeChat, le compte officiel et le token correspondant au compte public. Dans le processus de développement en langage PHP, nous devons utiliser le PH officiellement fourni par WeChat

Avec la popularité de WeChat, de plus en plus d’entreprises commencent à l’utiliser comme outil marketing. La fonction de messagerie de groupe WeChat est l'un des moyens importants permettant aux entreprises de mener du marketing WeChat. Cependant, si vous comptez uniquement sur l’envoi manuel, il s’agit d’une tache extrêmement longue et laborieuse pour les spécialistes du marketing. Il est donc particulièrement important de développer un outil de messagerie de masse WeChat. Cet article présentera comment utiliser PHP pour développer des outils d'envoi de masse WeChat. 1. Travail de préparation Pour développer les outils d'envoi de masse WeChat, nous devons ma?triser les points techniques suivants : Connaissance de base du développement de la plateforme publique PHP WeChat Outils de développement : Sub

WeChat est actuellement l'une des plateformes sociales comptant la plus grande base d'utilisateurs au monde. Avec la popularité de l'Internet mobile, de plus en plus d'entreprises commencent à prendre conscience de l'importance du marketing WeChat. Lors du marketing WeChat, le service client est un élément crucial. Afin de mieux gérer la fenêtre de discussion du service client, nous pouvons utiliser le langage PHP pour le développement de WeChat. 1. Introduction au développement PHP WeChat PHP est un langage de script open source c?té serveur largement utilisé dans le domaine du développement Web. En combinaison avec l'interface de développement fournie par la plateforme publique WeChat, nous pouvons utiliser le langage PHP pour mener WeChat

Dans le développement des comptes publics WeChat, la gestion des balises utilisateur est une fonction très importante, qui permet aux développeurs de mieux comprendre et gérer leurs utilisateurs. Cet article explique comment utiliser PHP pour implémenter la fonction de gestion des balises utilisateur WeChat. 1. Obtenez l'openid de l'utilisateur WeChat Avant d'utiliser la fonction de gestion des balises utilisateur WeChat, nous devons d'abord obtenir l'openid de l'utilisateur. Dans le développement des comptes publics WeChat, il est courant d'obtenir l'openid via l'autorisation de l'utilisateur. Une fois l'autorisation de l'utilisateur terminée, nous pouvons obtenir l'utilisateur via le code suivant

Alors que WeChat devient un outil de communication de plus en plus important dans la vie des gens, sa fonction de messagerie agile est rapidement privilégiée par un grand nombre d'entreprises et de particuliers. Pour les entreprises, développer WeChat en une plate-forme marketing est devenu une tendance, et l'importance du développement de WeChat est progressivement devenue plus importante. Parmi eux, la fonction d'envoi de groupe est encore plus largement utilisée. Alors, en tant que programmeur PHP, comment implémenter des enregistrements d'envoi de messages de groupe ? Ce qui suit vous donnera une brève introduction. 1. Comprendre les connaissances en développement liées aux comptes publics WeChat. Avant de comprendre comment mettre en ?uvre des enregistrements d'envoi de messages de groupe, je

Comment utiliser PHP pour développer des comptes publics WeChat Les comptes publics WeChat sont devenus un canal important de promotion et d'interaction pour de nombreuses entreprises, et PHP, en tant que langage Web couramment utilisé, peut également être utilisé pour développer des comptes publics WeChat. Cet article présentera les étapes spécifiques pour utiliser PHP pour développer des comptes publics WeChat. étape 1 : Obtenez le compte développeur du compte officiel WeChat. Avant de commencer le développement du compte officiel WeChat, vous devez demander un compte développeur du compte officiel WeChat. Pour le processus d'inscription spécifique, veuillez vous référer au site officiel de la plateforme publique WeChat

Avec le développement d’Internet et des appareils mobiles intelligents, WeChat est devenu un élément indispensable dans les domaines social et marketing. Dans cette ère de plus en plus numérique, la manière d'utiliser PHP pour le développement de WeChat est devenue la préoccupation de nombreux développeurs. Cet article présente principalement les points de connaissances pertinents sur la fa?on d'utiliser PHP pour le développement WeChat, ainsi que certains conseils et précautions. 1. Préparation de l'environnement de développement Avant de développer WeChat, vous devez d'abord préparer l'environnement de développement correspondant. Plus précisément, vous devez installer l'environnement d'exploitation PHP et la plateforme publique WeChat
