1、安装thinkphp

composer create-project topthink/think=5.1.* tp5

2、在框架中安装JWT扩展

composer require firebase/php-jwt

3、新建API模块

建议 使用版本控制,api/v1/controller

在API模块下common.php中定义接口 返回参数码

const ERRNO_MAP = ['OK' => '成功','DBERR' => '数据库查询错误','NODATA' => '无数据','DATAEXIST' => '数据已存在','DATAERR' => '数据错误','SESSIONERR' => '用户未登录','LOGINERR' => '用户登录失败','PARAMERR' => '参数错误','USERERR' => '用户不存在或未激活','ROLEERR' => '用户身份错误','PWDERR' => '密码错误','REQERR' => '非法请求或请求次数受限','IPERR' => 'IP受限','THIRDERR' => '第三方系统错误','IOERR' => '文件读写错误','SERVERERR' => '内部错误','UNKOWNERR' => '未知错误',
];const ERRNO = ['OK' => '0','DBERR' => '4001','NODATA' => '4002','DATAEXIST' => '4003','DATAERR' => '4004','SESSIONERR' => '4101','LOGINERR' => '4102','PARAMERR' => '4103','USERERR' => '4104','ROLEERR' => '4105','PWDERR' => '4106','REQERR' => '4201','IPERR' => '4202','THIRDERR' => '4301','IOERR' => '4302','SERVERERR' => '4500','UNKOWNERR' => '4501',
];

3.1、定义返回数据方法和获取和 解密token方法

 /*** @return \think\response\Json* @throws Exception* @author: LuckyHhy <jackhhy520@qq.com>* @date: 2020/3/12* @name: ajaxReturn* @describe:向前端返回JSON数据*/function ajaxReturn() {// 形参个数$args_num = func_num_args();// 形参列表$args = func_get_args();if (1 === $args_num) {return json(['errno' => ERRNO['OK'],'msg'   => '成功','data'  => $args[0]]);}if (2 === $args_num) {return json(['errno' => $args[0],'msg'   => $args[1]]);}if (3 === $args_num) {return json(['errno' => $args[0],'msg'   => $args[1],'data'  => $args[2]]);}throw new Exception("Error The number of parameters can be one or two or three");}/*** @param $data* @return JWT|string* @author: LuckyHhy <jackhhy520@qq.com>* @date: 2020/3/12* @name: setJWT* @describe:设置JWT*/function setJWT($data) {$jwt   = new JWT();$token = array(// "iss"  => "http://example.org", // 签发者// "aud"  => "http://example.com", // 认证者'iat'  => time(), // 签发时间'nbf'  => time(), // 生效时间'exp'  => (time() + 60 * 60 * 24 * 7), // 过期时间  7天后的时间戳'data' => $data,);$jwt = $jwt::encode($token, \config('jwt_key'), 'HS256');return $jwt;}/*** @param $token* @return array|null* @author: LuckyHhy <jackhhy520@qq.com>* @date: 2020/3/12* @name: getJWT* @describe:获取JWT内容*/function getJWT($token) {$jwt  = new JWT();$data = null;try {$jwt_data = $jwt::decode($token, \config('jwt_key'), array('HS256'));$data     = (array) ($jwt_data->data);} catch (\Throwable $e) {Log::write($e->getMessage(), 'error');return null;}return $data;}

4、在API模块下 新建 check目录,新建  ApiCheck.php和ApiCheckLogin.php

4.1  ApiCheck.php (不需要验证登录就可以调取接口所需继承的控制器)

 /*** Class ApiCheck* @package app\common\controller*/class ApiCheck extends Controller{protected function initialize(){parent::initialize(); // TODO: Change the autogenerated stub//设置跨域请求header('content-type:application/json;charset=utf8');header('Access-Control-Allow-Origin:*');header('Access-Control-Allow-Methods:POST,GET');header('Access-Control-Allow-Headers:x-requested-with,content-type');}/*** @return \think\response\Json* @author: LuckyHhy <jackhhy520@qq.com>* @date: 2020/3/12* @name: miss* @describe: 路由miss方法*/public function miss() {return json(['errno' => \ERRNO['PARAMERR'],'msg'   => '访问接口不存在或参数错误']);}}

4.2、ApiCheckLogin (需要验证登录的继承这个验证控制器)

 /*** Class ApiCheckLogin* @package app\common\controller*/class ApiCheckLogin extends ApiCheck{/*** @var* @author: LuckyHhy <jackhhy520@qq.com>* @date: 2020/3/12-11:50*/protected $user_info;/*** @return \think\response\Json|void* @author: LuckyHhy <jackhhy520@qq.com>* @date: 2020/3/14 0014* @name: initialize* @describe:*/public function initialize() {$header=$this->request->header();//获取请求token$token = isset($header['token'])?$header['token']:null;/*** 验证是否登录*/if (is_null($token)) {header('Content-Type:application/json; charset=utf-8');exit(json_encode(['errno' => ERRNO['SESSIONERR'],'msg' => ERRNO_MAP['SESSIONERR']]));}/*** 验证登录是否过期*/$user_info = getJWT($token);if (is_null($user_info)) {header('Content-Type:application/json; charset=utf-8');exit(json_encode(['errno' => ERRNO['SESSIONERR'],'msg' => '登录已过期']));}/*** 存储用户信息*/$this->user_info = $user_info;}}

5、需要验证登录的登录控制器 login.php

class Login extends ApiCheck
{/*** @return \think\response\Json* @throws \Exception* @author: LuckyHhy <jackhhy520@qq.com>* @date: 2020/3/14 0014* @name: login* @describe:用户登录接口请求验证*/public function login(){//接受登录传过来的信息$param=$this->request->param();//1、验证登录信息// 密码账号等,假如通过//查询 用户所有信息$userInfo=['uid='=>1,"username"=>'jackhhy','password'=>'123456'];//返回用户信息 给与前端保存return ajaxReturn(setJWT($userInfo));}

6、获取数据

   //不需登录继承use app\api\check\ApiCheck;//需登录继承use app\api\check\ApiCheckLogin;/*** Class Comment* @package app\api\controller\v1*/class Comment extends ApiCheckLogin{/*** @return \think\response\Json* @throws \Exception* @author: LuckyHhy <jackhhy520@qq.com>* @date: 2020/3/12* @name: getComment* @describe:*/public function  getComment(){//查询数据$wechat_fans=db("wechat_fans")->paginate(15);return ajaxReturn(ERRNO['OK'],'查询数据成功',$wechat_fans);}}

7、定义 miss路由,在 route.php中

// 定义miss路由Route::miss('check/ApiCheck/miss');

8、整个api模块结构

9、数据返回

10、源代码下载

Thinkphp5+JWT开发 api接口相关推荐

  1. web api接口开发实例_C# 物联网开发API接口系列(4)

    C# 物联网开发API接口系列(四) #久爱物联网#MQTT# [提纲] 1)获取设备列表(某用户的) 2)单独检查设备是否存在合法 [正文] /// /// 获取设备列表 /// /// 令牌 // ...

  2. php接口开发 安全_PHP开发api接口安全验证的实例讲解

    php的api接口 在实际工作中,使用PHP写api接口是经常做的,PHP写好接口后,前台就可以通过链接获取接口提供的数据,而返回的数据一般分为两种情况,xml和json,在这个过程中,服务器并不知道 ...

  3. php api查询开发,PHP开发API接口(注册、登录、查询用户信息)的实例代码

    本节主要内容: php开发API接口的实现代码 一.PHP API接口的服务端部分 复制代码 代码示例: /** * PHP开发API接口 服务端 * edit: www.jbxue.com */ r ...

  4. 智表ZCELL产品V1.4.0开发API接口文档 与 产品功能清单

    为了方便大家使用ZCELL,应网友要求,整理编写了相关文档,现与产品一起同步发布,供大家下载使用,使用过程中如有疑问,请与我QQ联系. 智表(ZCELL)V1.4.0版本  功能清单文档下载地址: 功 ...

  5. php api查询开发,PHP 开发API接口 登记,登录,查询用户资料

    PHP 开发API接口 注册,登录,查询用户资料 服务端 0) { exit(json_encode(1)); //返回1表示注册失败 } else { $addsql = "insert ...

  6. 个人微信号二次开发sdk协议,微信个人号开发API接口

    个人微信号二次开发sdk协议,微信个人号开发API接口 微信SDK程序概要说明 个人微信号开发sdk非微信ipad协议.非mac协议,非安卓协议,api可实现微信99%功能: 无需扫码登录.可收发朋友 ...

  7. java系统智能手表_java_智能手表开发API接口,随着移动技术的发展,许多传 - phpStudy...

    智能手表开发API接口 随着移动技术的发展,许多传统的电子产品也开始增加移动方面的功能,比如过去只能用来看时间的手表,现今也可以通过智能手机或家庭网络与互联网相连,显示来电信息.邮件.照片.新闻.天气 ...

  8. 微信ipad安卓协议,微信开发API接口大全

    微信ipad安卓协议,微信开发API接口大全 目前市面上用于微信个人号的所有API协议,主要包括 web版微信协议, ipad协议 , pc微信协议/mac协议 , hook pc版微信 , hook ...

  9. wordpress 外部数据接口_在WordPress中开发API接口

    相信很多朋友都有在wordpress中开发API接口的需求 其实wordpress中进行API开发也不是有多大的难度.不过我走了很多弯路,所以在这里写下方法,以免更多人再走这条弯路. 在刚接到开发wo ...

最新文章

  1. Java8 详解Lambda表达式
  2. 【Http专题】Https
  3. zimbra xxe+ssrf 导致 getshell
  4. c++:结构体的应用
  5. 伦斯勒理工学院计算机科学本科,【择校解读】伦斯勒理工学院(RPI)院校指南...
  6. python实现手机号归属地相关信息查询
  7. CDI services--Decorators(装饰器)
  8. 聊聊Memcached的应用
  9. (转)Linux系统中sysctl命令详解 sysctl -p、sysctl -a、sysctl -w
  10. Linux gzip 压缩/解压 详解
  11. 2021年社招字节跳动测试开发工程师面试题
  12. 监控之Promethus+grafana概述及问题处理
  13. 关于html引用css无法加载——新手踩的坑
  14. MySQL数据库实验(六):创建学生信息管理系统
  15. R学习连续变量之间的关系
  16. 《蚂蚁金服11.11:支付宝和蚂蚁花呗的技术架构及实践》读后感
  17. 专访Dan Kohn:阡陌交迭,云原生布局开源生态构建及深度应用
  18. 华为鸿蒙亮利剑,华为亮利剑,超级主镜头+鸿蒙OS,所有期许或将如愿以偿
  19. Oracle 强制中止正在执行的SQL语句
  20. windows下设置GPU加速tensorflow运算(GT940M)

热门文章

  1. C#调用cplex出现引发类型为“ILOG.Concert.Exception”的异常
  2. 为什么需要一部21世纪的全球通史?
  3. vue项目使用域名部署(一个域名多个项目)
  4. python main传参args_python argh/argparse:如何将列表作为命令行参数传递?
  5. vop破芙工艺-注意事项
  6. 巴西龟饲养日志----野外捉鱼
  7. 7款免费发短信软件,看看哪一款适合你
  8. CVPR 2022 论文列表(持续更新)
  9. 工厂供电综合自动化实验QY-PGD11
  10. 我用 python 做了款可开淘宝店赚钱的工具!