ctms/dacms-api/views/api/index.php
2025-04-10 23:19:13 +08:00

262 lines
12 KiB
PHP
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
/* @var $this yii\web\View */
use yii\helpers\Url;
global $_GPC;
global $_FM;
$username = Yii::$app->user->identity->username;
$cert = fmFunc_cert_exist($username);
$_FM['apiCert'] = $cert ? $cert : array();
$errorCode = 0;
if($errorCode>0){
die (json_encode(array('errorcode'=>$errorCode,'msg'=>Yii::t('errorcode',$errorCode))));
}
$statusSite=[
'-1'=>'禁止',
'0'=>'只读访问',
'1'=>'正常',
];
//接口统计
$stat = fmFunc_stat_get($username);
//错误代码集合
$errorcodes = require(Yii::getAlias('@common').'/messages/zh-CN/errorcode.php');
?>
<h1>我的Api接口</h1>
<p>
<ol>
<li>
<kbd>授权域名</kbd>
<?php foreach($_FM['apiCert']['suDomain'] as $v){ ?>
<code><?php echo $v; ?></code>;
<?php } ?>
</li>
<li>
<kbd>IP白名单</kbd>
<?php foreach($_FM['apiCert']['suIp'] as $v){ ?>
<code><?php echo $v; ?></code>;
<?php } ?>
</li>
<li>
<kbd>接口标识</kbd>
<code><?php echo $_FM['apiCert']['api']; ?></code>;
</li>
<li>
<kbd>授权码</kbd>
<code><?php echo $_FM['apiCert']['code']; ?></code>;
</li>
<li>
<kbd>站点名称</kbd>
<code><?php echo $_FM['apiCert']['siteName']; ?></code>;
</li>
<li>
<kbd>站点ID</kbd>
<code><?php echo $_FM['apiCert']['siteId']; ?></code>;
</li>
<li>
<kbd>站点状态</kbd>
<code><?php echo $statusSite[$_FM['apiCert']['status']]; ?></code>;
</li>
<li>
<kbd>备注</kbd>
<code><?php echo $_FM['apiCert']['remark']; ?></code>;
</li>
</ol>
</p>
<h1>接口统计</h1>
<p>
<ol>
<li>
<kbd>存入次数</kbd>
<code><?php echo $stat['intimes']; ?>次</code>;
</li>
<li>
<kbd>取出次数</kbd>
<code><?php echo $stat['outtimes']; ?>次</code>;
</li>
<li>
<kbd>累计存入数据</kbd>
<code><?php echo $stat['inbytes']; ?>字节</code>;
</li>
<li>
<kbd>累计取出数据</kbd>
<code><?php echo $stat['outbytes']; ?>字节</code>;
</li>
</ol>
</p>
<hr>
<h1 style="text-align: center;">接口使用简易说明</h1>
<span class="form-control">注本处主要说明本API的基础规则及一些常用的接口使用方法更多细节可参考我们的实际使用案例我们基于<a href="http://s.we7.cc/index.php?c=home&a=author&do=index&uid=662" target="_blank">微擎</a>开发的嗨旅行应用、小程序管理模块等。)</span>
<p>
<ol>
<li>
<kbd>接口登陆</kbd><br>
<code>登陆地址:</code> https://api.hiluker.com/index.php?r=oss/login&api=<?php echo $_SERVER['HTTP_HOST'];?><br>
<code>附加表单:</code> 登陆数据以附加url转码后的字符串拼接到登陆地址中
<pre>
$loginurl = https://api.hiluker.com/index.php?r=oss/login&api='.$_SERVER['HTTP_HOST'];
$post = array(
'LoginForm[username]' => 您的用户名,
'LoginForm[password]' => 您的密码,
'LoginForm[rememberMe]' => 1
);
foreach($post as $k => $v){
$loginurl .= '&'.urlencode($k).'='.urlencode($v);
}
</pre>
<code>成功返回:</code> 登陆成功后系统会返回一个accesstoken通过json_decode解码即可。随后所有的接口通讯都需要附加该accesstoken所以建议您对该值进行存储可以减少不必要的登陆连接<br>
<textarea class="form-control">注1”api=“后面的域名请更换为您自己的服务器域名(我们会对域名及IP来路进行合法性校验不在白名单中的连接将无法登陆);2如果需要刷新accesstoken可在登陆地址后附加'&refreshToken=1'参数。3如果有必要您还可以将登陆成功的cookie记录下来以便后用。</textarea>
<br>
</li>
<li>
<kbd>接口规范</kbd><br>
<code>数据分类</code> 主要分为POST数据与GET数据两类其中部分限制约定数据必须从GET数据中取得原则上POST进来的可以是任意类型、任意大小、任意长度的数据<br>
<code>会直接被过滤掉的POST数据</code>这些数据会在传入时即被系统会自动过滤,不作任何保存操作
<pre>['id','siteid','createtime','updatetime','update_at'];</pre>
<code>只允许GET方式的数据</code>这些数据与您的接口权限也有关联,在接口权限中有直接设定的,以设定好的数据为主
<pre>['uniacid','platid','shopid'];</pre>
<textarea class="form-control">注:(1)uniacid:针对微擎多公众号机制系统的标识每个uniacid代表一个独立的后台用户其他系统也可借鉴该方式通过绑定不同的接口账号实现近似多用户的功能2platid平台id,通常单个接口账号不会用到,且一般情况下,该值直接在账号注册/授权之初由系统直接规定好3shopid适用于后台用户拥有多门店/多店铺的场景未进行配置时默认为0</textarea>
<br>
<code>SQL排序命令辅助sql_orders</code>传入方式为数组键值顺序决定排列先后每个元素本身也是一个数组由排序字段及排序方式构成。DESC倒序ASC升序
<pre>
$post['sql_orders']=array(
"键"=>array(排序字段=》排序方式)
"1"=>array(”displayorder“=>"desc")
"2"=>array(”id“=>"asc")
……
)
</pre>
<code>SQL截断命令辅助sql_limits</code>传入方式为数组,数组内为起始位置、结束位置两个参数
<pre>
$post['sql_limits']=array(
'start' => ($pindex-1)*$psize,
'end' => $psize,
);
</pre>
<code>SQL搜索命令辅助searching</code>传入方式为searching数组内可包含<code>['status','deleted','keyword','filter','plat']</code>键
<pre>
$post['searching']=array(
'status' => '', //指定状态数据是否启用0,1(默认1)
'deleted' => '', //指定状态数据是否删除0,1(默认0)
'keyword' => '', //指定要匹配的关键词(模糊检索,用以匹配标题项)
'filter' => array(要匹配的字段=》字段值) //用于设定数据过滤条件,并行条件AND精确匹配支持多组数组集要匹配的字段=》字段值)($col=>$val字段值可以是文本字符串单一值或二维数组一个字段多种取值的情况
'plat' => '', //指定跨平台搜索
);
</pre>
<code>注SQL搜索命令辅助searching内如果还传入了其他参数将由系统统一过滤整理用作模糊匹配的可选条件OR</code>
<br>
</li>
<li>
<kbd>错误代码</kbd>(客户侧可直接将接口站返回的结果打印出来查看,以下仅列出服务侧程序正确运行情况下返回的错误及提示;其他情况可直接打印结果进行查看)<br>
<textarea class="form-control"><?php foreach($errorcodes as $k=>$v){
echo '"'.$k.'" : '.$v."\r\n";
}
?>
</textarea>
<br>
</li>
<li>
<kbd>标准接口</kbd><br>
<code>数据归类:</code> 本站接口数据划分为三个层级——<code>model</code>(模型数据)=><code>instance</code>(实例数据)=><code>content</code>(内容数据)<br>
<code>存取动作:</code> 数据操作共三种——<code>get</code>(取数据列表)=><code>detail</code>(取某组数据详情)=><code>save</code>(保存数据)<br>
<code>参数约定:</code> (1) 控制器动作参数ac<small>action的简写</small>,对应数据的层级归类,如 model或house或room。传入方式<code>GET仅支持GET方法</code>; (2) 控制器动作附加细分操作参数op<small>operation的简写</small>,对应相应数据的操作,如 index或unused或deleted或all等。传入方式<code>GET仅支持GET方法</code>;
<pre>通常情况下ac参数均只需用model或instance或content即可部分接口模型(如realty房产模型)可能略有不同</pre>
<pre>op参数说明'index': 取未删除、可用状态的数据;'unused': 取未删除、不可用状态的数据;'deleted':取已删除数据; 'all':取未删除数据; </pre>
<code>返回结果:</code>
<pre>
对于get类的动作返回数组数组结构如下(仅为参考,实际可打印结果核实)
$return['errorcode'] = $errorCode; //正常情况下为0
$return['msg'] = Yii::t('errorcode',$errorCode); //返回的消息(接口报错时会使用到)
$return['data'] = isset($record) ? $record : ''; //用户侧应获得的数据
$return['timeused'] = getMillisecond() - $START_TIME; //接口耗时
$return['total'] = isset($count) ? $count : 1;//总记录数
$return['bytes'] = strlen(json_encode($return['data']));//长度字节统计
</pre>
<pre>
对于detail类的动作返回数组结构如下
$return['errorcode'] = $errorCode;
$return['msg'] = Yii::t('errorcode',$errorCode);
$return['data'] = isset($record) ? $record : '';
$return['timeused'] = getMillisecond() - $START_TIME;
$return['bytes'] = strlen(json_encode($return['data']));//长度字节统计
</pre>
<pre>
对于save类的动作返回数组结构如下
$return['errorcode'] = $errorCode;
$return['msg'] = Yii::t('errorcode',$errorCode);
$return['data'] = isset($record) ? $record : '';
$return['timeused'] = getMillisecond() - $START_TIME;
$return['bytes'] = strlen(json_encode($return['data']));//长度字节统计
</pre>
<br>
</li>
<li>
<kbd>接口示范</kbd>(以房产模型为例)<br>
<code>使用模型:</code> realty<br>
<code>所取数据:</code> 客户侧指定的房产模型的下的楼盘实例house列表<br>
<code>基础接口:</code> https://api.hiluker.com/index.php?r=<code>realty</code>/<code>get</code><br>
<ol>
<li>
<code>构建身份验证GET参数</code>
<pre>
$getData = array();
$urlcondition1 = //要附加到基础接口地址上的GET参数组
$getData['appid'] = $server['username']; //接口用户名
$getData['sceret'] = $server['code']; //接口密码
$getData['accesstoken'] = $AccessToken; //接口TOKEN
foreach($getData as $k => $v){
$urlcondition1 .= '&'. urlencode($k).'='. urlencode($v);
}
</pre>
</li>
<li>
<code>构建动作、操作等GET参数</code>
<pre>
$getData = array();
$urlcondition2 = //要附加到基础接口地址上的GET参数组
$getData['platid'] = '';
$getData['uniacid'] = '';
$getData['shopid'] = '';
$getData['ac'] = 'house';
$getData['op'] = 'all';
foreach($getData as $k => $v){
$urlcondition2 .= '&'. urlencode($k).'='. urlencode($v);
}
</pre>
</li>
<li>
<code>构建查询/筛选等POST参数</code>
<pre>
$postData = array();
$postData['s_sn'] = $s_sn;
$postData['searching']['deleted'] = ''; //1或0可选项,1为仅取用已删除数据
$postData['searching']['keyword'] = "; //可选项,关键词
$postData['searching']['status'] = '' //1或0可选项,1为仅取用已生效中的数据
$postData['searching']['plat'] = ''; //可选项,跨平台时使用
$postData['sql_limits'] = array(
'start' => 起始页位置,
'end' => 结束页位置,
);
//处理POST数据
foreach($postData as $k => &$v){
$v = json_encode($v); //(POST的数据各键值需是string文本类型)
}
</pre>
</li>
<li>
拼接网址POST数据<code>发送请求</code>
</li>
</ol>
<br>
</li>
</ol>
</p>