php版微信自动登录并获取昵称的方法

 更新时间:2016年09月23日 08:45:47   作者:smiling  
这篇文章主要介绍了php版微信自动登录并获取昵称的方法,涉及php针对微信公众平台接口调用的相关操作技巧,需要的朋友可以参考下

本文实例讲述了php版微信自动登录并获取昵称的方法。分享给大家供大家参考,具体如下:

微信自动登录并获取昵称是可以通过api接口来获取的也是通过微信开放的接口来实现了,下面我们一起来看一个例子

仅记录:微信获取昵称自动登录

经过反复几次验证,发现我这个方法有缺陷:

微信内 未关注进入网站,无法获得昵称。

关注后用我这个方法可以获得昵称。

是否是因为第一次生成openid 所以还未生成昵称?待测试.

/**
* 获取当前页面完整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相关内容感兴趣的读者可查看本站专题:《PHP微信开发技巧汇总》、《PHP编码与转码操作技巧汇总》、《PHP网络编程技巧总结》、《PHP基本语法入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总

希望本文所述对大家PHP程序设计有所帮助。

相关文章

  • PHP生成静态页

    PHP生成静态页

    PHP生成静态页...
    2006-11-11
  • Laravel 5.4中migrate报错: Specified key was too long error的解决

    Laravel 5.4中migrate报错: Specified key was too long error的解决

    今天在执行laravel migrate时出现异常,找了好半天才找到问题所在,所以这篇文章主要给大家介绍了关于Laravel 5.4中migrate报错: Specified key was too long error的解决方法,需要的朋友可以参考下。
    2017-11-11
  • Laravel框架实现多数据库连接操作详解

    Laravel框架实现多数据库连接操作详解

    这篇文章主要介绍了Laravel框架实现多数据库连接操作,结合实例形式详细分析了Laravel框架连接2个数据库的具体操作步骤与相关实现技巧,需要的朋友可以参考下
    2019-07-07
  • PHP curl模拟登录带验证码的网站

    PHP curl模拟登录带验证码的网站

    最近接了个项目,其中有需求是要登录带验证码的网站,获取数据,但是我们不可能人为的一直去记录数据,想通过自动采集的方式进行,下面小编给大家带来的相关代码,对php curl 模拟登录带验证码的网站感兴趣的朋友一起学习吧
    2015-11-11
  • 微信自定义分享php代码分析

    微信自定义分享php代码分析

    这篇文章主要为大家详细分析了微信自定义分享php代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-11-11
  • CodeIgniter中使用cookie的三种方式详解

    CodeIgniter中使用cookie的三种方式详解

    这篇文章主要介绍了CodeIgniter中使用cookie的三种方式,非常简洁实用,需要的朋友可以参考下
    2014-07-07
  • php微信公众号开发之音乐信息

    php微信公众号开发之音乐信息

    这篇文章主要为大家详细介绍了php微信公众号开发之音乐信息,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-10-10
  • 详解yii2使用多个数据库的案例

    详解yii2使用多个数据库的案例

    本篇文章主要介绍了详解yii2使用多个数据库的案例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06
  • laravel 获取当前url的别名方法

    laravel 获取当前url的别名方法

    今天小编就为大家分享一篇laravel 获取当前url的别名方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-10-10
  • Laravel路由中不固定数量的参数如何实现?

    Laravel路由中不固定数量的参数如何实现?

    最近在学习laravel的时候发现了一个有趣的地方,下面和大家分享下,这篇文章主要给大家介绍了关于Laravel路由中不固定数量的参数是如何实现的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-12-12

最新评论