微信的网页授权登陆

 
在登陆界面,让用户选择是手动登陆,还是微信授权登陆。
 
如果是微信授权登陆(思路):微信授权登陆,判断数据库有没用这个openid
    ①如果这个openid不存在
         保存这个openid到数据库;
         然后直接跳转到完善信息页面,包括:用户昵称(登陆名)、密码、手机号。
             @如果手机号不存在,则保存完善的用户信息,并且保存用户信息到session完成登录。
             @如果手机号已经存在,直接把微信授权用户的信息保存到之前的用户信息里面,并且删除之前保存的授权用户信息。并且保存用户信息到session完成登录。
         用户完善信息成功,可以在PC端登陆。
    ②如果这个openid已经存在,但没有完善个人信息
         则跳转到完善信息页
    ③如果这个openid已经存在,且完善了个人信息,
         保存用户信息到session完成登录;
         则跳转到主页。
 
如果是手动登陆(思路): 用户在微信客户端,选择手动后,提醒是否绑定微信号
     如果选择绑定微信号,则把当前微信的openid与用户信息绑定,保存到数据库。  (则下次就不用再手动输入,就可以通过微信授权登陆到这个账号)。
 
思路二:
 ①如果这个openid不存在 
        即首次进入,跳转到登陆页,需要用户手动登陆(通过手机号、密码,完成登陆)
        登陆成功,提示是否微信授权,如果同意微信授权(把这个openid与手动登陆的账号绑定),下次可以自动登陆。
 
  ③如果这个openid已经存在
         openid对应用户存在的情况下,检查用户是否能够合法登录 
         保存用户信息到session完成登录;
         则跳转到主页。
 
 
 
公众号和服务号的网页授权登陆:  
  获取openid的案例:
    public function index(){
        //来自微信授权登陆
        if(isset($_GET['code'])) {
            $code = $_GET['code'];
            //通过code和AppID(应用ID) 、AppSecret(应用密钥) 换取网页授权access_token和openid
            $url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=wx9ec2de2b4763aaff&secret=40eecba815d28cf349b886d02638d621&code=$code&grant_type=authorization_code";
            $htt = $this->https_post($url,"");
            $htt = json_decode($htt,true);
            $openid = $htt['openid'];
           …………………………
     }

 

 
 
 
 
 
企业号的网页授权登陆:
  获取openid的案例:
    public function index(){
        //来自微信授权登陆
        if(isset($_GET['code'])) {
            $code = $_GET['code'];
            //通过CorpID和Secret来换取AccessToken
            $url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=XXX&corpsecret=xxxx";
            $htt = $this->https_post($url,"");
            $htt = json_decode($htt,true);
            $access_token = $htt["access_token"];

            //通过code和access_token换取网页授权openid
            $url = "https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo?access_token=$access_token&code=$code";
            $htt = $this->https_post($url,"");
            $htt = json_decode($htt,true);

//            print_r($htt);exit;

            if(isset($htt['UserId'])) {
                $openid = $htt['UserId'];  //企业成员授权时返回
            }else {
                $openid = $htt['OpenId'];  //非企业成员授权时返回
            }
             …………………………
    
    }        

 

 
判断页面是否是在微信客户端打开的方法:
/**
 * 判断页面是否是在微信客户端打开
 */
    function is_weixin() {
        if ( strpos($_SERVER['HTTP_USER_AGENT'], 'MicroMessenger') !== false ) {
            return 1;
        }
        return 0;
    }


//判断页面是否是在微信客户端打开。 0:表示不是,1表示是在微信客户端中打开
   $is_weixin =  is_weixin();

 

模拟post请求:

    //模拟post请求
    public function https_post($url,$data){
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($curl, CURLOPT_POST, 1);
        curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        $result = curl_exec($curl);
        if(curl_errno($curl)) {
            return 'Errno'.curl_errno($curl);
        }
        curl_close($curl);
        return $result;
    }

 

 
posted @ 2016-07-12 15:59  王宇walkOn  阅读(5676)  评论(0编辑  收藏  举报