本文实例讲述了php版微信自动登录并获取昵称的方法。分享给大家供大家参考,具体如下:
微信自动登录并获取昵称是可以通过api接口来获取的也是通过微信开放的接口来实现了,下面我们一起来看一个例子
仅记录:微信获取昵称自动登录
经过反复几次验证,发现我这个方法有缺陷:
微信内 未关注进入网站,无法获得昵称。
关注后用我这个方法可以获得昵称。
是否是因为第一次生成openid 所以还未生成昵称?待测试.
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
|
/**
* 获取当前页面完整URL地址
*/
function get_url() {
$sys_protocal = isset( $_SERVER [ 'SERVER_PORT' ]) && $_SERVER [ 'SERVER_PORT' ] == '443' ? 'https://' : 'http://' ;
$php_self = $_SERVER [ 'PHP_SELF' ] ? $_SERVER [ 'PHP_SELF' ] : $_SERVER [ 'SCRIPT_NAME' ];
$path_info = isset( $_SERVER [ 'PATH_INFO' ]) ? $_SERVER [ 'PATH_INFO' ] : '' ;
$relate_url = isset( $_SERVER [ 'REQUEST_URI' ]) ? $_SERVER [ 'REQUEST_URI' ] : $php_self .(isset( $_SERVER [ 'QUERY_STRING' ]) ? '?' . $_SERVER [ 'QUERY_STRING' ] : $path_info );
return $sys_protocal .(isset( $_SERVER [ 'HTTP_HOST' ]) ? $_SERVER [ 'HTTP_HOST' ] : '' ). $relate_url ;
}
$wxch_config = $db -> getRow( "SELECT * FROM `ecs_weixin_config` WHERE `id` = 1" );
$appid = $wxch_config [ 'appid' ];
$appsecret = $wxch_config [ 'appsecret' ];
$APPID = $appid ;
$SCRETID = $appsecret ;
if (! $_SESSION [ 'user_id' ] && strpos ( $_SERVER [ 'HTTP_USER_AGENT' ], 'MicroMessenger' ) !== false){
if (!isset( $_GET [ 'code' ]))
{
$backurl = get_url();
//$url = $jsApi->createOauthUrlForCode($backurl);
$url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" . $APPID . "&redirect_uri=" .urlencode( $backurl ). "&response_type=code&scope=snsapi_base&state=123#wechat_redirect" ;
//echo $url;
Header( "Location: $url" );
} else
{
//获取code码,以获取openid
$code = $_GET [ 'code' ];
$url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" . $APPID . "&secret=" . $SCRETID . "&code=" . $code . "&grant_type=authorization_code" ;
$re = curl_get_contents1( $url );
$rearr = json_decode( $re ,true);
$openid = $rearr [ 'openid' ];
//var_dump($rearr);
//$jsApi->setCode($code);
//$openid = $jsApi->getOpenid();
$user_name = $db ->getOne( "select uname from ecs_weixin_user where wxid = '{$openid}'" );
if ( $openid && ! $user_name ){ //注册进入
$passw = md5( 'shanmao.me' .rand(1,18650144002));
$wxch_user_sql = "INSERT INTO `ecs_weixin_user` (`wxid`,`setp`) VALUES ('$openid','3')" ;
$db -> query( $wxch_user_sql );
$ecs_user_id = $db -> insert_id();
if ( $ecs_user_id <=0){
exit ( 'error get insert_id' );
}
$url3 = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" . $APPID . "&secret=" . $SCRETID ;
$re3 = curl_get_contents1( $url3 );
$re3arr = json_decode( $re3 ,true);
$token = $re3arr [ 'access_token' ];
$url2 = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=" . $token . "&openid=" . $openid . "&lang=zh_CN" ;
$re2 = curl_get_contents1( $url2 );
$rearr2 = json_decode( $re2 ,true);
$uc_username = $rearr2 [ 'nickname' ]? $rearr2 [ 'nickname' ]: 'doubag' . $ecs_user_id ;
$time = gmtime();
$user_sql = "INSERT INTO `ecs_users` (`user_name`,`password`,`reg_time`) VALUES ('$uc_username','$passw','$time')" ;
$db -> query( $user_sql );
$uc_update = "UPDATE ecs_weixin_user SET `uname` = '$uc_username' WHERE `uid` = '$ecs_user_id'" ;
$db -> query( $uc_update );
$user ->set_session( $uc_username );
$user ->set_cookie( $uc_username ,1);
update_user_info();
/*
$up_uid = get_affiliate();
if($up_uid>0){
$sql = 'UPDATE ecs_users SET parent_id = ' . $up_uid . ' WHERE user_id = ' . $ecs_user_id;
$db ->query($sql);
header('Location: user.php?newuser=1');
}*/
} else {
$user ->set_session( $user_name );
$user ->set_cookie( $user_name ,1);
update_user_info();
}
//setcookie("sopenid",$openid,time()+864000,'/');
}
}
//var_dump($openid);
function curl_get_contents1( $url ) {
$ch = curl_init();
curl_setopt( $ch , CURLOPT_URL, $url );
curl_setopt( $ch , CURLOPT_TIMEOUT, 2);
curl_setopt( $ch , CURLOPT_USERAGENT, "IE 6.0" );
curl_setopt( $ch , CURLOPT_REFERER, "" );
curl_setopt( $ch , CURLOPT_FOLLOWLOCATION, 1);
curl_setopt( $ch , CURLOPT_RETURNTRANSFER, true);
curl_setopt( $ch , CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt( $ch , CURLOPT_SSL_VERIFYHOST, false);
$r = curl_exec( $ch );
curl_close( $ch );
return $r ;
}
|
希望本文所述对大家PHP程序设计有所帮助。