微信登陆一个是网页授权登陆,另一个是微信联合登陆
网页授权登陆:
微信联合登陆:
一、首先把微信链接带个标识生成二维码
比如链接为
https://open.weixin.qq.com/connect/oauth2/authorize?appid='.$appid.'&redirect_uri='.$url.'&response_type=code&scope=snsapi_userinfo&state=1#wechat_redirect'
publicfunctioncreatqrAction(){
if($_GET['app']){
$wtoken=$_COOKIE['wtoken'];
$postdata=$_SESSION['w_state'];
if($wtoken){
$postdata=$wtoken;
}
includeCONFIG_PATH .'phpqrcode/'.'phpqrcode.php'
$sh=$this->shar1();
$value="https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx138697ef383a9167&redirect_uri=http://www.xxx.net/login/wcallback&response_type=code&scope=snsapi_userinfo&state=".$postdata."&connect_redirect=1#wechat_redirect";
$errorCorrectionLevel ="L";
$matrixPointSize ="5";
QRcode::png($value,false, $errorCorrectionLevel, $matrixPointSize);
}
}
此时生成了二维码 state是标识,phpqrcode可以在文章末尾下载,这样我们设置了回调地址http://www.xxx.net/login/wcallback
就可以在wcallback方法里面处理数据 插入用户 生成session,跳转登陆,pc端可以设置几秒钟ajax请求服务器,一旦获取到了state,即实现调整,微信浏览器里处理完后可以关闭窗口,微信js可实现:
也可以授权登陆成功后跳转到微信服务号关注页面:
header("Location: weixin://profile/gh_a5e1959f9a4e");
wcallback方法做处理登陆
$code = $_GET['code'];
$state = $_GET['state'];
$setting =includeCONFIG_PATH .'setting.php'
$appid=$setting['weixin']['appid'];
$appsecret=$setting['weixin']['appsecret'];
if(emptyempty($code))$this->showMessage('授权失败');
try{
$token_url ='https://api.weixin.qq.com/sns/oauth2/access_token?appid='.$appid.'&secret='.$appsecret.'&code='.$code.'&grant_type=authorization_code'
$token = json_decode($this->https_request($token_url));
}catch(Exception$e)
{
print_r($e);
}
if(isset($token->errcode)) {
echo'错误:'.$token->errcode;
echo'错误信息:'.$token->errmsg;
exit;
}
$access_token_url ='https://api.weixin.qq.com/sns/oauth2/refresh_token?appid='.$appid.'&grant_type=refresh_token&refresh_token='.$token->refresh_token;
//转成对象
$access_token = json_decode($this->https_request($access_token_url));
if(isset($access_token->errcode)) {
echo'错误:'.$access_token->errcode;
echo'错误信息:'.$access_token->errmsg;
exit;
}
$user_info_url ='https://api.weixin.qq.com/sns/userinfo?access_token='.$access_token->access_token.'&openid='.$access_token->openid.'&lang=zh_CN'
//转成对象
$user_info = json_decode($this->https_request($user_info_url));
if(isset($user_info->errcode)) {
echo'错误:'.$user_info->errcode;
echo'错误信息:'.$user_info->errmsg;
exit;
}
//打印用户信息
// echo ''
// print_r($user_info);
// echo ''
phpqrcode类库下载在此不提供各位可以百度搜索下载
查看授权后接口调用(UnionID),不难发现填写回调地址,用户确认登陆pc端即可跳转
获取UnionID方法
publicfunctionwcallbackAction(){
$code = $_GET['code'];
$state = $_GET['state'];
$setting =includeCONFIG_PATH .'setting.php';
$appid=$setting['weixin']['appid'];
$appsecret=$setting['weixin']['appsecret'];
if(emptyempty($code))$this->showMessage('授权失败');
try{
$token_url ='https://api.weixin.qq.com/sns/oauth2/access_token?appid='.$appid.'&secret='.$appsecret.'&code='.$code.'&grant_type=authorization_code';
$token = json_decode($this->https_request($token_url));
}catch(Exception$e)
{
print_r($e);
}
if(isset($token->errcode)) {
echo'错误:'.$token->errcode;
echo'
错误信息:
'.$token->errmsg;
exit;
}
$access_token_url ='https://api.weixin.qq.com/sns/oauth2/refresh_token?appid='.$appid.'&grant_type=refresh_token&refresh_token='.$token->refresh_token;
//转成对象
$access_token = json_decode($this->https_request($access_token_url));
if(isset($access_token->errcode)) {
echo'错误:'.$access_token->errcode;
echo'
错误信息:
'.$access_token->errmsg;
exit;
}
$user_info_url ='https://api.weixin.qq.com/sns/userinfo?access_token='.$access_token->access_token.'&openid='.$access_token->openid.'&lang=zh_CN';
//转成对象
$user_info = json_decode($this->https_request($user_info_url));
if(isset($user_info->errcode)) {
echo'错误:'.$user_info->errcode;
echo'
错误信息:
'.$user_info->errmsg;
exit;
}
//打印用户信息
// echo '
';
// print_r($user_info);
// echo '';
//获取unionid
$uid=$user_info->unionid;
}
//用户操作处理 分为再次登录和第一次登陆
$sql="select h_user_id from dtb_user_binded as t1 left join dtb_user_weixin as t2 on t1.u_id=t2.id where t1.u_type='".
User::$arrUtype['weixin_num_t']."' and t2.openid='$user_info->unionid'";
$h_user_id = Core_Db::getOne($sql);
if(!emptyempty($h_user_id)){//该weixin号再次登录
}{//该weixin号第一次登录
}
以上内容希望帮助到大家,有需要的可以添加下方二维码进群交流学习新技术。
如果你想和PHP大神交流加微信,拉你入群
如果你想获得学习资料加微信,送你资源
领取专属 10元无门槛券
私享最新 技术干货