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


Posted in PHP onSeptember 23, 2016

本文实例讲述了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的特殊设置
Oct 09 PHP
用PHP和ACCESS写聊天室(二)
Oct 09 PHP
PHP随机字符串生成代码(包括大小写字母)
Jun 24 PHP
destoon整合UCenter图文教程
Jun 21 PHP
php绘制一个矩形的方法
Jan 24 PHP
WAMP环境中扩展oracle函数库(oci)
Jun 26 PHP
UPUPW 更新 64 位 Apache 系列 PHP 7.0 正式版
Dec 08 PHP
php+jQuery+Ajax实现点赞效果的方法(附源码下载)
Jul 21 PHP
PHP对象克隆clone用法示例
Sep 28 PHP
浅谈PHP中静态方法和非静态方法的相互调用
Oct 04 PHP
php使用PDO从数据库表中读取数据的实现方法(必看)
Jun 02 PHP
用Laravel轻松处理千万级数据的方法实现
Dec 25 PHP
php中使用websocket详解
Sep 23 #PHP
PHP用FTP类上传文件视频等的简单实现方法
Sep 23 #PHP
php使用ftp远程上传文件类(完美解决主从文件同步问题的方法)
Sep 23 #PHP
thinkphp制作404跳转页的简单实现方法
Sep 22 #PHP
thinkphp3.2.3版本的数据库增删改查实现代码
Sep 22 #PHP
thinkphp中多表查询中防止数据重复的sql语句(必看)
Sep 22 #PHP
thinkphp多表查询两表有重复相同字段的完美解决方法
Sep 22 #PHP
You might like
关于页面优化和伪静态
2009/10/11 PHP
非常好用的两个PHP函数 serialize()和unserialize()
2012/02/04 PHP
php计算两个日期相差天数的方法
2015/03/14 PHP
PHP结合jQuery.autocomplete插件实现输入自动完成提示的功能
2015/04/27 PHP
php析构函数的简单使用说明
2015/08/24 PHP
php+html5+ajax实现上传图片的方法
2016/05/14 PHP
jsp+javascript打造级连菜单的实例代码
2013/06/14 Javascript
jquery submit ie6下失效的原因分析及解决方法
2013/11/15 Javascript
js实现弹窗插件功能实例代码分享
2013/12/12 Javascript
js鼠标悬浮出现遮罩层的方法
2015/01/28 Javascript
jquery+CSS3实现淘宝移动网页菜单效果
2015/08/31 Javascript
JavaScript 经典实例日常收集整理(常用经典)
2016/03/30 Javascript
JavaScript预解析及相关技巧分析
2016/04/21 Javascript
基于BootStrap Metronic开发框架经验小结【九】实现Web页面内容的打印预览和保存操作
2016/05/12 Javascript
angular中的http拦截器Interceptors的实现
2017/02/21 Javascript
Js实现京东无延迟菜单效果实例(demo)
2017/06/02 Javascript
VUE 3D轮播图封装实现方法
2018/07/03 Javascript
javascript中关于类型判断的一些疑惑小结
2018/10/14 Javascript
Vue-input框checkbox强制刷新问题
2019/04/18 Javascript
Vue.js页面中有多个input搜索框如何实现防抖操作
2019/11/04 Javascript
[07:39]第一届亚洲邀请赛回顾视频
2017/02/14 DOTA
[01:08:00]Fnatic vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
[01:04:49]KG vs LGD 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
centos 下面安装python2.7 +pip +mysqld
2014/11/18 Python
TensorFlow实现卷积神经网络CNN
2018/03/09 Python
python安装和pycharm环境搭建设置方法
2020/05/27 Python
彻底弄明白CSS3的Media Queries(跨平台设计)
2010/07/27 HTML / CSS
科颜氏加拿大官方网站: Kiehl’s加拿大
2016/08/16 全球购物
函授自我鉴定
2013/11/06 职场文书
甜品店的创业计划书范文
2014/01/02 职场文书
全神贯注教学反思
2014/02/03 职场文书
学生会离职感言
2014/02/11 职场文书
幼儿教师国培感言
2014/02/19 职场文书
加入学生会演讲稿
2014/04/24 职场文书
财政局党的群众路线教育实践活动整改方案
2014/09/21 职场文书
2014年检验科工作总结
2014/11/22 职场文书