时间:2021-07-01 10:21:17 帮助过:18人阅读
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\v1;
- use think\Loader;
- use think\Request;
- use Workerman\Protocols\Http;
- use Wxxcx\WXBizDataCrypt;
- use first\second\Foo;
- class 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({
- success: res => {
- if (res.authSetting['scope.userInfo']) {
- // 已经授权,可以直接调用 getUserInfo 获取头像昵称,不会弹框
- wx.getUserInfo({
- success: res => {
- 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
- },
- success: function (ret) {
- console.log(ret);
- }
- })
- // 可以将 res 发送给后台解码出 unionId
- this.globalData.userInfo = res.userInfo
- // 由于 getUserInfo 是网络请求,可能会在 Page.onLoad 之后才返回
- // 所以此处加入 callback 以防止这种情况
- if (this.userInfoReadyCallback) {
- this.userInfoReadyCallback(res)
- }
- }
- })
- }
- }
- })
- },
如果有报错, 自己调试一下, 看看哪里的变量有问题 查找原因.
以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!
相关推荐:
关于thinkPHP框架对接支付宝即时到账接口回调问题的解析
关于thinkPHP微信分享接口JSSDK的用法解析
关于Thinkphp5 微信公众号token验证不成功的原因及解决方法
以上就是如何利用Thinkphp5微信小程序获取用户信息接口的详细内容,更多请关注Gxl网其它相关文章!