您的位置:首页 > 移动开发 > 微信开发

微信的网页授权登陆

2016-07-12 15:59 225 查看
在登陆界面,让用户选择是手动登陆,还是微信授权登陆。

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

如果是手动登陆(思路): 用户在微信客户端,选择手动后,提醒是否绑定微信号
     如果选择绑定微信号,则把当前微信的openid与用户信息绑定,保存到数据库。 (则下次就不用再手动输入,就可以通过微信授权登陆到这个账号)。

思路二:

①如果这个openid不存在
即首次进入,跳转到登陆页,需要用户手动登陆(通过手机号、密码,完成登陆)
登陆成功,提示是否微信授权,如果同意微信授权(把这个openid与手动登陆的账号绑定),下次可以自动登陆。

③如果这个openid已经存在
openid对应用户存在的情况下,检查用户是否能够合法登录
保存用户信息到session完成登录;
则跳转到主页。

公众号和服务号的网页授权登陆:  
  微信开发文档:  https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842&token=&lang=zh_CN
  获取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'];
…………………………
}


企业号的网页授权登陆:
  微信开发文档: http://qydev.weixin.qq.com/wiki/index.php?title=OAuth%E9%AA%8C%E8%AF%81%E6%8E%A5%E5%8F%A3 
  获取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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: