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 捕獲不到錯誤。
