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中extract()函数的妙用分析
Jul 11 PHP
PHP基础陷阱题(变量赋值)
Sep 12 PHP
PHP中文分词 自动获取关键词介绍
Nov 13 PHP
用Php编写注册后Email激活验证的实例代码
Mar 11 PHP
使用php实现截取指定长度
Aug 06 PHP
yii框架builder、update、delete使用方法
Apr 30 PHP
封装ThinkPHP的一个文件上传方法实例
Oct 31 PHP
PHP-FPM运行状态的实时查看及监控详解
Nov 18 PHP
PHP设计模式之适配器模式定义与用法详解
Apr 03 PHP
PHP实现的日历功能示例
Sep 01 PHP
PHP单文件上传原理及上传函数的封装操作示例
Sep 02 PHP
PHP函数用法详解【初始化、嵌套、内置函数等】
Jun 02 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
在PHP中执行系统外部命令
2006/10/09 PHP
台湾中原大学php教程孙仲岳主讲
2008/01/07 PHP
PHP创建word文档的方法(平台无关)
2016/03/29 PHP
PHP基于简单递归函数求一个数阶乘的方法示例
2017/04/26 PHP
php app支付宝回调(异步通知)详解
2018/07/25 PHP
用js实现的页面关键字密度查询代码
2007/12/27 Javascript
js 操作select相关方法函数
2009/12/06 Javascript
JS判断不同分辨率调用不同的CSS样式文件实现思路及测试代码
2013/01/23 Javascript
js修改原型的属性使用介绍
2014/01/26 Javascript
Js 正则表达式知识汇总
2014/12/02 Javascript
javascript实现动态表头及表列的展现方法
2015/07/14 Javascript
jQuery多条件筛选如何实现
2015/11/04 Javascript
bootstrap布局中input输入框右侧图标点击功能
2016/05/16 Javascript
js 连续赋值的简单实现
2016/06/13 Javascript
判断横屏竖屏(三种)
2017/02/13 Javascript
JavaScript实现二分查找实例代码
2017/02/22 Javascript
jQuery 实现图片的依次加载图片功能
2017/07/06 jQuery
Python用Pillow(PIL)进行简单的图像操作方法
2017/07/07 Python
Python使用matplotlib实现基础绘图功能示例
2018/07/03 Python
python读取Excel实例详解
2018/08/17 Python
Python数据预处理之数据规范化(归一化)示例
2019/01/08 Python
Pytorch 神经网络—自定义数据集上实现教程
2020/01/07 Python
python numpy 矩阵堆叠实例
2020/01/17 Python
windows10 pycharm下安装pyltp库和加载模型实现语义角色标注的示例代码
2020/05/07 Python
校园学雷锋活动月总结
2014/03/09 职场文书
小班评语大全
2014/05/04 职场文书
小学美术兴趣小组活动总结
2014/07/07 职场文书
自查自纠工作情况报告
2014/10/29 职场文书
2014年小学教研工作总结
2014/12/06 职场文书
2015中秋节慰问信范文
2015/03/23 职场文书
幼儿园教研工作总结2015
2015/05/12 职场文书
老人与海读书笔记
2015/06/26 职场文书
毕业典礼主持词
2015/06/29 职场文书
卖车协议书范文
2016/03/23 职场文书
利用Sharding-Jdbc进行分库分表的操作代码
2022/01/22 Java/Android
使用Python通过企业微信应用给企业成员发消息
2022/04/18 Python