• 技术文章 >后端开发 >php教程

    php实现微信自动登录并获取昵称的方法实例详解

    墨辰丷墨辰丷2018-06-01 10:28:53原创1464
    这篇文章主要介绍了php版微信自动登录并获取昵称的方法,涉及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实现递归目录的5种方法

    php函数mkdir实现递归创建层级目录的方法

    PHP下的浮点运算不准的解决方法

    以上就是php实现微信自动登录并获取昵称的方法实例详解的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:php 昵称 获取
    上一篇:PHP实现生成数据字典功能 下一篇:tp框架(thinkPHP)实现三次登陆密码错误之后锁定账号功能
    千万级数据并发解决方案

    相关文章推荐

    • 100道常见PHP面试题(附解析),增强你的知识储备!• 深入浅析PHP文件包含漏洞• 如何编译PHP源代码介绍ZendEncode的安装方法我今天刚调试成功,不敢独享,拿来献宝_PHP教程• 第十节--抽象方法和抽象类--ClassesandObjectsinPHP510_PHP教程• PHP4 Session实现的迷你购物篮一_PHP教程
    1/1

    PHP中文网