小程序获取用户信息,首先获取openid 和session_key来标识用户,获取这两个数需要前端传一个code。微信公众号开发的时候,这个code可以自己生成,但是小程序开发的时候不可以。
小程序的用户信息,是可以直接传输到后端的,现在最新版本的需要用户授权,授权之后前端穿头像,昵称,性别等入库即可),由于小程序不是在浏览器里打开的,没法用cookie,所以也没法用session,它的每次请求都要经过微信服务器中转。所以传输sessionid是获取不到session的,要想实现登陆功能,需要把session的信息存到redis等缓存之中,设置保存时间。也可以写死(安全系数低),会这样就不用每次登陆了,如果要登陆,也可以加个login_log表,然后根据create_time设置登陆过期时间,也就是一个 伪装的登陆。
session_start();
if(empty($_SESSION[\'openid\'])){
$data = array(
\'appid\'=>$this->appid,
\'secret\'=>$this->AppSecret,
\'js_code\'=>$_POST[\'code\'],
\'grant_type\'=>\'authorization_code\',
);
$appid = $this->appid;
$secret = $this->AppSecret;
$code = trim($_POST[\'code\']);
//获取openid
$url = \'https://api.weixin.qq.com/sns/jscode2session?appid=wx96fad81880c36&secret=dff3ab417538e67943cb109ef9c9e&js_code=\'.$code.\'&grant_type=authorization_code\';
$res = httprequest($url);
//用户openid跟session_key
$r = json_decode($res,true);
if(empty($r[\'openid\'])){
$msg[\'status\'] = \'error\';
$msg[\'msg\'] = \'获取openid错误\';
echo json_encode($msg);exit();
}
//获取是否有上级id 分享id
$pid = (int)$_POST[\'share_user\'];
//获取是否有渠道id
$channel = $_POST[\'channel\'];
//获取用户微信信息,包括昵称,头像等等
$u = $_POST[\'data\'];
$user = json_decode($u,true);
$data = array(
\'mobile\'=>\'\',//手机为空
\'password\'=>\'\',//密码为空
\'openid\'=>$r[\'openid\'],//用户唯一标识
\'nickname\'=>isset($user[\'nickName\'])?$user[\'nickname\']:\'\',//昵称
\'header\'=>isset($user[\'avatarUrl\'])?$user[\'avatarUrl\']:\'\',//用户头像
\'gender\'=>isset($user[\'gender\'])?$user[\'gender\']:0,//用户性别,1男2女
);
//保存openid
$_SESSION[\'openid\'] = $r[\'openid\'];
//根据openid去查询用户表
$userinfo = $this->USER->getRow(\'*\',array(\'openid\'=>$r[\'openid\']));
if(empty($userinfo)){
//如果是增加的时候,多加几条信息
$data[\'create_time\'] = time();
$data[\'channel_id\'] = $channel_id;
$data[\'pid\'] = $pid;
$data[\'share_num\'] = 0;
$data[\'status\'] = 1;
//如果没有信息,则录入信息
$this->USER->add($data);
}else{
//如果有信息,则更新
$this->USER->update($data,array(\'openid\'=>$r[\'openid\']));
}
//token 是另外开启一个会话
//由于sessionid每次请求都会变,所以换成opeid
$msg[\'status\'] = \'success\';
$msg[\'data\'][\'token\'] = $r[\'openid\'];
echo json_encode($msg);exit();
}