API接口开发:开发入门
小程序入门准备工作与环境搭建
小程序终端是宸逸CMS多终端概念的一种展示方式,开发人员需要具备的基本条件
1. 具备基本的小程序知识及html知识(必备);
2. 懂得简单的逻辑判断和循环知识(可选);
3. 最好也能懂点SQL语句知识(可选);
4. 懂点PHP代码编写,方便编写更个性化的api接口(可选);
5. 能够熟练操作宸逸CMS系统。
小程序环境必须使用小程序官方的开发者工具,例如微信小程序、百度小程序都要使用自身的开发者工具,我们以微信小程序为例,下载微信开发者工具:
https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html
必备插件:https://www.xunruicms.com/shop/app/361.html
1、需要在cms后台去安装这个API插件,然后创建密钥供小程序请求
那么请求地址格式是:
网站地址/index.php?appid=2&appsecret=PHPCMF9BF840CB2139F&v=1&
这个地址需要记住,他是小程序的请求前缀地址,可以参考教材:https://www.xunruicms.com/doc/350.html
2、在【微信开发者工具中】创建小程序项目
3、创建后,系统会生成一些默认的文件
4、在app.js中定义全局调用的api请求变量
app.js 此文件是小程序项目的主心文件,我们把api请求地址参数定义在这个文件里面,以便后面的全局调用
globalData: { userInfo: null, http_api:"http://www.pcms.com/index.php?appid=2&appsecret=PHPCMF9BF840CB2139F&", }
http_api是我们例子里面定义的网站url,可以在本地测试url
5、在index.js中读取cms数据
pages/index.js 此文件是小程序入口文件
我们来请求cms的文章模块10条数据
var self = this; wx.request({ url: app.globalData.http_api + "s=news&c=search&pagesize=10&api_call_function=module_search_news_list", method: 'GET', success: function (res) { console.log(res); if (res.data.code == 1) { self.setData({ mynews: res.data.data, }); } else { console.log(res.data.msg); } } });
在开发的适合可以先把请求url在浏览器里面访问一下,看看数据是否正常返回
6、在index.wxml中当前向cms请求的数据
{{news.title}} {{motto}}
7、编译预览小程序左边图片中的数据已经成功的读取出CMS后台的文章标题
如果存在读不出来数据时,可以在开发工具右上角开启【不校验合法域名、不校验HTTPS认证】
请求认证密钥-AppID
APP终端是宸逸CMS多终端概念的一种展示方式,开发人员需要具备的基本条件
1. 具备基本的App知识(安卓和iOS)及html知识(必备);
2. 懂得简单的逻辑判断和循环知识(可选);
3. 最好也能懂点SQL语句知识(可选);
4. 懂点PHP代码编写,方便编写更个性化的api接口(可选);
5. 能够熟练操作宸逸CMS系统。
使用API接口是必选要有正确的密钥才能会员读取网站数据。
创建认证密钥
一、v1版本请求密钥参数:
appid=[APPID]&appsecret=[appsecret]
AppID和AppSecret两个值是接口请求的必选参数
如果有些平台审核提示:代码中不应存在AppSecret敏感信息 时,你可以改一个名字比如改成 appssst,那么在服务端的index.php要增加如下代码
if (isset($_GET['appssst']) && $_GET['appssst']) { $_GET['appsecret'] = $_GET['appssst']; }
测试请求
你的网站/index.php?s=httpapi&c=home&m=test&appid=AppID&appsecret=AppSecret
返回数据格式
[ 'code' : '0表示错误,1以上表示返回id或者正确', 'msg' : '错误时的提示', 'data' : '返回数据详情,一般为数组' ]
二、v2版本请求密钥参数:
客户端请求时更为安全,参数采用加密模式,加密字符串具有时效性
v=2&appid=[APPID]&signature=[客户端加密字符串]×tamp=[客户端请求时间戳]
signature加密格式为:
1、JS版
引入jquery.md5.js工具包 var appid = '1'; // APPID var appsecret = 'PHPCMFBxxxxxxxx'; //会员secret var timestamp = Math.round(new Date().getTime()/1000).toString(); // 十位当前时间戳 加密字符串:$.md5(appid+appsecret+timestamp)
2、PHP版
$appid = '1'; // APPID $appsecret = 'PHPCMFBxxxxxxxx'; //会员secret $timestamp = time(); // 十位当前时间戳 加密字符串:md5($appid.$appsecret.$timestamp)
3、其他语言以此类推
测试请求
你的网站/index.php?s=httpapi&c=home&m=test&v=2&appid=AppID&signature=[客户端加密字符串]×tamp=[客户端请求时间戳]
返回格式与(一)相同
回调方法的定义
需要精通PHP程序开发的人员
按照默认CMS的返回数据是非常多的而且非常杂乱,在实际app项目中是不规范的,这时我们可以运用自定义回调方法来对其进行规范,如下图所示:
定义http回调方法
打开或新建文件/config/custom.php,这个文件专门是定义回调方法的
$t['title'], // 标题 'id' => $t['id'], // id号 'catname' => dr_cat_value('news', $t['catid'], 'name'), // news模块的当前内容栏目名称 'thumb' => dr_thumb($t['thumb'], 200, 200), // 图片id转换为地址 'updatetime' => dr_date($t['_updatetime'], 'Y-m-d H:i:s'), // 时间转换 ]; } } return $rt; }
其中,news_list_data就是方法名称,$data是传入的返回数组,需要你手动格式化显示;
news_list_data本函数用于新闻news模块的列表数据,我的app需要返回:标题、id、图片、时间,这几个字段
千万不要把系统自带的代码删了
上面就定义好了,app请求数据就不会返回全部的查询结果
回调示例写法
1、搜索列表的写法
请求地址:&api_call_function=my_test&s=book&c=search
回调写法:my_test2
public function my_test2($data) { $rt = []; if ($data['list']) { foreach ($data['list'] as $t) { $rt[] = [ 'title' => $t['title'], // 标题 'id' => $t['id'],// id号 'catname' => dr_cat_value('news', $t['catid'], 'name'), // news模块的当前内容栏目名称 'thumb' => dr_thumb($t['thumb'], 200, 200), // 图片id转换为地址 'updatetime' => dr_date($t['_updatetime'], 'Y-m-d H:i:s'), // 时间转换 // 如果想调用更多的字段可以写在这个数组里面 ]; } } return $rt; }
2、内容详情的写法
请求地址:&api_call_function=my_test&s=book&c=show&id=1
回调写法:my_test
public function my_test($data) { $rt = [ 'title' => $data['title'],// 标题 'id' => $data['id'],// id号 'thumb' => dr_thumb($data['thumb'], 200, 200),// 图片id转换为地址 'catname' => dr_cat_value('news', $data['catid'], 'name'), // news模块的当前内容栏目名称 'updatetime' => dr_date($data['_updatetime'], 'Y-m-d H:i:s'),// 时间转换 // 如果想调用更多的字段可以写在这个数组里面 ]; return $rt; }
3、栏目详情的写法
请求地址:&api_call_function=my_test&s=book&c=category&id=1
回调写法:my_test3
public function my_test3($data) { $rt = [ 'name' => $data['name'],// 栏目名称 'id' => $data['id'],// id号 'thumb' => dr_thumb($data['thumb'], 200, 200),// 图片id转换为地址 'content' => $data['content'], // 如果想调用更多的字段可以写在这个数组里面 ]; return $rt; }
API数据返回格式
宸逸CMS框架接口的返回格式为JSON数据格式,如下语法:
[ code: 0/1/2.., 状态码:0表示错误,大于0表示成功 msg: "结果描述", 描述文字:例如错误时就返回错误提示 data: [] 返回结果数组类型 ]
用户登录接口(登录授权码)
本接口用于验证用户的登录,并返回用户基本信息和登录appsecret。
GET请求地址:
/index.php?appid=[APPID]&appsecret=[appsecret]&s=member&c=login
POST请求参数:
is_ajax=1&data[username]=账号&data[password]=密码
POST请求格式:https://www.xunruicms.com/doc/1134.html
返回结果:
以上数据中的auth就是登录认证码,如果要请求验证登录的任意页面时必须使用该认证码。
APP或者小程序开发时,通常将以上数据缓存本地,以便判断用户是否已经登录。
在知道用户数据的前提下可以手动生成认证码:
md5($member['password'].$member['salt'])
对用户表的password字段和salt组合合并,再md5函数输出32位字符串
用户注册接口和登录接口的格式请求一致,不同的是URL和请求参数不同
API-POST方式请求
当post数据结果返回:
msg: view
或者
msg:当前是get请求方式,返回当前模板可用的变量
说明你客户端提交方式并非是post方式了
使用API提交数据时必须使用POST方式,表单form的enctype属性的编码方式有两种:application/x-www-form-urlencode和multipart/form-data
宸逸API采用的是application/x-www-form-urlencode方式,需要加上参数:
method: 'post', header: { 'Content-Type': 'application/x-www-form-urlencoded', },
否则服务端会认为是get提交。
当前用户请求(用户认证信息)
当请求api接口时,默认情况是以游客身份请求的,如果请求需要携带登录用户如何操作呢?
1、首先通过登录api获得用户的appsecret,然后把这个appsecret存储到客户端本地,以后请求时就会用到
https://www.xunruicms.com/doc/411.html
获取到的auth字符就是登录appsecret,和用户的uid信息
aaaaaaaaaaa
2、携带用户信息的请求参数
把(1)中获取的登录appsecretauth和用户的uid号,存储在本地以备下次调用,那么把以下格式的参数放在url中请求时,就表示按此用户会话来请求了
&api_auth_code=[登录appsecret]&api_auth_uid=[用户id]
API_TOKEN
API_TOKEN 是宸逸框架内置的api密钥机制,针对前后台都能通信的api密钥。
与API插件不同之处是:api插件只能在前台调用使用。
参数和请求方式与api插件的方式相同,主参数为:
api_token=API_TOKEN值
只提供自定义回调函数,不提供类别与模板标签的数据接口,不推荐小白用户使用。