原作者网站http://dgapi.cmsxy.com/ 统一入口文件
利用帝国万能api接口插件开发的api/插件入口文件都是 /e/extend/api/index.php?[模块变量名]=[模块名]&[控制器变量名]=[控制器名]&[自定义变量]=[自定义变量] 例如: http://yourdomain/e/extend/api/index.php?m=user&c=count http://yourdomain/e/extend/api/index.php?m=user&c=info&id=1
某些平台回调地址中不允许出现问号怎么办?
使用伪静态功能,将地址简化即可。例如我们将上面的两个地址利用伪静态变成: http://yourdomain/dgapi/user/count http://yourdomain/dgapi/user/info?id=1
<IfModule mod_rewrite.c>
Options +FollowSymlinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^dgapi/([a-z]+)/([a-z]+)(.*)$ e/extend/api/index.php?m=$1&c=$2$3 [QSA,PT,L]
# 上一行的问号前面请添加一个反斜杠
</IfModule>
权限配置
这个配置文件会在安装的时候,将自动授权给一个管理组(当前操作的管理员所在的管理组),因此万一误操作将所有管理组权限都去掉而引起无法管理的情况出现,可以通过删除插件目录下的install.lock来解决。
基本设置
目前的基本设置比较简单,甚至在使用过程中都不需要搭理。但是它却是一个比较重要的功能,有了它我们可以解决一些重要的问题。 首先,我们来了解一下两个比较重要的名称:模块变量 与 控制器变量 默认它的值分别是 m 和 c
看下图你就能很快的了解它们会出现在哪里
假设我们的地址是 http://yourdomain/e/extend/api/index.php?m=user&c=count GET参数为m=user&c=count m 与 c 就是我们所设置的 模块变量 与 控制器变量
在一般情况下,我们是不需要理会这个设置。但是我们在开发接口的时候,可能会碰到一些需要回调地址的接口(比如支付宝充值)。而这个回调地址的参数是由第三方(支付宝)提供的,如果这个回调地址中的参数恰好有m 或者c 就会引起冲突。所以我们此处的设置应该尽可能的取一些不常用的值来防止这个问题。
什么是模块
简单的讲,一个模块就是多个功能的集合。 举个例子:假设需要做一个微信公众号的api接口,这个接口中有 自动回复、菜单编辑、关注有奖等功能。那么这些功能的集合就是一个模块或称作一个接口(其实称作模块更为合适)
模块结构
一个模块对应一个文件夹(位于 /e/extend/api/ 下),而每个模块包含一个配置文件 _conf.php 一个模块公共函数文件 _function.php 和多个控制器文件,模块名称只能由小写英文字母组成。
模块管理
添加/编辑 管理模块信息及状态
管理/删除 管理模块下的控制器,若是删除模块将会删除该模块下所有的控制器。
开启/禁用 禁用模块下的所有控制器都无法仿问。
导入模块
因为一个模块对应一个文件夹,所以导入一个模块十分的简单。 1、将模块文件夹复制到插件/e/extend/api/ 目录下。 2、在后台添加一个模块,模块名称为模块的目录名称。
什么是控制器
我们将一个模块(API)看成一个家庭,那么控制器就是这个家庭中的人员。每个人都有各自的特色,可以完成不同的工作,既是一个独立的个体又依赖与服务于家庭。所以一个模块(API)具体可以做什么,其实是取决于控制器。
api.class.php 方法
public_r $api->public_r 获取帝国公共配置,与全局变量$public_r相等 empire $api->empire 帝国数据库实例,用法与全局的$empire相同 load $api->load($name) 加载指定的扩展库 param $api->param( $name , [ $default = '' , $fn = 'trim' ] ) $name 参数名称 $default 默认值 $fn 过滤函数名 获取指定KEY 值的GET 或POST 变量值,且优先获取GET get $api->get( $name , [ $default = '' , $fn = 'trim' ] ) $name 参数名称 $default 默认值 $fn 过滤函数名 获取指定KEY 值的GET 变量值 post $api->post( $name , [ $default = '' , $fn = 'trim' ] ) $name 参数名称 $default 默认值 $fn 过滤函数名 获取指定KEY 值的POST 变量值 input $api->input( $name = '' , [ $default = '' , $fn = 'trim' ] ) $name 参数名称 $default 默认值 $fn 过滤函数名 获取指定KEY 值的POST 变量值,可以获取原始数据。$name 参数留空获取所有数据 show $api->show( $str = '' , [ $type = 'text/html' , $charset = 'utf-8' ] ) $str 字符串 $type 页面类型 $charset 页面编码 页面输出,完成后将执行exit json $api->json( $arr , $options = 0) $arr 数组/字符串 $options 字符串处理类型 将$arr 转成json结构之后执行$api->show($json , 'text/json'); jsonp $api->jsonp( $arr , $cb = 'callback' , $options = 0) $arr 数组/字符串 $cb 回调函数名称 $options 字符串处理类型 输出jsonp 格式数据 error $api->error( $str , [ $code = 404 , $type = 'text/html' , $charset = 'utf-8' ]) $str 字符串 $code 页面状态码 $type 页面类型 $charset 页面编码 页面输出,并指定状态码。默认输出404页面 execute $api->execute($sql = '' , $exit = true) $sql sql语句 $exit 出错是否中断程序执行 执行SQL语句,成功返回true,失败返回false query $api->query($sql = '') $sql sql语句 执行sql语句(主要用于查询操作,返回由多条数据组成的数组) one $api->one($sql = '') $sql sql语句 执行sql语句(主要用于查询操作,仅返回由一条数据组成的数组) total $api->total($table= '' , $where = '') $table 表名 $where 条件(若值为true,则$table代表sql语句) 数据统计 insert $api->insert($table , $data = '') $table 表名,无需前缀 $data 要写入的数据数组 数据写入 select $api->select($table , $field = '*' , $where = '1' , $limit = 20 , $page = 1 , $orderby = '') $table 表名,无需前缀 $field 字段 $where 查询条件 $limit 每页显示数据量 $page 获取第几页的数据 $orderby 排序方式 查询指定数据表的数据 update $api->update($table , $data = '' , $where = '0') $table 表名,无需前缀 $data 更新的字段数据 $where 条件 数据更新。例如:将会员test的用户名改成dgapi $api->update('enewsmember' , $data = 'username="dgapi"' , $where = 'username="test"') delete $api->delete($table , $where = '0') $table 表名,无需前缀 $where 条件 删除数据 controller $api->controller($name , $model) $name 控制器名称 $model 模块名称,可为空 获取指定控制器的路径 import $api->import($name , $model='' , $assign = array()) $name 控制器名称 $model 模块名称,可为空 , $assign 导入控制器数据(数组方式) 导入指定的控制器 cache $api->cache($name , $fn , $time=0 , $format=true) $name 缓存名称 $fn 闭包函数 $time 缓存时间 $format 是否用serialize处理数据 读取或设置缓存闭包函数$fn返回的数据,返回$fn的返回值。所以$fn必须要有返回。 send_http_status $api->send_http_status($code) $code 状态码 指定页面的状态码
request.class.php
获取当前接口请求方式,以及获取相关数据 $request= $api->load('request'); 判断类方法有 is_ajax() is_get() is_post() is_put() is_delete() is_head() is_trace() is_option() 获取类方法有 get() post() param() put() delete() input() 其中 get post param 同 $api 的get post param 用法一致,input put delete 方法参数与get 方法完全一致 获取客户端IP方法ip()
gzh.class.php
微信公众号自动回复类(明文方式),公众号端的配置请直接查看微信公众号的说明
使用方法$gzh= $api->load('gzh' , array('token' => '微信公众号设置的token' , 'aeskey'=>'公众号处获取的密钥')); check $gzh->check() 验证方法,在初始化后直接使用即可。认证通过后可删除(但不建议) getPost $gzh->getPost() 获取公众号返回的数据,通过此方法可以轻易的知道用户在公众号里发送了什么数据给接口。 textpic $gzh->textpic($data , $wxdata) 回复图文给用户。
$data 是需要返回给用户的数据(数组),数组元素必须包含标题:title 链接:url 描述:description 图片地址:picurl
$wxdata 通过getPost() 方法获取到的数据,可不填 text $gzh->text($content , $wxdata) 回复普通文本给用户。
$content 是需要返回给用户的文本信息,支持a标签
$wxdata 通过getPost() 方法获取到的数据,可不填
token.class.php
api调用权限验证。使用前必须先导入类文件。导入方法 $upapi = $api->load('token' , $config); 下面我们以$tokenapi 为例说明。在线演示 token $tokenapi->token 获取或设置token参数的变量名,默认为token time $tokenapi->time 获取或设置时间戳参数的变量名,默认为t timeout $tokenapi->timeout 获取或设置超时时间(单位秒),默认为300 key $tokenapi->key 获取或设置加密key,默认为dgapi-token (强烈要求修改) build $tokenapi->build($param) $param 当前api所需GET参数数组 生成token check $tokenapi->check() 验证token是否正确,返回数字(-1:超时 , 0:失败 , 1:成功) query $tokenapi->query($param) $param 当前api所需GET参数数组 获取url参数
upload.class.php
文件上传操作。使用前必须先导入类文件。导入方法 $upapi = $api->load('upload' , $config); 上传文件之前请自行先验证权限,下面我们以$upapi 为例说明。在线演示
$config = array(
'maxsize' => 1024*1024, //上传文件最大值
'exts' => 'gif,jpg,png' //允许上传的文件后缀
);
$upapi = $api->load('upload' , $config);
$upapi->rootpath = '/images/logo/'; //设置上传路径,也可以直接在config中设置
$file = $_FILES['image']; //获取表单字段的数据
$res = $upapi->upload($file , 'logo'); //上传文件,并文件名为logo maxsize $upapi->maxsize 获取或设置上传文件大小限制,0表示不限制。单位为字节 exts $upapi->exts 获取或设置允许上传文件的后缀,默认为限制。例:$upapi->exts = array('gif' , 'jpg' , 'png'); mimes $upapi->mimes 获取或设置允许上传文件mime类型 rootpath $upapi->rootpath 获取或返回文件上传根目录(必须以帝国CMS程序根目录开始) , 默认为//dgapi.cmsxy.com/d/file/20170605 其中 20170605 是当天日期 upload $upapi->upload($file , [$savename , $savepath]) $file 如$_FILES['image'](image是表单file的name) , $savename 保存文件名,不包含后缀 , $savepath 文件保存路径,将覆盖$upapi->rootpath 上传文件,成功返回文件相关数据。失败返回false getError $upapi->getError() 获取上传错误信息
user.class.php
会员操作。使用前必须先导入类文件。导入方法 $userapi = $api->load('user'); 下面我们以$userapi 为例说明。无刷新注册与登陆:在线演示
find $userapi->find($username , [$password='' , $all=false]) $username 会员用户名或会员ID , $password 登陆密码,不为空需要则检测密码 , $all 是否获取附表数据 获取指定$username 或$userid 的数据。成功返回数据,失败返回false islogin $userapi->islogin([$all=true]) $all 是否返回附表数据 判断是否已登陆,已登陆返回用户数据,未登陆返回false login $userapi->login($user , [$time = 0]) $user 会员数据(数组,至少包含userid,groupid),$time 登陆状态保存时长 将指定用户设置成登陆状态 register $userapi->register($data) $data 待注册的会员信息,必须包含username password 且不能包含会员主表中不存在的字段 会员注册。该操作会自动判断会员名是否已存在。注:此操作仅对会员主表写入,副表部分请在此操作成功后自行做更新处理。 logout $userapi->logout() 退出登陆 has_username $userapi->has_username($username) $username 用户名 判断指定用户名是否已存在。 has_email $userapi->has_email($email) $email 邮箱地址 判断指定邮箱是否已存在。 verify_code $userapi->verify_code($name , [$code = false]) $name 验证码类型(login 或 reg) $code 验证码字符串 验证或设置验证码。$code不为false则为验证。 mark_password $userapi->mark_password($pw, $salt= '') $pw 未加密前的密码 $salt 加密混淆字符串 将字符串转成密码,主要在注册、登陆、修改密码等有密码判断时用到。注(每个用户都有一个独立的salt) 下载地址: $tokenapi为例说明。在线演示 帝国cms制作一个获取会员信息的AIP接口 |