php实现微信扫码自动登陆与注册功能

本文实例讲述了php实现微信扫码自动登陆与注册功能。分享给大家供大家参考,具体如下:

微信开发已经是现在程序员必须要掌握的一项基本的技术了,其实做过微信开发的都知道微信接口非常的强大做起来也非常的简单,这里我们一起来看一个微信自动登陆注册的例子.

php 微信扫码 pc端自动登陆注册 用的接口scope 是snsapi_userinfo,微信登陆一个是网页授权登陆,另一个是微信联合登陆

网页授权登陆:http://mp.weixin.qq.com/wiki/17/c0f37d5704f0b64713d5d2c37b468d75.html

微信联合登陆:https://open.weixin.qq.com/cgi-bin/frame?t=home/web_tmpl&lang=zh_CN

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

比如链接为 https://open.weixin.qq.com/connect/oauth2/authorize?appid='.$appid.'&redirect_uri='.$url.'&response_type=code&scope=snsapi_userinfo&state=1#wechat_redirect'  我们可以在state上做文章,因为state你传入什么微信那边返回什么

可以作为服务器与微信段的一个标识:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public function creatqrAction(){
if ( $_GET [ 'app' ]){
$wtoken = $_COOKIE [ 'wtoken' ];
$postdata = $_SESSION [ 'w_state' ];
if ( $wtoken ){
$postdata = $wtoken ;
}
include CONFIG_PATH . 'phpqrcode/' . 'phpqrcode.php'
$sh = $this ->shar1();
$errorCorrectionLevel = "L" ;
$matrixPointSize = "5" ;
QRcode::png( $value , false, $errorCorrectionLevel , $matrixPointSize );
}
}

此时生成了二维码 state是标识,phpqrcode可以在文章末尾下载,这样我们设置了回调地址http://www.xxx.net/login/wcallback

就可以在wcallback方法里面处理数据 插入用户 生成session,跳转登陆,pc端可以设置几秒钟ajax请求服务器,一旦获取到了state,即实现调整,微信浏览器里处理完后可以关闭窗口,微信js可实现:

?
1
2
document.addEventListener( 'WeixinJSBridgeReady' , function onBridgeReady() {
WeixinJSBridge.call( 'closeWindow' );}, false );

也可以授权登陆成功后跳转到微信服务号关注页面:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
header( "Location: weixin://profile/gh_a5e1959f9a4e" );
wcallback方法做处理登陆
$code = $_GET [ 'code' ];
$state = $_GET [ 'state' ];
$setting = include CONFIG_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类库下载在此不提供各位可以百度搜索下载

magento微信扫码网站自动登录的例子
https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&lang=zh_CN

查看授权后接口调用(UnionID),不难发现填写回调地址,用户确认登陆pc端即可跳转

获取UnionID方法

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
public function wcallbackAction(){
$code = $_GET [ 'code' ];
$state = $_GET [ 'state' ];
$setting = include CONFIG_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 '<h1>错误:</h1>' . $token ->errcode;
echo '<br/><h2>错误信息:</h2>' . $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 '<h1>错误:</h1>' . $access_token ->errcode;
echo '<br/><h2>错误信息:</h2>' . $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 '<h1>错误:</h1>' . $user_info ->errcode;
echo '<br/><h2>错误信息:</h2>' . $user_info ->errmsg;
exit ;
}
//打印用户信息
// echo '<pre>';
// print_r($user_info);
// echo '</pre>';
//获取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号第一次登录
}

转载于:https://www.cnblogs.com/yyjie/p/7306056.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值