微信的网页授权登陆
在登陆界面,让用户选择是手动登陆,还是微信授权登陆。
如果是微信授权登陆(思路):微信授权登陆,判断数据库有没用这个openid
①如果这个openid不存在
①如果这个openid不存在
保存这个openid到数据库;
然后直接跳转到完善信息页面,包括:用户昵称(登陆名)、密码、手机号。
@如果手机号不存在,则保存完善的用户信息,并且保存用户信息到session完成登录。
@如果手机号已经存在,直接把微信授权用户的信息保存到之前的用户信息里面,并且删除之前保存的授权用户信息。并且保存用户信息到session完成登录。
用户完善信息成功,可以在PC端登陆。
②如果这个openid已经存在,但没有完善个人信息
然后直接跳转到完善信息页面,包括:用户昵称(登陆名)、密码、手机号。
@如果手机号不存在,则保存完善的用户信息,并且保存用户信息到session完成登录。
@如果手机号已经存在,直接把微信授权用户的信息保存到之前的用户信息里面,并且删除之前保存的授权用户信息。并且保存用户信息到session完成登录。
用户完善信息成功,可以在PC端登陆。
②如果这个openid已经存在,但没有完善个人信息
则跳转到完善信息页
③如果这个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; }