以前讲过微信的公众号自动登陆的菜单配置,此次记录一下在TP5项目中获取自动登陆的用户信息并存到数据库的操做php
基本的流程为:微信设置自动登陆的菜单—>访问的URL指定的函数里获取用户信息—>将信息存到数据库中->返回视图数据库
也能够参考下列流程图:json
接下来咱们一步步编写代码。api
// 公众号配置 'wechat' => [ // AppId 'AppId' => "你的公众号AppId", // 微信支付APPID // AppSecret 'AppSecret' => "你的公众号AppSecret", // 公众账号secert (公众号支付专用) ],
use \think\Session; use \think\Config;
// 获取配置文件里的信息 $wx_config = Config::get('wechat');
// 用于请求微信接口获取数据 function get_by_curl($url,$post = false){ $ch = curl_init(); curl_setopt($ch,CURLOPT_URL,$url); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); if($post){ curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS,$post); } $result = curl_exec($ch); curl_close($ch); return $result; }
如下流程直接贴所有完整代码微信
这里的code参数是你以前设定的那个菜单的url在微信内访问后,会根据用户信息自动生成,跳转到你的url后会自动加在url后面session
// 获取页面URL的CODE参数,判断是否有值 if(isset($_GET['code'])) { // 获取openid和access_token $app_id = $wx_config['AppId']; $app_secret = $wx_config['AppSecret']; $code = $_GET['code']; // 发送请求,获取用户openid和access_token $data = $this->get_by_curl('https://api.weixin.qq.com/sns/oauth2/access_token?appid='.$app_id.'&secret='.$app_secret.'&code='.$code.'&grant_type=authorization_code'); $data = json_decode($data); // 防止第二次访问动态连接报错 // 判断是否获取到当前用户的openid if(isset($data->openid)){ $open_id = $data->openid; $access_token = $data->access_token; // 获取当前用户信息 $user_info = $this->get_by_curl('https://api.weixin.qq.com/sns/userinfo?access_token='.$access_token.'&openid='.$open_id.'&lang=zh_CN'); $user_info = json_decode($user_info); // 取出用户信息 /* *user_openid :用户openId *user_nickname :用户昵称 *user_sex :性别 *user_province :省 *user_city :城市 *user_headimgurl :用户头像url */ $user_openid = $user_info->openid; $user_nickname = $user_info->nickname; $user_sex = $user_info->sex; $user_province = $user_info->province; $user_city = $user_info->city; $user_headimgurl = $user_info->headimgurl; // 如下操做可按照本身的需求编写,这里只作例子 // 判断用户是否存在 $data_user = model('app\admin\model\User') ->where('open_id','=',$user_openid) ->find(); if(empty($data_user)){ $new_user = model('app\admin\model\User'); $new_user->data([ 'open_id' => $user_openid, 'name' => $user_nickname, 'sex' => $user_sex, 'province' => $user_province, 'city' => $user_city, 'headimgurl' => $user_headimgurl, 'join_time' => time(), ]); // 新增用户到数据库 $new_user->save(); } $cur_user = model('app\admin\model\User') ->where('open_id','=',$user_openid) ->find(); // 判断当前用户是否修改过信息,如有变更则更新 if(strcmp($cur_user->name,$user_nickname)!=0||strcmp($cur_user->headimgurl,$user_headimgurl)!=0){ $cur_user->name = $user_nickname; $cur_user->headimgurl = $user_headimgurl; // 更新当前用户信息 $cur_user->save(); } // 将当前用户openid做为标识存到session里 Session::set('open_id', $cur_user->open_id); } }
return $this->view->fetch('index');
至此就完成了公众号网页获取当前用户信息,并保存到数据库的操做app
注意:若是没法得到数据,请检查AppID和AppSecret是否正确,同时,还要检查是否给你访问的网页域名受权了curl