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 相关文章推荐
Windows下PHP5和Apache的安装与配置
Sep 05 PHP
php下获取客户端ip地址的函数
Mar 15 PHP
php抓取https的内容的代码
Apr 06 PHP
php做下载文件的实现代码及文件名中乱码解决方法
Feb 03 PHP
谷歌音乐搜索栏的提示功能php修正代码
May 09 PHP
php入门学习知识点五 关于php数组的几个基本操作
Jul 14 PHP
linux系统下php安装mbstring扩展的二种方法
Jan 20 PHP
php5.3以后的版本连接sqlserver2000的方法
Jul 28 PHP
php生成随机数的三种方法
Sep 10 PHP
PHP文件上传判断file是否己选择上传文件的方法
Nov 10 PHP
Linux下从零开始安装配置Nginx服务器+PHP开发环境
Dec 21 PHP
浅析PHP类的反射来实现依赖注入过程
Feb 06 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
使用XDebug调试及单元测试覆盖率分析
2011/01/27 PHP
php expects parameter 1 to be resource, array given 错误
2011/03/23 PHP
PHP使用mysql_fetch_object从查询结果中获取对象集的方法
2015/03/18 PHP
PHP实现批量生成App各种尺寸Logo
2015/03/19 PHP
php实现屏蔽掉黑帽SEO的搜索关键字
2015/04/15 PHP
基于Laravel 多个中间件的执行顺序详解
2019/10/21 PHP
Laravel Eloquent分表方法并使用模型关联的实现
2019/11/25 PHP
编写简单的jQuery提示插件
2014/12/21 Javascript
JavaScript中标识符提升问题
2015/06/11 Javascript
在Docker快速部署Node.js应用的详细步骤
2016/09/02 Javascript
jquery文字填写自动高度的实现方法
2016/11/07 Javascript
hovertree插件实现二级树形菜单(简单实用)
2016/12/28 Javascript
使用Angular缓存父页面数据的方法
2017/01/03 Javascript
Vue.js实现图片的随意拖动方法
2018/03/08 Javascript
vue定义全局变量和全局方法的方法示例
2018/08/01 Javascript
JavaScript中的一些实用小技巧总结
2019/04/07 Javascript
javascript实现画板功能
2020/04/12 Javascript
vue项目实现多语言切换的思路
2020/09/17 Javascript
解决element-ui的下拉框有值却无法选中的情况
2020/11/07 Javascript
python编程线性回归代码示例
2017/12/07 Python
浅谈Tensorflow模型的保存与恢复加载
2018/04/26 Python
python读写Excel表格的实例代码(简单实用)
2019/12/19 Python
Jupyter notebook设置背景主题,字体大小及自动补全代码的操作
2020/04/13 Python
Python grpc超时机制代码示例
2020/09/14 Python
matplotlib自定义鼠标光标坐标格式的实现
2021/01/08 Python
python绘制高斯曲线
2021/02/19 Python
CSS3动画:5种预载动画效果实例
2017/04/05 HTML / CSS
字中字效果的实现【html5实例】
2016/05/03 HTML / CSS
世界上最大的网络主机公司:1&1
2016/10/12 全球购物
如何判断计算机可能已经中马
2013/03/22 面试题
幼儿园实习自我鉴定
2013/12/15 职场文书
中专毕业生个人职业生涯规划
2014/02/19 职场文书
企业法人授权委托书
2014/04/03 职场文书
师德师风个人反思
2014/04/28 职场文书
体检通知范文
2015/04/21 职场文书
校园广播稿范文
2015/08/19 职场文书