编程学习网 > 数据库 > Thinkphp5微信小程序获取用户信息接口的实例详解
2019
08-26

Thinkphp5微信小程序获取用户信息接口的实例详解



首先在官网下载示例代码, 选php的,这里有个坑,官方的php文件,编码是UTF-8+的, 所以要把文件改为UTF-8。


然后在Thinkphp5 extend文件夹下建立Wxxcx命名空间,把官方的几个类文件放进去(这里要注意文件夹名, 命名空间名, 类名的, 大小写,一定要一样,官方的文件名和类名大小写不一样)然后是自己的thinkphp接口代码:

<?php  /**   * Created by PhpStorm.   * User: leeoo   * Date: 2017/9/14 0014   * Time: 10:43   */ namespace app\api\controller\v1use think\Loaderuse think\Requestuse Workerman\Protocols\Httpuse Wxxcx\WXBizDataCryptuse first\second\Fooclass Index  {    public function index($id)    {      return json(['msg' => $id]);    }    public function dologin()    {      $code = Request::instance()->param('code');      $encryptedData = Request::instance()->param('encryptedData');      $iv = Request::instance()->param('iv');      $appid = "你的小程序appid";      $secret = "你的小程序secret";      //appid={$appid}&secret={$secret}&js_code={$code}&grant_type=authorization_code      $param = array(        'appid' => $appid,        'secret' => $secret,        'js_code' => $code,        'grant_type' => 'authorization_code'     );    //http函数为封装的请求函数      $res = http("https://api.weixin.qq.com/sns/jscode2session", $param, 'post');      $arr = json_decode($res, true);      $result = $this->wxdecode($encryptedData, $iv, $arr['session_key'], $appid);      //return json($result);      if ($result) {        return json(['code' => 1]);      } else {        return json(['code' => -1]);      }    }    public function wxdecode($encryptedData, $iv, $sessionKey, $appid)    {      //Loader::import('Wxxcx\WXBizDataCrypt', EXTEND_PATH);      $pc = new WXBizDataCrypt($appid, $sessionKey);      $data = null;      $errCode = $pc->decryptData($encryptedData, $iv, $data);      //echo $data;      //return json(['data'=>$data]);      $data = json_decode($data);      if ($errCode == 0) {        //print($data . "\n");        //dump($data);        return $data;      } else {        //print($errCode . "\n");        //dump($errCode);        return $errCode;      }    }  } 


http封装函数:

/**   * 发送HTTP请求方法   * @param string $url  请求URL   * @param array $params 请求参数   * @param string $method 请求方法GET/POST   * @return array $data  响应数据   */ function http($url, $params, $method = 'GET', $header = array(), $multi = false){    $opts = array(      CURLOPT_TIMEOUT    => 30,      CURLOPT_RETURNTRANSFER => 1,      CURLOPT_SSL_VERIFYPEER => false,      CURLOPT_SSL_VERIFYHOST => false,      CURLOPT_HTTPHEADER   => $header    );    /* 根据请求类型设置特定参数 */   switch(strtoupper($method)){      case 'GET':        $opts[CURLOPT_URL] = $url . '?' . http_build_query($params);        break;      case 'POST':        //判断是否传输文件        $params = $multi ? $params : http_build_query($params);        $opts[CURLOPT_URL] = $url;        $opts[CURLOPT_POST] = 1;        $opts[CURLOPT_POSTFIELDS] = $params;        break;      default:        throw new Exception('不支持的请求方式!');    }    /* 初始化并执行curl请求 */   $ch = curl_init();    curl_setopt_array($ch, $opts);    $data = curl_exec($ch);    $error = curl_error($ch);    curl_close($ch);    if($error) throw new Exception('请求发生错误:' . $error);    return $data;  } 


然后是小程序的代码:

// 获取用户信息    wx.getSetting({     successres => {      if (res.authSetting['scope.userInfo']) {       // 已经授权,可以直接调用 getUserInfo 获取头像昵称,不会弹框       wx.getUserInfo({        successres => {         console.log(res);         var encryptedData = res.encryptedData         var iv = res.iv         wx.request({          url"https://你的服务器地址/dologin",//dologin是访问后端的方法          method: "post",          data: {           code: code,           encryptedData: encryptedData,           iv: iv          },          successfunction (ret{           console.log(ret);          }         })         // 可以将 res 发送给后台解码出 unionId         this.globalData.userInfo = res.userInfo         // 由于 getUserInfo 是网络请求,可能会在 Page.onLoad 之后才返回         // 所以此处加入 callback 以防止这种情况         if (this.userInfoReadyCallback) {          this.userInfoReadyCallback(res)         }        }       })      }     }    })   }, 

扫码二维码 获取免费视频学习资料

Python编程学习

查 看2022高级编程视频教程免费获取