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+DBM的同学录程序(1)
Oct 09 PHP
Ajax PHP 边学边练 之三 数据库
Nov 26 PHP
让你成为更出色的PHP开发者的10个技巧
Feb 25 PHP
真正根据utf8编码的规律来进行截取字符串的函数(utf8版sub_str )
Oct 24 PHP
php上传功能集后缀名判断和随机命名(强力推荐)
Sep 10 PHP
带你了解PHP7 性能翻倍的关键
Nov 19 PHP
yii2.0实现验证用户名与邮箱功能
Dec 22 PHP
PHP使用http_build_query()构造URL字符串的方法
Apr 02 PHP
PHP获取用户访问IP地址的5种方法
May 16 PHP
PHP获取链表中倒数第K个节点的方法
Jan 18 PHP
PHP+MySQL实现输入页码跳转到指定页面功能示例
Jun 01 PHP
PHP实现负载均衡的加权轮询方法分析
Aug 22 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使用GETDATE获取当前日期时间作为一个关联数组的方法
2015/03/19 PHP
PHP实现过滤各种HTML标签
2015/05/17 PHP
创建无限极分类树型结构的简单方法
2017/06/20 PHP
PHP基于socket实现客户端和服务端通讯功能
2017/07/13 PHP
PHP实现的策略模式简单示例
2017/08/25 PHP
PHP实现的用户注册表单验证功能简单示例
2019/02/25 PHP
thinkPHP5框架接口写法简单示例
2019/08/05 PHP
javaScript 读取和设置文档元素的样式属性
2009/04/14 Javascript
jquery 结合C#后台的数组对文章的关键字自动添加链接的代码
2011/07/15 Javascript
JavaScript中的字符串操作详解
2013/11/12 Javascript
javascript实现tab切换的两个实例
2015/11/05 Javascript
JavaScript根据CSS的Media Queries来判断浏览设备的方法
2016/05/10 Javascript
jQuery获取及设置表单input各种类型值的方法小结
2016/05/24 Javascript
在js中实现邮箱格式的验证方法(推荐)
2016/10/24 Javascript
javascript如何用递归写一个简单的树形结构示例
2017/09/06 Javascript
js数组实现权重概率分配
2017/09/12 Javascript
JS自定义对象创建与简单使用方法示例
2020/01/15 Javascript
[08:07]DOTA2每周TOP10 精彩击杀集锦vol.8
2014/06/25 DOTA
python登录pop3邮件服务器接收邮件的方法
2015/04/30 Python
Python中的自省(反射)详解
2015/06/02 Python
python 网络爬虫初级实现代码
2016/02/27 Python
用Python实现读写锁的示例代码
2018/11/05 Python
在PyCharm中实现关闭一个死循环程序的方法
2018/11/29 Python
详解Python解决抓取内容乱码问题(decode和encode解码)
2019/03/29 Python
Python定义函数时参数有默认值问题解决
2019/12/19 Python
Python批量将图片灰度化的实现代码
2020/04/11 Python
python同时遍历两个list用法说明
2020/05/02 Python
ansible-playbook实现自动部署KVM及安装python3的详细教程
2020/05/11 Python
Python用类实现扑克牌发牌的示例代码
2020/06/01 Python
python time()的实例用法
2020/11/03 Python
Python xlwings插入Excel图片的实现方法
2021/02/26 Python
Lookfantastic希腊官网:英国知名美妆购物网站
2018/09/15 全球购物
平面设计自荐信
2013/10/07 职场文书
小学英语教师2015年度个人工作总结
2015/10/14 职场文书
六五普法先进个人主要事迹材料
2015/11/03 职场文书
街道办残联2016年助残日活动总结
2016/04/01 职场文书