>위챗 애플릿 >위챗 개발 >WeChat 공개 계정 웹 승인에 대한 자세한 설명

WeChat 공개 계정 웹 승인에 대한 자세한 설명

angryTom
angryTom원래의
2019-07-16 14:21:319738검색

이 모바일 단말기 시대에 WeChat 공식 계정은 점차 사람들이 정보를 얻는 채널이자 판매자가 잠재 고객을 개발하는 수단이 되었기 때문에 많은 프로그래머가 WeChat 개발로 전환했기 때문에 오늘은 이를 소개하겠습니다. WeChat 공개 계정 개발 시 웹페이지 인증을 어떻게 구현할 수 있나요?

사용자 정의 요청 인터페이스 함수를 제공하기 전에 이 함수는 다음 샘플 코드에서 인터페이스를 요청하는 데 사용됩니다.

이 함수의 기능은 인터페이스에 대한 요청을 시작하고 매개변수를 전달하고 데이터를 반환하는 것입니다. 인터페이스에 의해 반환됨

(이 안에 있는 코드는 자세히 설명하지 않습니다. 더 알고 싶다면 PHP 컬 함수 요약을 살펴보세요)

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

(에서 사용되는 인터페이스 이 기사는 Tencent에서 공식적으로 제공한 것입니다. WeChat 공개 플랫폼의 개발자 문서)

를 참조하세요. 1. 먼저 공개 계정을 구성해야 합니다

1. WeChat 공개 계정의 사용자 웹 페이지 권한을 부여하기 전에 개발자는 공개 플랫폼의 공식 웹사이트에서 "

개발 - 인터페이스 권한 - 웹 서비스 - 웹 계정 - 기본 사용자 정보를 얻기 위한 웹 권한" 구성 옵션으로 이동해야 합니다. 인증 콜백 도메인 이름을 수정합니다. 여기에는 URL이 아닌 도메인 이름(문자열)이 입력되므로 http://와 같은 프로토콜 헤더를 추가하지 마세요.

2 인증 콜백 도메인 이름 구성 사양은 다음과 같습니다. 전체 도메인 이름(예: 웹페이지 인증이 필요함) 도메인 이름은 www.qq.com입니다. 구성 후 이 도메인 이름 아래의 페이지는 http://www.qq.com/music.html 및 http://입니다. OAuth2.0 인증에는 www.qq.com/login.html을 사용할 수 있습니다. 단, http://pay.qq.com, http://music.qq.com, http://qq.com은 OAuth2.0 인증을 수행할 수 없습니다

3. 공식 계정 로그인이 제3자에게 승인된 경우. 개발자 관리를 위해 어떤 설정도 할 필요가 없습니다. 제3자가 공식 계정을 대체하여 웹 페이지 승인을 구현할 수 있습니다

2. 사용자는 코드를 승인하고 획득하는 데 동의합니다

인터페이스 주소:

https://open.weixin.qq .com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect (인터페이스 매개변수에 주의하세요)

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. 획득한 코드에 access_token 및 openid

Interface가 누락되었을 수 있습니다. 4. access_token이 유효한지 확인하세요


WeChat 공개 계정 웹 승인에 대한 자세한 설명

인터페이스: https://api.weixin.qq.com/sns/auth?access_token=ACCESS_TOKEN&openid=OPENID

/**
 *  通过获取到的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);
}

5. , 새로 고침 access_token

WeChat 공개 계정 웹 승인에 대한 자세한 설명

인터페이스:

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

/**
 * 检查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无效 
    }
}

6. 사용자 정보 얻기

WeChat 공개 계정 웹 승인에 대한 자세한 설명인터페이스:

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

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"
}

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


   

위 내용은 WeChat 공개 계정 웹 승인에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.