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 相关文章推荐
Mysql中limit的用法方法详解与注意事项
Apr 19 PHP
C# Assembly类访问程序集信息
Jun 13 PHP
两个开源的Php输出Excel文件类
Feb 08 PHP
常用的PHP数据库操作方法(MYSQL版)
Jun 08 PHP
PHP图片处理类 phpThumb参数用法介绍
Mar 11 PHP
php提示无法加载或mcrypt没有找到 PHP 扩展 mbstring解决办法
Mar 27 PHP
PHP大小写问题:函数名和类名不区分,变量名区分
Jun 17 PHP
php实现数组筛选奇数和偶数示例
Apr 11 PHP
ThinkPHP 3.2 版本升级了哪些内容
Mar 05 PHP
PHP内置加密函数详解
Nov 20 PHP
php的PDO事务处理机制实例分析
Feb 16 PHP
TP5框架简单登录功能实现方法示例
Oct 31 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中empty和isset对于参数结构的判断及empty()和isset()的区别
2015/11/15 PHP
WordPress开发中短代码的实现及相关函数使用技巧
2016/01/05 PHP
javascript 文本框水印/占位符(watermark/placeholder)实现方法
2012/01/15 Javascript
jQuery Tools Dateinput使用介绍
2012/07/14 Javascript
cookie 最近浏览记录(中文escape转码)具体实现
2013/06/08 Javascript
js形成页面的一种遮罩效果实例代码
2014/01/04 Javascript
原生JS实现LOADING效果
2015/03/16 Javascript
简单解析JavaScript中的__proto__属性
2016/05/10 Javascript
javascript中replace使用方法总结
2017/03/01 Javascript
web页面和微信小程序页面实现瀑布流效果
2018/09/26 Javascript
React手稿之 React-Saga的详解
2018/11/12 Javascript
如何实现双向绑定mvvm的原理实现
2019/05/28 Javascript
layer弹出层倒计时关闭的实现方法
2019/09/27 Javascript
vue-model实现简易计算器
2020/08/17 Javascript
JavaScript实现鼠标经过表格某行时此行变色
2020/11/20 Javascript
[15:41]教你分分钟做大人——灰烬之灵
2015/03/11 DOTA
Python利用公共键如何对字典列表进行排序详解
2018/05/19 Python
python解析含有重复key的json方法
2019/01/22 Python
Python使用pyautocad+openpyxl处理cad文件示例
2019/07/11 Python
python爬虫 基于requests模块发起ajax的get请求实现解析
2019/08/20 Python
PyTorch中的padding(边缘填充)操作方式
2020/01/03 Python
python实现人机猜拳小游戏
2020/02/03 Python
python数据预处理 :数据抽样解析
2020/02/24 Python
纯CSS实现颜色渐变效果(包含环形渐变、线性渐变、彩虹效果等)
2014/05/07 HTML / CSS
CSS3 :default伪类选择器使用简介
2018/03/15 HTML / CSS
video下autoplay属性无效的解决方法(添加muted属性)
2020/05/19 HTML / CSS
Ann Taylor官方网站:美国最大的女性产品制造商之一
2016/09/14 全球购物
I.T中国官网:精选时尚设计师单品网购平台
2018/03/26 全球购物
Square Off美国/加拿大:世界上最聪明的国际象棋棋盘
2018/12/06 全球购物
一套PHP的笔试题
2013/05/31 面试题
物流司机岗位职责
2013/12/28 职场文书
考试作弊被抓检讨书
2014/01/10 职场文书
学校三八妇女节活动总结
2015/02/06 职场文书
2015年学生会部门工作总结
2015/04/21 职场文书
2016大学生暑期社会实践心得体会
2016/01/14 职场文书