微信公眾號授權獲取用戶信息


1、token文件     同上一篇文章

 

2、配置文件       同上一篇文章

 

3、用戶掃碼跳轉微信授權頁面  code.php

include "conf.php"; 
// 微信端授權登錄---生成二維碼 $code_url="https://open.weixin.qq.com/connect/oauth2/authorize?appid=$appid&redirect_uri=$re_url&response_type=code&scope=$scope&state=$state#wechat_redirect";
include 'phpqrcode.php'; // 官網下載地址 https://sourceforge.net/projects/phpqrcode/files/
$QR=time()'.png'; // 二維碼圖片名稱 防止緩存
$errorLevel = "L"; //定義糾錯級別
$size = "4"; //定義生成內容
QRcode
::png($code_url, $QR, $errorLevel, $size, 2); // 執行生成圖片
echo '<img src="'.$QR.'">'; //輸出二維碼

注意:二維碼生成目錄必須有創建寫入文件權限

 

4、也可是使用用戶微信端打開連接 (與 第3 步 執行方式不同)code.php

 include "conf.php";
//https://mp.weixin.qq.com/cgi-bin/settingpage?t=setting/function&action=function&token=782251143&lang=zh_CN
//網頁授權域名 域名/wx,不帶 http://

$code_url="https://open.weixin.qq.com/connect/oauth2/authorize?appid=$appid&redirect_uri=$re_url&response_type=code&scope=$scope&state=$state#wechat_redirect";
header("Location:".$code_url);
exit;

 注意:如果請問code是遇見 code been used, hints: [ req_id: Rwakxa0262th10 ],請刷新文件以及生成的二維碼,在訪問、測試

 

5、通過用戶點擊同意授權獲取用戶信息  回調文件(code.php 文件中 $re_url 文件)wx_callback.php

include "conf.php";  // 引入配置文件

if(isset($_GET['code']) && isset($_GET["state"]))
{
    if($state!=$_GET["state"])
    {
        exit("state_error");
    }

    $code=$_GET['code'];
    $token_url="https://api.weixin.qq.com/sns/oauth2/access_token?appid=$appid&secret=$appsecret&code=$code&grant_type=authorization_code";
    $token_resturn=https_get($token_url);
    $token_data=json_decode($token_resturn,true);

    //如果請求 access_token 失敗
    if(isset($token_data["errcode"]))
    {
        exit($token_data["errmsg"]);
    }

    $openid=$token_data["openid"];
    $web_access_token=$token_data["access_token"];
    $refresh_token=$token_data["refresh_token"];

    // 驗證access_token 是否有效
    $refresh_url="https://api.weixin.qq.com/sns/auth?access_token=$web_access_token&openid=$openid";
    $refresh_info=https_get($refresh_url);
    $refresh_info=json_decode($refresh_info,true);
    // 如果access_token 過期
    if($refresh_info["errcode"]!==0)
    {
        //  刷新 access_token
        $refresh_access_token="https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=$appid&grant_type=refresh_token&refresh_token=$refresh_token";
        $refresh_resturn=https_get($refresh_access_token);
        $refresh_data=json_decode($refresh_resturn,true);
        // 如果刷新獲取失敗
        if(isset($refresh_data["errcode"]))
        {
            exit($refresh_data["errmsg"]);
        }
        // 如果成功再次賦值
        $web_access_token=$refresh_data["access_token"];
        $refresh_token=$refresh_data["refresh_token"];
    }

    // 拉取用戶信息
    $user_url="https://api.weixin.qq.com/sns/userinfo?access_token=$web_access_token&openid=$openid&lang=zh_CN";
    $user_info=https_get($user_url);
    $user_info=json_decode($user_info,true);
    // 如果獲取用戶信息失敗
    if(isset($user_info["errcode"]))
    {
        exit($user_info["errmsg"]);
    }

    /*$v=var_export($user_info,TRUE); // 獲取用戶信息寫入數據庫 測試
    file_put_contents("callback.txt",$v);*/
}

 注意:如果用戶同意授權,頁面將跳轉至 redirect_uri/?code=CODE&state=STATE; 如果服務不支持 redirect_uri/ 這個種訪問請問另外配置

 

6、 tp3項目的nginx 服務器配置示例:

    #/模塊名/控制器名/方法名
location /Home/Wx/User/ { rewrite ^/Home/Wx/User/?(.*)$ /index.php?m=Home&c=Wx&a=User&$1 last; #去除回調文件后面的 / break; }

 

注意: 微信端打開的頁面如果文件中存在錯誤,只顯示無法顯示、打開網頁;沒有錯誤提示,try cathc 捕獲不到錯誤。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM