咨询热线:18076568990、0755-25823180

[已解决] 手机WAP端,微信Oauth2授权登录,第一次访问时很慢,大神帮看看

2773 1 efnic 发表于 2016-8-26 13:18:19
代码位置:/mobile/control/auto.php
  1. public function loginOp(){
  2.                 $redirect_uri = MOBILE_SITE_URL."/index.php?act=auto&op=checkAuth&ref=".$_GET['ref'];
  3.             $code_url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=$this->appId&redirect_uri=".urlencode($redirect_uri)."&response_type=code&scope=snsapi_base&state=123#wechat_redirect"; // 获取code
  4.                 if(!empty($_COOKIE['key']) && !empty($_COOKIE['new_cookie'])){ //已经登陆
  5.                         $ref=WAP_SITE_URL;
  6.                         $model_mb_user_token = Model('mb_user_token');
  7.                         $model_member = Model('member');
  8.                         $mb_user_token_info = $model_mb_user_token->getMbUserTokenInfoByToken($_COOKIE['key']);
  9.                         $member_info = $model_member->getMemberInfoByID($mb_user_token_info['member_id']);
  10.                         if(empty($member_info)){
  11.                                 setcookie('username',$member_info["member_name"],time()-3600*24,'/');
  12.                                 setcookie('key',$token,time()-3600*24,'/');
  13.                                 setcookie('unionid',$token,time()-3600*24,'/');
  14.                                 setcookie('new_cookie','100',time()-3600*24,'/');
  15.                                 header('Location:'.$code_url);exit;
  16.                         }
  17.                         header('Location:'.$ref);exit;
  18.                 }else{
  19.                     header("Location:".$code_url);
  20.                         exit;
  21.                 }
  22.         }
  23.         public function checkAuthOp(){
  24.                 $ref = $_GET['ref'];
  25.                 if(empty($ref)){
  26.                         $ref=WAP_SITE_URL;
  27.                 }
  28.                 if (isset($_GET['code'])){
  29.                         $this->code = $_GET['code'];
  30.                     $url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=$this->appId&secret=$this->appSecret&code=$this->code&grant_type=authorization_code";
  31.                     $res =json_decode($this->httpGet($url), true);
  32.                     $this->openid = $res['openid'];
  33.                         $_SESSION['openid']=$res['openid'];
  34.                     $accessToken5 = $this->getAccessToken();        //校验AccessToken 是否可用及返回新的
  35.                     $url="https://api.weixin.qq.com/cgi-bin/user/info?access_token=$accessToken5&openid=".$res['openid']."&lang=zh_CN";        //获取用户信息
  36.                     $res5=json_decode($this->httpGet($url), true);
  37.                     /*
  38.                     if($res5['openid']==''){
  39.                             $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$this->appId&secret=$this->appSecret"; //获取access_token
  40.                                 $res = json_decode($this->httpGet($url));
  41.                                 $access_token = $res->access_token;
  42.                                 //echo $url="https://api.weixin.qq.com/cgi-bin/user/info?access_token=$access_token&openid=".$res['openid']."&lang=zh_CN";        //获取用户信息
  43.                                 //$res5=json_decode($this->httpGet($url), true);
  44.                     }*/
  45.                     //$res5['unionid'] = 'me_'.$res5['openid'];
  46.                     //$_SESSION['unionid']=$res5['unionid'];
  47.                         if(empty($res5['unionid'])){
  48.                                 $res5['unionid'] = $res5['openid'];
  49.                         }
  50.                     //$this->autoLogin($res5,$ref);
  51.                         $model_member = Model('member');
  52.             $member_info = $model_member->getMemberInfo(array('weixin_unionid'=> $res5['unionid']));
  53.                         if(!empty($member_info)){
  54.                                 if($res5['subscribe'] && !empty($res5['nickname']) && $res5['nickname']!=$member_info['member_name']){
  55.                                         $model_member->editMember(array('weixin_unionid'=> $res5['unionid']),array('member_name'=> $res5['nickname']));
  56.                                 }
  57.                                 $token = $this->_get_token($member_info['member_id'], $member_info['member_name'], 'wap');
  58.                                 setcookie('username',$member_info["member_name"],time()+3600*24,'/');
  59.                                 setcookie('key',$token,time()+3600*24,'/');
  60.                                 //setcookie('unionid',$token,time()+3600*24,'/');
  61.                                 setcookie('new_cookie','100',time()+3600*24,'/');
  62.                                 header('Location:'.$ref);exit;
  63.                                 //print_R($_COOKIE);exit;
  64.                         }else{
  65.                                 if($this->register($res5)){
  66.                                         header('Location:'.$ref);exit;
  67.                                 }
  68.                         }
  69.                 }else{
  70.                         header('Location:'.$ref);exit;
  71.                 }
  72.         }
  73.         private function register($user_info){
  74.         $unionid = $user_info['unionid'];
  75.         $nickname = $user_info['nickname'];
  76.         if(!empty($unionid)) {
  77.             $rand = rand(100, 899);
  78.                         if(empty($nickname))$nickname = 'name_'.$rand;
  79.             if(strlen($nickname) < 3) $nickname = $nickname.$rand;
  80.             $member_name = $nickname;
  81.             $model_member = Model('member');
  82.             $member_info = $model_member->getMemberInfo(array('member_name'=> $member_name));
  83.             $password = rand(100000, 999999);
  84.             $member = array();
  85.             $member['member_passwd'] = $password;
  86.             $member['member_email'] = '';
  87.             $member['weixin_unionid'] = $unionid;
  88.                         //$member['nickname'] = $nickname;
  89.                         //$member['openid'] = $user_info['openid'];
  90.             $member['weixin_info'] = $user_info['weixin_info'];
  91.             if(empty($member_info)) {
  92.                 $member['member_name'] = $member_name;
  93.                 $result = $model_member->addMember($member);
  94.             } else {
  95.                 for ($i = 1;$i < 999;$i++) {
  96.                     $rand += $i;
  97.                     $member_name = $nickname.$rand;
  98.                     $member_info = $model_member->getMemberInfo(array('member_name'=> $member_name));
  99.                     if(empty($member_info)) {//查询为空表示当前会员名可用
  100.                         $member['member_name'] = $member_name;
  101.                         $result = $model_member->addMember($member);
  102.                         break;
  103.                     }
  104.                 }
  105.             }
  106.             $headimgurl = $user_info['headimgurl'];//用户头像,最后一个数值代表正方形头像大小(有0、46、64、96、132数值可选,0代表640*640正方形头像)
  107.             $headimgurl = substr($headimgurl, 0, -1).'132';
  108.             $avatar = @copy($headimgurl,BASE_UPLOAD_PATH.'/'.ATTACH_AVATAR."/avatar_$result.jpg");
  109.             if($avatar) {
  110.                 $model_member->editMember(array('member_id'=> $result),array('member_avatar'=> "avatar_$result.jpg"));
  111.             }
  112.             $member = $model_member->getMemberInfo(array('member_name'=> $member_name));
  113.             if(!empty($member)) {
  114.                                 if(!empty($member_info)) {
  115.                                         //$unionid = $member_info['unionid'];
  116.                                         $token = $this->_get_token($result, $member_name, 'wap');
  117.                                         setcookie('username',$member_name);
  118.                                         setcookie('key',$token);
  119.                                         return true;
  120.                                 } else {
  121.                                         return false;
  122.                                 }
  123.             }
  124.         }
  125.     }
  126.         /**
  127.      * 登录生成token
  128.      */
  129.     private function _get_token($member_id, $member_name, $client) {
  130.         $model_mb_user_token = Model('mb_user_token');
  131.         //生成新的token
  132.         $mb_user_token_info = array();
  133.         $token = md5($member_name . strval(TIMESTAMP) . strval(rand(0,999999)));
  134.         $mb_user_token_info['member_id'] = $member_id;
  135.         $mb_user_token_info['member_name'] = $member_name;
  136.         $mb_user_token_info['token'] = $token;
  137.         $mb_user_token_info['login_time'] = TIMESTAMP;
  138.         $mb_user_token_info['client_type'] = $client;
  139.         $result = $model_mb_user_token->addMbUserToken($mb_user_token_info);
  140.         if($result) {
  141.             return $token;
  142.         } else {
  143.             return null;
  144.         }
  145.     }
  146.         //校验AccessToken 是否可用及返回新的
  147.         private function getAccessToken() {
  148.                 $data = json_decode(file_get_contents("../access_token.json"));
  149.                 $check_token_url="https://api.weixin.qq.com/sns/auth?access_token=$data->access_token&openid=$this->appId";
  150.                 $check_res = json_decode($this->httpGet($check_token_url));
  151.                 if ($data->expire_time < time() || $check_res->errcode>0) {
  152.                         $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$this->appId&secret=$this->appSecret";
  153.                         $res = json_decode($this->httpGet($url));
  154.                         $access_token = $res->access_token;
  155.                         if ($access_token) {
  156.                                 $data->expire_time = time() + 6500;
  157.                                 $data->access_token = $access_token;
  158.                                 $fp = fopen("../access_token.json", "w");
  159.                                 fwrite($fp, json_encode($data));
  160.                                 fclose($fp);
  161.                         }
  162.                 } else {
  163.                         $access_token = $data->access_token;
  164.                 }
  165.                 return $access_token;
  166.         }
复制代码
第一次访问慢,第二次 就快了,请帮忙分析一下。
 楼主| efnic 发表于 2016-8-26 13:22:49
根目录下access_token.json格式为:
  1. {"expire_time":1472191028,"access_token":"2STvM5k3lRpnrXL3LKA0D9wzj6tNy47s708t053kU5HqM_E9-Bzpr4h8TAi3vfUQdVvhfJuZHcAkCASm0Wl4UUZ04L-7wBlTbhJpnkRDug3jkFbspp1ih3k1Lv1I2CbgLXFfCIAGSA"}
复制代码

请问:if ($data->expire_time < time() || $cike_url->errcode>0)
1.$data->expire_time过期时间的判断是否正确?
2.$cike_url->errcode 是什么意思?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

  • 今日
    0
  • 主题
    90

推荐贴子

联系我们

产品及方案咨询:18076568990、0755-25823180

电子邮箱:web@shopwt.com、客服微信:shopwtcom

公司地址:深圳市罗湖区人民南路3002号国贸大厦B座1608楼

  • 官方公众号

  • 微信客服