zoukankan      html  css  js  c++  java
  • 微信的网页授权登陆

     
    在登陆界面,让用户选择是手动登陆,还是微信授权登陆。
     
    如果是微信授权登陆(思路):微信授权登陆,判断数据库有没用这个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;
        }
     
  • 相关阅读:
    面试(转)
    Expression Blend实战开发技巧
    Twelve Principles of Agile Software
    Test Software Engineer
    Web开发工程师必读的15个设计博客
    麻省理工的C/C++的课程
    Orchard:处理1对多的关系
    DotNetNuke Switches to C# !!
    我的那个他
    2011 微软MVP全球大会
  • 原文地址:https://www.cnblogs.com/wangyuman26/p/5663845.html
Copyright © 2011-2022 走看看