Heim  >  Artikel  >  WeChat-Applet  >  Ausführliche Erläuterung der Webautorisierung für öffentliche WeChat-Konten

Ausführliche Erläuterung der Webautorisierung für öffentliche WeChat-Konten

angryTom
angryTomOriginal
2019-07-16 14:21:319582Durchsuche

Im Zeitalter mobiler Endgeräte sind offizielle WeChat-Konten nach und nach zu einem Kanal geworden, über den Menschen Informationen erhalten, und zu einem Mittel für Händler, potenzielle Kunden zu gewinnen. Daher haben sich viele Programmierer der WeChat-Entwicklung zugewandt, und so sind wir heute hier Um Ihnen zu helfen, stellen wir Ihnen vor, wie Sie die Webseitenautorisierung bei der Entwicklung öffentlicher WeChat-Konten implementieren.

Zuvor gebe ich Ihnen eine benutzerdefinierte Anforderungsschnittstellenfunktion. Im folgenden Beispielcode wird diese Funktion für die Anforderungsschnittstelle verwendet

Die Funktion Diese Funktion besteht darin, eine Anfrage an die Schnittstelle zu initiieren, Parameter zu übergeben und die von der Schnittstelle zurückgegebenen Daten zurückzugeben

(Ich werde den Code hier nicht erklären, wenn Sie es wissen wollen Weitere Informationen finden Sie unter Zusammenfassung der PHP-Curl-Funktion)

//自定义请求接口函数,$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;
}

(Die in diesem Artikel verwendete Schnittstelle wird offiziell von Tencent bereitgestellt. Sie können darauf verweisen zur öffentlichen WeChat-Plattform Entwicklerdokumentation)

1. Zuerst müssen wir unseren Beamten konfigurieren Konto

1. Bevor das öffentliche WeChat-Konto die Autorisierung der Benutzerwebseite anfordert, müssen Entwickler die offizielle Website der öffentlichen Plattform „Entwicklung – Schnittstellenberechtigungen – Webdienste –“ aufrufen. Webkonto – Webautorisierung zum Abrufen grundlegender Benutzerinformationen“ Ändern Sie in den Konfigurationsoptionen den Autorisierungs-Callback-Domänennamen. Bitte beachten Sie, dass hier der Domänenname (eine Zeichenfolge) ausgefüllt wird, nicht die URL, also bitte nicht http:// und andere Protokollheader hinzufügen

2. Autorisierungs-Callback-Domäne Namenskonfigurationsspezifikationen Es handelt sich um einen vollständigen Domänennamen. Der Domänenname, für den eine Webseitenautorisierung erforderlich ist, lautet beispielsweise: www.qq.com. Nach der Konfiguration lauten die Seiten unter diesem Domänennamen .html und http://www.qq.com/login .html können durch OAuth2.0 authentifiziert werden. Aber http://pay.qq.com, http://music.qq.com, http://qq.com kann keine OAuth2.0-Authentifizierung durchführen

3 Wenn die offizielle Kontoanmeldung dazu berechtigt ist Wenn es ein Drittentwickler verwaltet, müssen keine Einstellungen vorgenommen werden. Der Drittanbieter kann das offizielle Konto ersetzen, um die Webseitenautorisierung zu implementieren.

2. Der Benutzer stimmt dem zu Autorisierung und erhält den Code

Schnittstellenadresse:

https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state =STATE#wechat_redirect (beachten Sie die Schnittstellenparameter)

Ausführliche Erläuterung der Webautorisierung für öffentliche WeChat-Konten

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. Im erhaltenen Code fehlen möglicherweise access_token und openid

Schnittstelle: https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code


Ausführliche Erläuterung der Webautorisierung für öffentliche WeChat-Konten

/**
 *  通过获取到的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. Bestimmen Sie, ob das access_token gültig ist

Schnittstelle:

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

Ausführliche Erläuterung der Webautorisierung für öffentliche WeChat-Konten

/**
 * 检查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. Falls ungültig, access_token
Schnittstelle:

https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=APPID&grant_type=refresh_token&refresh_token=REFRESH_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);
}
Ausführliche Erläuterung der Webautorisierung für öffentliche WeChat-Konten

6. Benutzerinformationen abrufen Schnittstelle:

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

Ausführliche Erläuterung der Webautorisierung für öffentliche WeChat-Konten

/** * 获取用户基本信息 *  */
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"
}

Ausführliche Erläuterung der Webautorisierung für öffentliche WeChat-Konten下面上完整代码:

<?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;
          }


   

Das obige ist der detaillierte Inhalt vonAusführliche Erläuterung der Webautorisierung für öffentliche WeChat-Konten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn