Maison  >  Article  >  Applet WeChat  >  Explication détaillée de l'autorisation Web du compte public WeChat

Explication détaillée de l'autorisation Web du compte public WeChat

angryTom
angryTomoriginal
2019-07-16 14:21:319668parcourir

À l'ère des terminaux mobiles, les comptes officiels WeChat sont progressivement devenus un canal permettant aux gens d'obtenir des informations et un moyen permettant aux commerçants de développer des clients potentiels. Par conséquent, de nombreux programmeurs se sont tournés vers le développement de WeChat. Nous sommes donc ici aujourd'hui. vous aider Présentons comment mettre en œuvre l'autorisation de page Web dans le développement des comptes publics WeChat.

Avant cela, je vais vous donner une fonction d'interface de requête personnalisée Dans l'exemple de code suivant, cette fonction est utilisée pour l'interface de requête

La fonction. de cette fonction est d'initier une requête à l'interface, de transmettre des paramètres et de renvoyer les données renvoyées par l'interface

(Je n'expliquerai pas le code là-dedans, si vous voulez savoir pour en savoir plus, vous pouvez consulter résumé de la fonction php curl)

//自定义请求接口函数,$data为空时发起get请求,$data有值时发情post请求
function http_url($url,$data=null){
    $ch = curl_init();
    curl_setopt($ch,CURLOPT_URL,$url);
    curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE);
    curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,0);
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,TRUE);
    if(!empty($data)){
        curl_setopt($ch,CURLOPT_POST,1);
        curl_setopt($ch,CURLOPT_POSTFIELDS,$data);
    }
    $res = curl_exec($ch);
    if(curl_errno($ch)){
        echo "error:".curl_error($ch);
        exit;
    }
    curl_close($ch);
    return $res;
}

(L'interface utilisée dans cet article est officiellement fournie par Tencent. Vous pouvez vous référer à la plateforme publique WeChat Documentation du développeur)

1. compte

1. Avant que le compte public WeChat ne demande l'autorisation de la page Web de l'utilisateur, les développeurs doivent se rendre sur le site officiel de la plateforme publique "Développement - Autorisations d'interface - Services Web - Compte Web - Autorisation Web pour obtenir les informations utilisateur de base" dans les options de configuration, modifiez le nom de domaine de rappel d'autorisation. Veuillez noter que le nom de domaine (une chaîne) est renseigné ici, pas l'URL, donc veuillez ne pas ajouter http:// et autres en-têtes de protocole

2. Domaine de rappel d'autorisation ; spécifications de configuration du nom Il s'agit d'un nom de domaine complet. Par exemple, le nom de domaine qui nécessite une autorisation de page Web est : www.qq.com Après configuration, les pages sous ce nom de domaine sont http://www.qq.com/music. .html et http://www.qq.com/login .html peuvent être authentifiés par OAuth2.0. Mais http://pay.qq.com, http://music.qq.com, http://qq.com ne peut pas effectuer l'authentification OAuth2.0

3 Si la connexion au compte officiel est autorisée à le faire. Si un développeur tiers le gère, il n'est pas nécessaire de procéder à des réglages. Le tiers peut remplacer le compte officiel pour mettre en œuvre l'autorisation de la page Web

2. L'utilisateur accepte le. autorisation et obtient le code

Adresse d'interface : https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state =STATE#wechat_redirect (notez les paramètres de l'interface)

Explication détaillée de lautorisation Web du compte public WeChat

function Get_Code()  //获取code
{
//构造请求地址
$code_url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=微信公众号appid&redirect_uri=请求功后回调地址&response_type=code&scope=snsapi_userinfo&state=STATE #wechat_redirect";
//跳转到请求地址,应为本省设置了回调地址,所以不需要使用file_get_content()来请求接口。
header("location:" . $code_url);
exit;
}

3. Il se peut que le code obtenu manque d'access_token et d'openid

Interface : https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
Explication détaillée de lautorisation Web du compte public WeChat

/**
 *  通过获取到的code来获取access_token和openid 
 *  $code为获取到的code
 * 接口的参数注意换成自己的,如appid和secret
 */
function GetAccess_Token($code)
{
$get_access_token_url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=appid&secret=secret&code=$code&grant_type=authorization_code";
$res = http_url($get_access_token_url);
return json_decode($res, true);
}

4. Déterminez si le access_token est valide

Interface : https://api.weixin.qq.com/sns /auth?access_token=ACCESS_TOKEN&openid=OPENID

Explication détaillée de lautorisation Web du compte public WeChat

/**
 * 检查access_token是否有效
 * 
 */
function CkeckAccessToken($access_token, $openid)
{
    $check_url = "https://api.weixin.qq.com/sns/auth?access_token=$access_token&openid=$openid";
    $res = http_url($check_url);
    $result = json_decode($res, true);
    if (isset($result['errmsg']) && $result['errmsg'] == 1) {
        return 1;       //access_token有效   
    } else {
        return 0;       //access_token无效 
    }
}

5. S'il n'est pas valide, actualisez access_token

Interface : https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=APPID&grant_type=refresh_token&refresh_token=REFRESH_TOKEN

Explication détaillée de lautorisation Web du compte public WeChat

/**
 * 如果获取到的access_token无效,通过refresh_token来刷新access_token
 *接口的参数注意换成自己的
 */
function GetRefresh_Token($refresh_token)
{
$get_refresh_token_url = "https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=appid&grant_type=refresh_token&refresh_token=$refresh_token";
$res = http_url($get_refresh_token_url);
return json_decode($res, true);
}

6. Obtenir les informations utilisateur

Interface : https://api.weixin.qq.com/sns/userinfo?access_token= ACCESS_TOKEN&openid=OPENID&lang=zh_CN

Explication détaillée de lautorisation Web du compte public WeChat

/** * 获取用户基本信息 *  */
function Get_User_Info($access_token, $openid){   
     $get_user_info = "https://api.weixin.qq.com/sns/userinfo?access_token=$access_token&openid=$openid&lang=zh_CN";   
      $res = http_url($get_user_info);   
       return json_decode($res, true);
   }

获取到用户信息数据:

{   
    "openid":" OPENID",
    " nickname": NICKNAME,
    "sex":"1",
    "province":"PROVINCE"
    "city":"CITY",
    "country":"COUNTRY",
    "headimgurl":       "http://thirdwx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/46",
    "privilege":[ "PRIVILEGE1" "PRIVILEGE2"     ],
    "unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL"
}

Explication détaillée de lautorisation Web du compte public WeChat下面上完整代码:

<?php
    //跳转第三方页面,获取用户基本信息
    // 这是请求页面也是code的回调页面
    session_start();                //启动session
    if (isset($_GET[&#39;code&#39;])) {     //判断是否有code传过来,如果没有调用函数请求code
          $res = GetAccess_Token($_GET[&#39;code&#39;]);     //使用code获取access_token和openid
          if (CkeckAccessToken($res[&#39;access_token&#39;], $res[&#39;openid&#39;]) == 0) {     //判断access_token是否有效,如果无效获取新的access_token
                  $res = GetRefresh_Token($res[&#39;refresh_token&#39;]);                    //或缺新的access_token
            }
           $userinfo = Get_User_Info($res[&#39;access_token&#39;], $res[&#39;openid&#39;]);        //获取用户信息
           $_SESSION[&#39;userinfo&#39;] = $userinfo;                                      //将用户信息存入session中
           $next_url = &#39;http://web/index.php&#39;;                                     //下一个页面地址
           header("location:" . $next_url);                                       //获取到信息后跳转到其他页面
           exit;
      } else { 
         //获取code
      Get_Code();
      }
    function Get_Code()  //获取code{
    $code_url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=appid&redirect_uri=回调地址&response_type=code&scope=snsapi_userinfo&state=STATE #wechat_redirect";
    header("location:" . $code_url);
    exit;
    }
    /**
    *  通过获取到的code来获取access_token和openid
    *
    */
    function GetAccess_Token($code){
        $get_access_token_url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=appid&secret=secret&code=$code&grant_type=authorization_code";
        $res = http_url($get_access_token_url);
        return json_decode($res, true);
        }
    /**
     * 检查access_token是否有效
     *
    */
    function CkeckAccessToken($access_token, $openid){
    $check_url = "https://api.weixin.qq.com/sns/auth?access_token=$access_token&openid=$openid"; 
    $res = http_url($check_url);
    $result = json_decode($res, true);
    if (isset($result[&#39;errmsg&#39;]) && $result[&#39;errmsg&#39;] == 1) {
       return 1;       //access_token有效 
     } else { 
       return 0;       //access_token无效 
     }
    }

    /**
     * 如果获取到的access_token无效,通过refresh_token来刷新access_token 
     */
    function GetRefresh_Token($refresh_token){
        $get_refresh_token_url = "https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=appid&grant_type=refresh_token&refresh_token=$refresh_token";
        $res = http_url($get_refresh_token_url);
        return json_decode($res, true);
     }
    /**
     * 获取用户基本信息
     *
     */
    function Get_User_Info($access_token, $openid){
        $get_user_info = "https://api.weixin.qq.com/sns/userinfo?access_token=$access_token&openid=$openid&lang=zh_CN";
        $res = http_url($get_user_info);
        return json_decode($res, true);}
    //自定义请求接口函数,$data为空时发起get请求,$data有值时发起post请求
    function http_url($url,$data=null){
       $ch = curl_init();
        curl_setopt($ch,CURLOPT_URL,$url);
        curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE);
        curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,0);
        curl_setopt($ch,CURLOPT_RETURNTRANSFER,TRUE);
        if(!empty($data)){    
            curl_setopt($ch,CURLOPT_POST,1);
            curl_setopt($ch,CURLOPT_POSTFIELDS,$data);
         }
         $res = curl_exec($ch);
         if(curl_errno($ch)){
           echo "error:".curl_error($ch);
           exit;
          }
          curl_close($ch);
          return $res;
          }


   

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn