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类
Jul 15 PHP
搜索和替换文件或目录的一个好类--很实用
Oct 09 PHP
推荐php模板技术[转]
Jan 04 PHP
PHP 操作文件的一些FAQ总结
Feb 12 PHP
PHP导出MySQL数据到Excel文件(fputcsv)
Jul 03 PHP
PHP简洁函数(PHP简单明了函数语法)
Jun 10 PHP
ThinkPHP缓存方法S()概述
Jun 13 PHP
PHP封装的一个支持HTML、JS、PHP重定向的多功能跳转函数
Jun 19 PHP
Zend Framework页面缓存实例
Jun 25 PHP
基于PHP实现用户注册登录功能
Oct 14 PHP
PHP echo()函数讲解
Feb 15 PHP
thinkphp3.2框架中where条件查询用法总结
Aug 13 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
Terran建筑一览
2020/03/14 星际争霸
PHP入门学习笔记之一
2010/10/12 PHP
PHP实现数据分页显示的简单实例
2016/05/26 PHP
php5.3后静态绑定用法详解
2016/11/11 PHP
在laravel框架中使用model层的方法
2019/10/08 PHP
jquery select下拉框操作的一些说明
2010/04/02 Javascript
Node.js中对通用模块的封装方法
2014/06/06 Javascript
jquery操作HTML5 的data-*的用法实例分享
2014/08/17 Javascript
jquery和css3实现的炫酷时尚的菜单导航
2014/09/01 Javascript
JavaScript中eval()函数用法详解
2015/12/14 Javascript
jQuery使用经验小技巧(推荐)
2016/05/31 Javascript
AngularJS基础 ng-href 指令用法
2016/08/01 Javascript
原生JS取代一些JQuery方法的简单实现
2016/09/20 Javascript
jQuery表单验证简单示例
2016/10/17 Javascript
基于jQuery实现火焰灯效果导航菜单
2017/01/04 Javascript
jQuery实现一个简单的轮播图
2017/02/19 Javascript
详谈js中标准for循环与foreach(for in)的区别
2017/11/02 Javascript
如何使用puppet替换文件中的string
2018/12/06 Javascript
JS前端广告拦截实现原理解析
2020/02/17 Javascript
浅谈javascript如何获取文件后缀名
2020/08/07 Javascript
[03:58]2014DOTA2国际邀请赛 龙宝赛后解密DK获胜之道
2014/07/14 DOTA
[47:48]DOTA2上海特级锦标赛D组小组赛#2 Liquid VS VP第三局
2016/02/28 DOTA
Python实现比较扑克牌大小程序代码示例
2017/12/06 Python
python基础之包的导入和__init__.py的介绍
2018/01/08 Python
对python 自定义协议的方法详解
2019/02/13 Python
python新手学习使用库
2020/06/11 Python
CSS3 transforms应用于背景图像的解决方法
2019/04/16 HTML / CSS
澳大利亚和新西兰最大的在线旅行社之一:Aunt Betty
2019/08/07 全球购物
美国购买韩国护肤和美容产品网站:Althea Korea
2020/11/16 全球购物
linux面试题参考答案(3)
2012/09/13 面试题
学生发电厂实习自我鉴定
2013/09/22 职场文书
客户答谢会活动方案
2014/08/31 职场文书
大学毕业典礼演讲稿
2014/09/09 职场文书
2015年幼儿园元旦游艺活动策划书
2014/12/09 职场文书
兵马俑导游词
2015/02/02 职场文书
分家协议书范本
2016/03/22 职场文书