PHP实现微信扫码自动登陆与注册,参考实例

微信登陆一个是网页授权登陆,另一个是微信联合登陆

网页授权登陆:

微信联合登陆:

一、首先把微信链接带个标识生成二维码

比如链接为

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大神交流加微信,拉你入群

如果你想获得学习资料加微信,送你资源

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190117A0HE2R00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券