微信掃碼網站自動登錄的原是還是比較簡單的,只要各位知道相互的原理就可以實現了,下面我們來看兩個例子,我相信各位看了這兩個例子肯定知道怎么來做了.
magento 微信掃碼網站自動登錄
案例仿照了微信聯合登陸的做法,微信聯合登陸介紹:
https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&lang=zh_CN
查看授權后接口調用(UnionID),不難發現填寫回調地址,用戶確認登陸pc端即可跳轉
獲取UnionID方法:
- public function wcallbackAction(){
- $code = $_GET['code'];
- $state = $_GET['state'];
- $setting = include CONFIG_PATH . 'setting.php';
- $appid=$setting['weixin']['appid'];
- $appsecret=$setting['weixin']['appsecret'];
- if (emptyempty($code)) $this->showMessage('授權失敗');
- try{
- $token_url = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid='.$appid.'&secret='.$appsecret.'&code='.$code.'&grant_type=authorization_code';
- $token = json_decode($this->https_request($token_url));
- }catch(Exception $e)
- {
- print_r($e);
- }
- if (isset($token->errcode)) {
- echo '<h1>錯誤:</h1>'.$token->errcode;
- echo '<br/><h2>錯誤信息:</h2>'.$token->errmsg;
- exit;
- }
- $access_token_url = 'https://api.weixin.qq.com/sns/oauth2/refresh_token?appid='.$appid.'&grant_type=refresh_token&refresh_token='.$token->refresh_token;
- //轉成對象
- $access_token = json_decode($this->https_request($access_token_url));
- if (isset($access_token->errcode)) {
- echo '<h1>錯誤:</h1>'.$access_token->errcode;
- echo '<br/><h2>錯誤信息:</h2>'.$access_token->errmsg;
- exit;
- }
- $user_info_url = 'https://api.weixin.qq.com/sns/userinfo?access_token='.$access_token->access_token.'&openid='.$access_token->openid.'&lang=zh_CN';
- //轉成對象
- $user_info = json_decode($this->https_request($user_info_url));
- if (isset($user_info->errcode)) {
- echo '<h1>錯誤:</h1>'.$user_info->errcode;
- echo '<br/><h2>錯誤信息:</h2>'.$user_info->errmsg;
- exit;
- }
- //打印用戶信息
- // echo '<pre>';
- // print_r($user_info);
- // echo '</pre>';
- //獲取unionid
- $uid=$user_info->unionid;
- }
- //用戶操作處理 分為再次登錄和第一次登陸
- //Vevb.com
- $sql="select h_user_id from dtb_user_binded as t1 left join dtb_user_weixin as t2 on t1.u_id=t2.id where t1.u_type='".
- User::$arrUtype['weixin_num_t']."' and t2.openid='$user_info->unionid'";
- $h_user_id = Core_Db::getOne($sql);
- if(!emptyempty($h_user_id)){//該weixin號再次登錄
- }{//該weixin號第一次登錄
- }
php 微信掃碼 pc端自動登陸注冊
用的接口scope 是snsapi_userinfo,微信登陸一個是網頁授權登陸,另一個是微信聯合登陸.
網頁授權登陸:http://mp.weixin.qq.com/wiki/17/c0f37d5704f0b64713d5d2c37b468d75.html
微信聯合登陸:https://open.weixin.qq.com/cgi-bin/frame?t=home/web_tmpl&lang=zh_CN
一:首先把微信鏈接帶個標識生成二維碼
比如鏈接為 https://open.weixin.qq.com/connect/oauth2/authorize?appid=’.$appid.’&redirect_uri=’.$url.’&response_type=code&scope=snsapi_userinfo&state=1#wechat_redirect’我們可以在state上做文章,因為state你傳入什么微信那邊返回什么.
可以作為服務器與微信段的一個標識.
- public function creatqrAction(){
- if($_GET['app']){
- $wtoken=$_COOKIE['wtoken'];
- $postdata=$_SESSION['w_state'];
- if($wtoken){
- $postdata=$wtoken;
- }
- <span style="color: #3366ff;">include CONFIG_PATH . 'phpqrcode/'.'phpqrcode.php';</span>
- $sh=$this->shar1();
- $value="https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx138697ef383a9167&redirect_uri=http://www.xxx.net/login/wcallback&response_type=code&scope=snsapi_userinfo&state=".$postdata."&connect_redirect=1#wechat_redirect";
- $errorCorrectionLevel = "L";
- $matrixPointSize = "5";
- QRcode::png($value, false, $errorCorrectionLevel, $matrixPointSize);
- }
- }
此時生成了二維碼 state是標識,phpqrcode可以在文章末尾下載,這樣我們設置了回調地址http://www.xxx.net/login/wcallback
就可以在wcallback方法里面處理數據 插入用戶 生成session,跳轉登陸,pc端可以設置幾秒鐘ajax請求服務器,一旦獲取到了
state,即實現調整,微信瀏覽器里處理完后可以關閉窗口,微信js可實現
- document.addEventListener('WeixinJSBridgeReady', function onBridgeReady() {
- WeixinJSBridge.call('closeWindow');
- }, false);
也可以授權登陸成功后跳轉到微信服務號關注頁面:
- header("Location: weixin://profile/gh_a5e1959f9a4e");
- wcallback方法做處理登陸
- $code = $_GET['code'];
- $state = $_GET['state'];
- $setting = include CONFIG_PATH . 'setting.php';
- $appid=$setting['weixin']['appid'];
- $appsecret=$setting['weixin']['appsecret'];
- if (emptyempty($code)) $this->showMessage('授權失敗');
- try{
- $token_url = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid='.$appid.'&secret='.$appsecret.'&code='.$code.'&grant_type=authorization_code';
- $token = json_decode($this->https_request($token_url));
- }catch(Exception $e)
- {
- print_r($e);
- }
- if (isset($token->errcode)) {
- echo '<h1>錯誤:</h1>'.$token->errcode;
- echo '<br/><h2>錯誤信息:</h2>'.$token->errmsg;
- exit;
- }
- $access_token_url = 'https://api.weixin.qq.com/sns/oauth2/refresh_token?appid='.$appid.'&grant_type=refresh_token&refresh_token='.$token->refresh_token;
- //轉成對象
- $access_token = json_decode($this->https_request($access_token_url));
- if (isset($access_token->errcode)) {
- echo '<h1>錯誤:</h1>'.$access_token->errcode;
- echo '<br/><h2>錯誤信息:</h2>'.$access_token->errmsg;
- exit;
- }
- $user_info_url = 'https://api.weixin.qq.com/sns/userinfo?access_token='.$access_token->access_token.'&openid='.$access_token->openid.'&lang=zh_CN';
- //轉成對象
- $user_info = json_decode($this->https_request($user_info_url));
- if (isset($user_info->errcode)) {
- echo '<h1>錯誤:</h1>'.$user_info->errcode;
- echo '<br/><h2>錯誤信息:</h2>'.$user_info->errmsg;
- exit;
- }
- //打印用戶信息
- // echo '<pre>';
- // print_r($user_info);
- // echo '</pre>';
|
新聞熱點
疑難解答