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认证】

image

请求认证密钥-AppID

APP终端是宸逸CMS多终端概念的一种展示方式,开发人员需要具备的基本条件

1. 具备基本的App知识(安卓和iOS)及html知识(必备);

2. 懂得简单的逻辑判断和循环知识(可选);

3. 最好也能懂点SQL语句知识(可选);

4. 懂点PHP代码编写,方便编写更个性化的api接口(可选);

5. 能够熟练操作宸逸CMS系统。



使用API接口是必选要有正确的密钥才能会员读取网站数据。


创建认证密钥

blob.png


一、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

blob.png


返回数据格式

[
    '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项目中是不规范的,这时我们可以运用自定义回调方法来对其进行规范,如下图所示:

image.png


定义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请求数据就不会返回全部的查询结果

image.png





回调示例写法


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


返回结果:

image.png


以上数据中的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_TOKEN 是宸逸框架内置的api密钥机制,针对前后台都能通信的api密钥。

与API插件不同之处是:api插件只能在前台调用使用。

参数和请求方式与api插件的方式相同,主参数为:

api_token=API_TOKEN值

只提供自定义回调函数,不提供类别与模板标签的数据接口,不推荐小白用户使用。