2022-11-07 16:42:42 - 米境通跨境電商
之前做過兩次網(wǎng)頁請求微信授權(quán)登陸,后來轉(zhuǎn)到magento上面,主做國外的電商系統(tǒng),導(dǎo)致這些開發(fā)經(jīng)驗(yàn)都生疏了。為了后期在遇到同樣問題的時候能夠快速的找到解決方案,所以專門做個筆記,記錄下來。
首先微信授權(quán)登陸和其他的qq授權(quán)登陸、微博授權(quán)登陸都是采用的OAUTH2.0機(jī)制,大體的邏輯原理和步驟都很類似。具體的分為三步,
1、根據(jù)APPID和回調(diào)地址等參數(shù)拼裝請求的url,比較重要的就是appid,這個是在微信開放平臺里面申請的網(wǎng)頁應(yīng)用,需要提交資質(zhì)認(rèn)證等。另外就是回調(diào)地址,這個必須和微信開放平臺后臺填寫的授權(quán)域相同,不然則會提示錯誤,無法請求。
publicfunctionwxlogin(){
$AppID=C('WechatConfig')['AppID'];
$AppSecret=C('WechatConfig')['AppSecret'];
$callback="http://".$_SERVER['HTTP_HOST'].U("User/auth");
$code=I('get.code');
$state=md5(uniqid(rand(),TRUE)).$code;
$_SESSION["wx_state"]=$state;//存到SESSION
$callback=urlencode($callback);
$wxurl="https://open.weixin.qq.com/connect/qrconnect?appid=".$AppID."&redirect_uri={$callback}&response_type=code&scope=snsapi_login&state={$state}¶m=abc#wechat_redirect";
header("Location:$wxurl");
}
other|微信網(wǎng)頁授權(quán)登陸開發(fā)示例
PS:值得一提的是,在微信開放后臺的應(yīng)用里面修改授權(quán)域,此授權(quán)域可以為本地測試的域名,不用非得
2、如果參數(shù)全都正確,就進(jìn)入到掃描界面,等使用微信掃描確認(rèn)之后,即可獲取到一個code,有效期五分鐘,然后可以使用此code去獲取access_token和用戶的openid以及unionid等信息,具體的方法可以參照下面代碼:
publicfunctiongetToken($code){
$AppID=C('WechatConfig')['AppID'];
$AppSecret=C('WechatConfig')['AppSecret'];
$url='https://api.weixin.qq.com/sns/oauth2/access_token?appid='.$AppID.'&secret='.$AppSecret.'&code='.$code.'&grant_type=authorization_code';
$ch=curl_init();
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,TRUE);
curl_setopt($ch,CURLOPT_URL,$url);
$json=curl_exec($ch);
curl_close($ch);
$arr=json_decode($json,1);
if($arr['errcode']!=''){
return'';
}else{
session('access_token',$arr['access_token']);
session('openid',$arr['openid']);
return$arr;
}
}
publicfunctiongetUserInfo($token,$openid){
$url='https://api.weixin.qq.com/sns/userinfo?access_token='.$token.'&openid='.$openid.'&lang=zh_CN';
$ch=curl_init();
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,TRUE);
curl_setopt($ch,CURLOPT_URL,$url);
$json=curl_exec($ch);
curl_close($ch);
$userinfo=json_decode($json,1);
if($userinfo['errcode']!=''){
return'';
}else{
return$userinfo;
}
}
3、最后特別說明一下,access_token有效期兩個小時。然后需要先獲取access_token,然后才能用該數(shù)據(jù)去獲取用戶的信息。另外還有一種情況,就是在pc端使用此方法沒問題,但是如果是在微信客戶端下,依舊是掃碼界面,那就尷尬了。不過有一個客戶的網(wǎng)站在pc端自動展示掃碼界面,在微信客戶端則自動提示公眾號授權(quán)的界面,這個是配置方面的問題還是開發(fā)方面的具體還不清楚,略坑。最后為了以后的方便使用,封裝一個第三方登陸的類,需要的直接引用即可。