Api基类
基类
class BaseController extends Controller{
public $outData = ['code'=>0,'msg'=>'ok'];
public $param;
public $timeNow;
public function __construct(){
parent::__construct();
header('Access-Control-Allow-Origin:*');
$this->param = I('post.');
$this->timeNow = date('Y-m-d H:i:s');
}
//验证参数
public function regArguments($needParam,&$arguments){
foreach($needParam as $key=>$val){
if(!isset($arguments[$key]) || $arguments[$key]===''){
$this->outData = ['code'=>1,'msg'=>$val['msg']];
}else{
$arguments[$key] = $this->formatArguments($arguments[$key],$val['type']);
}
}
return;
}
protected function formatArguments($val,$type){
switch ($type) {
case 'int':
return intval($val);break;
case 'float':
return round($val, 2);break;
case 'tel':
if (!is_numeric($val) || !preg_match('/^1[\d]{10}$/', $val)) {
$this->outData = ['code'=>2,'msg'=>'手机号格式不正确'];
}
return $val;break;
default:
return trim($val);
}
}
//验证token
public function regToken($token,$pstr){
if($token != sha1(md5($pstr.APP_SECRET))){
$this->outData = ['code'=>1,'msg'=>'非法请求'];
}
}
// 获取token
protected function getHashToken($pstr) {
return sha1(md5($pstr.APP_SECRET));
}
//输出json结果
public function printOut($data=[]){
header('Content-type: application/json');
$data ? $this->outData = $data : '';
echo json_encode($this->outData,JSON_UNESCAPED_UNICODE);exit;
}
// 赋值并输出
public function printInAndPrintOut($msg = "ok",$code = "0",$data = [],$ext = []) {
header('Content-type: application/json');
$this->outData['code'] = $code;
$this->outData['msg'] = $msg;
if ($data) {
$this->outData['data'] = $data;
}
if ($ext && is_array($ext)) {
foreach ($ext as $k => $v) {
if ($k != 'msg' && $k != 'code' && $k != 'data') {
$this->outData[$k] = $v;
}
}
}
echo json_encode($this->outData,JSON_UNESCAPED_UNICODE);exit;
}
public function notfound(){
$this->display('empty/index');exit;
}
}
运用
/**
* 领取详情
* @auhtor jim
* @date 2018/2/28
*/
public function myGetDepositInfo() {
/*$this->param = [
'openId' => 'xxx',
'hashToken' => 'xxx',
'id' => 'xxx',
];*/
$needParam = array(
'openId'=>array('msg'=>'openId参数异常','type'=>'str'),
'hashToken'=>array('msg'=>'hashToken参数异常','type'=>'str'),
'id'=>array('msg'=>'id参数异常','type'=>'int'),
);
$this->regArguments($needParam,$this->param);
$this->regToken($this->param['hashToken'],$this->param['openId']);
if ($this->outData['code']) {
$this->printOut();
}
// 获取用户uid
$uModel = new UserModel();
$uid = $uModel->getUidByOpenId($this->param['openId']);
$udcModel = new UserDepositCashinfoModel();
$udcInfo = $udcModel->findData(['uid'=>$uid,['id'=>$this->param['id']]]);
if (!$udcInfo) {
$this->printInAndPrintOut("领取记录不存在",1);
}
// 统计之前领取的笔数
$beforeBackCount = $udcModel->sumData(['udid'=>$udcInfo['udid'],'addtime'=>['lt',$udcInfo['addtime']]],'back_percent');
if(!$beforeBackCount) {
$beforeBackCount = 0;
}
$udcInfo['beginCount'] = $beforeBackCount + 1;
$udcInfo['endCount'] = $beforeBackCount + $udcInfo['back_percent'];
$this->printInAndPrintOut('ok',0,$udcInfo);
}
Api基类的更多相关文章
- 基于SqlSugar的开发框架循序渐进介绍(10)-- 利用axios组件的封装,实现对后端API数据的访问和基类的统一封装处理
在SqlSugar的开发框架的后端,我们基于Web API的封装了统一的返回结果,使得WebAPI的接口返回值更加简洁,而在前端,我们也需要统一对返回的结果进行解析,并获取和Web API接口对应的数 ...
- 使用静态基类方案让 ASP.NET Core 实现遵循 HATEOAS Restful Web API
Hypermedia As The Engine Of Application State (HATEOAS) HATEOAS(Hypermedia as the engine of applicat ...
- 25 BasicUsageEnvironment0基本使用环境基类——Live555源码阅读(三)UsageEnvironment
25 BasicUsageEnvironment0基本使用环境基类——Live555源码阅读(三)UsageEnvironment 25 BasicUsageEnvironment0基本使用环境基类— ...
- [theWord] 一种英文字典的基类设计
theWord --- 一种英文字典的基类设计 使用场景 想写一个应用,来记录自己背单词时候,对每个单词的记忆状况之类的东西.至于为什么做这个,试过了一些背单词软件,并不觉得好用,自己做一个吧. 那么 ...
- duilib\utils\utils.h(251) : error C2504: “VARIANT”: 未定义基类
转载:http://blog.csdn.net/SP_daiyq/article/details/44542939?locationNum=3 创建win32应用程序的工程文件,删除不需要的代码,只留 ...
- 《Programming WPF》翻译 第9章 2.选择一个基类
原文:<Programming WPF>翻译 第9章 2.选择一个基类 WPF提供了很多类,当创建一个自定义元素时,你可以从这些类中派生.图9-1显示了一组可能作为类--可能是合适的基类, ...
- 微信公众号开发系列-Http请求封装基类
HttpHelper请求封装基类,支持get请求和POS请求,方便微信开发接口交互,为后面接口交互做准备. 1.HttpHelper帮助基类 [csharp] view plaincopy using ...
- Http请求封装基类HttpHelper.cs
HttpHelper请求封装基类,支持get请求和POS请求http接口交互,为后面接口交互做准备. 1.HttpHelper帮助基类 using System; using System.Colle ...
- 谈谈Ext JS的组件——组件基类:Ext.Component
概述 Ext.Component是所有Ext组件的基类,这在Ext.Component的API中第一句话就提到了.然后第二段说明了它包含的基本功能:隐藏/显示.启用/禁用以及尺寸控制等.除了以上这些基 ...
随机推荐
- swift中使用对象归档进行数据本地
对象归档是ios持久化中的其中一种,也是很常用的一种.现在来看看swift是如何实现的.实现要点1),必须实现NSCoding的协议 import UIKit let path=(NSSearchPa ...
- 字符串--P1308 统计单词数
题目描述 一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中出现的次数. 现在,请你编程实现这一功能,具体要求是:给定一个单词,请你输出它在给 ...
- XML中的特殊(保留)字符数据
XML中的特殊(保留)字符数据 制作人:全心全意 在XML文档中,有些字符会被XML解析器当作标记进行处理.如果希望把这些字符作为普通字符处理,就需要使用实体引用或CDATA段. 使用实体引用 为了避 ...
- PHP 结合前端 ajax 爬取网站信息后, 向指定用户发送指定短信;
<?php /** * Description * @authors Your Name (you@example.org) * # 根据时时彩的最新一期的号码, 判断如果为首尾同号则发送短信 ...
- MySQL Connector/Python 接口 (二)
连接数据库 本文参见这里,示例如何连接MySQL 数据库. import mysql.connector from mysql.connector import errorcode # 连接数据库需要 ...
- 洛谷 2055 BZOJ 1433 [ZJOI2009]假期的宿舍
[题解] 既然是一人对应一床,那么显然可以用二分图匹配来做.俩人认识的话,如果其中一个a是在校学生,另一个b不回家,b就可以向a的床连边(a,b当然也可以是同一个人). 然后如果最大匹配数大于等于需要 ...
- 关于jupyter notebook
直接点击进行跳转阅读:https://zhuanlan.zhihu.com/p/33105153
- Leetcode 135.分糖果
分发糖果 老师想给孩子们分发糖果,有 N 个孩子站成了一条直线,老师会根据每个孩子的表现,预先给他们评分. 你需要按照以下要求,帮助老师给这些孩子分发糖果: 每个孩子至少分配到 1 个糖果. 相邻的孩 ...
- Educational Codeforces Round 60 (Rated for Div. 2) 即Codeforces Round 1117 C题 Magic Ship
time limit per test 2 second memory limit per test 256 megabytes input standard inputoutput standard ...
- HDU 1234 简单模拟题
题目很简单不多说了,我只是觉得这题目的输入方式还是很有特点的 #include <cstdio> #include <cstring> #include <algorit ...