山門鎮(zhèn)微信公眾號網(wǎng)頁授權(quán)詳解

閱讀 34223  ·  發(fā)布日期 2020-08-24 17:26  ·  溫州優(yōu)光網(wǎng)絡(luò)科技有限公司|建站|APP小程序制作|做網(wǎng)站SEO推廣優(yōu)化
【摘要】 在這個移動端的時代,微信公眾號也逐漸成為人們獲取信息的一種渠道,也是商家發(fā)展?jié)撛诳蛻舻囊环N手段,因此,許多程序員轉(zhuǎn)戰(zhàn)微信開發(fā),那么今天,我們就來為大家介紹一下微信公眾號開發(fā)中的網(wǎng)頁授權(quán)到底要怎樣才能實現(xiàn)。在這之前先給大家一個我自定義的請求接口的函數(shù),在下面的示例代碼中請求接口用的都是這個函數(shù)該函數(shù)的作用是,想接口發(fā)起請... 【溫州小程序開發(fā),溫州微信公眾號,平陽做網(wǎng)站,平陽網(wǎng)站建設(shè)公司,平陽小程序商城制作,昆陽萬全做網(wǎng)站,鰲江水頭小程序,蕭江騰蛟微信公眾號,山門順溪南雁海西南麂鳳臥麻步懷溪網(wǎng)絡(luò)網(wǎng)店服務(wù),政采云網(wǎng)店管理服務(wù)】...

微信公眾號網(wǎng)頁授權(quán)詳解

在這個移動端的時代,微信公眾號也逐漸成為人們獲取信息的一種渠道,也是商家發(fā)展?jié)撛诳蛻舻囊环N手段,因此,許多程序員轉(zhuǎn)戰(zhàn)微信開發(fā),那么今天,我們就來為大家介紹一下微信公眾號開發(fā)中的網(wǎng)頁授權(quán)到底要怎樣才能實現(xiàn)。
在這之前先給大家一個我自定義的請求接口的函數(shù),在下面的示例代碼中請求接口用的都是這個函數(shù)該函數(shù)的作用是,想接口發(fā)起請求,傳遞參數(shù)并返回接口返回的數(shù)據(jù)(這個里面的代碼就不做多解釋了,如果大家想要了解可以去看一下php curl函數(shù)總結(jié))//自定義請求接口函數(shù),$data為空時發(fā)起get請求,$data有值時發(fā)情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;
}
(文中所使用的接口為騰訊官方提供,大家可以參考一下微信公眾平臺的開發(fā)者文檔)一、首先我們需要配置我們的公眾號1、在微信公眾號請求用戶網(wǎng)頁授權(quán)之前,開發(fā)者需要先到公眾平臺官網(wǎng)中的“開發(fā) - 接口權(quán)限 - 網(wǎng)頁服務(wù) - 網(wǎng)頁帳號 - 網(wǎng)頁授權(quán)獲取用戶基本信息”的配置選項中,修改授權(quán)回調(diào)域名。
請注意,這里填寫的是域名(是一個字符串),而不是URL,因此請勿加 http:// 等協(xié)議頭;2、授權(quán)回調(diào)域名配置規(guī)范為全域名,比如需要網(wǎng)頁授權(quán)的域名為:
www.qq.com,配置以后此域名下面的頁面http://www.qq.com/music.html 、 http://www.qq.com/login.html 都可以進行OAuth2.0鑒權(quán)。
但http://pay.qq.com 、 http://music.qq.com 、 http://qq.com無法進行OAuth2.0鑒權(quán)3、如果公眾號登錄授權(quán)給了第三方開發(fā)者來進行管理,則不必做任何設(shè)置,由第三方代替公眾號實現(xiàn)網(wǎng)頁授權(quán)即可二、用戶同意授權(quán),獲取code接口地址:
https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect (注意接口參數(shù)) function Get_Code() //獲取code {
//構(gòu)造請求地址 $code_url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=微信公眾號appid&redirect_uri=請求功后回調(diào)地址&response_type=code&scope=snsapi_userinfo&state=STATE #wechat_redirect";
//跳轉(zhuǎn)到請求地址,應為本省設(shè)置了回調(diào)地址,所以不需要使用file_get_content()來請求接口。
header("location:" . $code_url);
exit;
}
三、通個獲取到的code來或缺access_token和openid接口:
https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code/** * 通過獲取到的code來獲取access_token和openid * $code為獲取到的code * 接口的參數(shù)注意換成自己的,如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);
}
四、判斷access_token是否有效接口:
https://api.weixin.qq.com/sns/auth?access_token=ACCESS_TOKEN&openid=OPENID/** * 檢查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無效 }
}
五、如果失效,刷新access_token接口:
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 *接口的參數(shù)注意換成自己的 */ 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);
}
六、獲取用戶信息接口:
https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN/** * 獲取用戶基本信息 * */ 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);
}
獲取到用戶信息數(shù)據(jù):
{
"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" }
下面上完整代碼:
//啟動session if (isset($_GET['
code'
])) {
//判斷是否有code傳過來,如果沒有調(diào)用函數(shù)請求code $res = GetAccess_Token($_GET['
code'
]);
//使用code獲取access_token和openid if (CkeckAccessToken($res['
access_token'
], $res['
openid'
]) == 0) {
//判斷access_token是否有效,如果無效獲取新的access_token $res = GetRefresh_Token($res['
refresh_token'
]);
//或缺新的access_token }
$userinfo = Get_User_Info($res['
access_token'
], $res['
openid'
]);
//獲取用戶信息 $_SESSION['
userinfo'
] = $userinfo;
//將用戶信息存入session中 $next_url = '
http://web/index.php'
;
//下一個頁面地址 header("location:" . $next_url);
//獲取到信息后跳轉(zhuǎn)到其他頁面 exit;
}
else {
//獲取code Get_Code();
}
function Get_Code() //獲取code{
$code_url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=appid&redirect_uri=回調(diào)地址&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['
errmsg'
]) && $result['
errmsg'
] == 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);
}
//自定義請求接口函數(shù),$data為空時發(fā)起get請求,$data有值時發(fā)起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;
}
以上就是微信公眾號網(wǎng)頁授權(quán)詳解的詳細內(nèi)容,更多請關(guān)注php中文網(wǎng)其它相關(guān)文章!
微信
分享相關(guān)標簽:
微信 微信公眾號本文原創(chuàng)發(fā)布php中文網(wǎng),轉(zhuǎn)載請注明出處,感謝您的尊重!
上一篇:
如何使用vue完成微信公眾號網(wǎng)頁
下一篇:
jsapi支付什么意思相關(guān)文章相關(guān)視頻微信公眾號里“JS接口域名”實現(xiàn)分享功能微信公眾號推送消息給用戶?微信公眾號的二次開發(fā)框架--微擎基本介紹如何使用vue完成微信公眾號網(wǎng)頁微信公眾號網(wǎng)頁授權(quán)詳解網(wǎng)頁授權(quán)接口調(diào)用實例解析 [溫州做微信公眾號]