zoukankan      html  css  js  c++  java
  • php 小程序获取用户信息

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

  • 相关阅读:
    关于SuperSocket启动失败
    ffmpeg 常用命令
    Url中有中文参数需要编码解码
    单例模式
    c# 文件夹重命名
    一个既有winform又有webapi 的例子
    数据库查询字段的结构和长度
    Jquery 展开收起
    ajax即时修改
    EFCore 迁移
  • 原文地址:https://www.cnblogs.com/ayanboke/p/9405733.html
Copyright © 2011-2022 走看看