php 小程序获取用户信息

时间:2024-02-16 21:53:56

  小程序获取用户信息,首先获取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();
}