本文实例讲述了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程序设计有所帮助。