编译socket时,设置socket参数、接口返回、云函数代码等,如(部分截图):
保存后,你可以看到这样的在线socket文档(部分截图):
提交初步审核并发布
完成socket设计和云功能开发后php 文件解密,可以勾选“申请发布”。 初审通过后即可发布使用。
。
生成云套接字和套接字文档
发布通过后,您可以生成自己的云socket和在线socket文档。
在线socket文档可以提供给客户端开发者查看和访问; 云socket可以提供给客户端调用。
生成的完整在线套接字文档如下所示:
套接字文档地址:
http://api.yesapi.cn/docs.php?service=SVIP.Sdogstar_MyApi.ATest&detail=1&type=fold
客户端调用后,云函数执行后即可得到结果。
编译云函数后,会手动生成云socket和socket文档。 如果有需要,你也可以自己自动编译socket文档。
温馨提示:如果您需要自动编译API socket文档php 文件解密,可以进入我的在线文档编辑器,保存并发布socket文档。
文档编辑背景:
保存后,外部查看socket文件效果:
如何支持多客户端访问?
如果需要支持多个客户端调用API套接字,可以【客户端管理】,添加客户端应用程序,然后分配app_key和secret key。
云函数PHP开发指南
下面通过代码示例和模板来介绍如何开发云功能。 您可以复制代码并进行一些细微的更改。 只需要几行PHP代码,或者一段代码,就可以实现自己的业务逻辑,并且无需管理服务器就可以运行联通的前端代码。
HIGHLIGHT开发笔记
首先,这里有一些重要的知识点和注意事项。
重复说明一下,直连数据库的操作和我的model数据库是一样的。 不同的是直连数据库需要先配置连接到你的数据库才可以使用。 DI服务使用$di['db_super'],最后需要填写完整的表格。 表名不需要额外的 _tbl 后缀。
DI 服务列表
DI 服务功能说明 备注 $di['db'] 我的模型数据库可以执行 CURD 数据库操作。 对于单表$di['db_super']直接连接数据库可以执行CURD数据库操作。 对于单表,使用前必须安装MySQL 数据库直连服务配置 $di['logger'] 日志服务,记录各种日志 $di['email'] 电子邮件服务,发送短信,使用前需配置电子邮件服务$di['pinyin'] 拼音服务,将汉字转换为拼音 $di['curl'] CURL 服务请求远程套接字,仅支持端口 80 $di['crypt'] 安全服务加密和解密数据 $di['sms_aliyun '] 阿里云邮箱 通过阿里云服务发送邮件,使用前需要配置阿里云服务
云函数代码模板F1-1,两个数相乘
function ($params, $di) {
$result = array('err_code' => 0, 'err_msg' => '');
$result['sum'] = $params['left'] + $params['right'];
return $result;
}
假设传递的参数为:left=1&right=2,请求该云函数后,会得到如下结果:
{
"ret": 200,
"data": {
"err_code": 0,
"err_msg": "",
"sum": 3
},
"msg": "V2.1.1 YesApi"
}
F1-2。 数据库-获取模型总数
function ($params, $di) {
$result = array('err_code' => 0, 'err_msg' => '');
$result['count'] = $di['db']->article_tbl->count('id'); // 模型名称后面须带上_tbl后缀
return $result;
}
假设您有以下包含 23 条数据的模型:
请求该云函数后,会得到如下结果:
{
"ret": 200,
"data": {
"err_code": 0,
"err_msg": "",
"count": 23
},
"msg": "V2.1.1 YesApi"
}
F1-3、数据库-添加模型数据
function ($params, $di) {
$result = array('err_code' => 0, 'err_msg' => '');
$article = $di['db']->article_tbl;
$article->insert($data);
$result['id'] = $article->insert_id(); // 返回新增的ID
return $result;
}
F1-4、数据库-查询模型数据
function ($params, $di) {
$result = array('err_code' => 0, 'err_msg' => '');
$result['article'] = $di['db']->article_tbl->where('id', 1)->fetchOne(); // 取出id=1的文章数据
return $result;
}
F1-5、数据库-更新模型数据
function ($params, $di) {
$result = array('err_code' => 0, 'err_msg' => '');
$data = array('title' => '新文章标题', 'content' => '文章内容'); // 待更新的数据
$result['update_row'] = $di['db']->article_tbl->where('id', 1)->update($data); // 更新id=1的文章数据,返回更新的数量
return $result;
}
F1-6、数据库-删除模型数据
function ($params, $di) {
$result = array('err_code' => 0, 'err_msg' => '');
$result['delete_row'] = $di['db']->article_tbl->where('id', 1)->delete(); // 删除数据,返回删除的数量
return $result;
}
F1-7、数据库-获取型号列表数据
function ($params, $di) {
$result = array('err_code' => 0, 'err_msg' => '');
$result['list'] = $di['db']->article_tbl->where('id > ?', 1)->where('id fetchAll(); // 取出id从1到10的全部数据
return $result;
}
F1-8、数据库-获取模型列表数据(搜索+分页+排序+数组选择)
function ($params, $di) {
$result = array('err_code' => 0, 'err_msg' => '');
$result['list'] = $di['db']->article_tbl
->select('id, title, content')
->where('id', 1) // 精确区配
->where('name LIKE ?', '%小白%') // 模糊匹配
->where('id', array(1, 2, 3)) // 范围枚举
->where('id > ?', 1) // 范围大于
->where('id where('id BETWEEN ? AND ?', array(1, 10)) // 范围介于
->or('status', 1) // 或逻辑条件
->order('add_time DESC') // 按时间降序
->limit(0, 100) // 分页,取出前面100条
->fetchAll(); // 取全部数据
return $result;
}
温馨提醒:获取列表数据时,一定要使用limit来限制页数,否则第一次审核会失败。
F2-1,CURL-GET 请求
function ($params, $di) {
$result = array('err_code' => 0, 'err_msg' => '');
// 第一个参数为网址,第二个参数表示超时时间(单位毫秒)
$result['res'] = $di['curl']->get('http://demo.phalapi.net/?username=YesApi', 3000);
// 得到结果类似:{"ret":200,"data":{"title":"Hello YesApi","version":"2.13.3","time":1590764249},"msg":""}
return $result;
}
F2-2,CURl-POST 请求
function ($params, $di) {
$result = array('err_code' => 0, 'err_msg' => '');
// 第一个参数为网址,第二个参数是POST的参数,第三个参数表示超时时间(单位毫秒)
$result['res'] = $di['curl']->post('http://demo.phalapi.net/', array('username' => 'YesApi'), 3000);
// 得到结果类似:{"ret":200,"data":{"title":"Hello YesApi","version":"2.13.3","time":1590764249},"msg":""}
return $result;
}
温馨提醒:通过云函数和CURL,可以封装原有的API Socket,生成开放的Socket API。
F3-1,日志
function ($params, $di) {
$result = array('err_code' => 0, 'err_msg' => '');
$di['logger']->record('DEBUG', '调试日志,这里可放日志内容');
$di['logger']->record('INFO', '业务日志,这里可放日志内容');
$di['logger']->record('INFO', array('uuid' => 'ABC', 'tip' => '第二个参数还可以是数组'));
$di['logger']->record('NOTICE', '提醒日志,这里可放日志内容');
$di['logger']->record('WARNNING', '警告日志,这里可放日志内容');
$di['logger']->record('ERROR', '错误日志,这里可放日志内容');
return $result;
}
温馨提示:日志记录完成后,您可以在开放平台查看日志。
F4-1。 发简讯
function ($params, $di) {
$result = array('err_code' => 0, 'err_msg' => '');
// 第一个参数是收件人邮箱,第二个参数是邮件标题,第三个参数是邮件正文内容(HTML格式)
$result['is_send'] = $di['email']->send('helper@yesapi.cn', '邮件标题', '邮件内容');
return $result;
}
温馨提示:使用前请配置好邮箱服务配置。
F5-1。 安全-加密解密
function ($params, $di) {
$result = array('err_code' => 0, 'err_msg' => '');
$result['encrypt_data'] = $di['crypt']->encrypt('YesApi'); // 对数据进行加密
$result['decrypt_data'] = $di['crypt']->decrypt($result['encrypt_data']); // 对数据进行解密
return $result;
}
温馨提醒:每个app_key加密的数据只能用自己的app_key解密。
F6-1、拼音
function ($params, $di) {
$result = array('err_code' => 0, 'err_msg' => '');
$result['pinyin_1'] = $di['pinyin']->convert('小白接口'); // 将一段汉字串内容转成拼音,结果是:xiao bai jie kou
$result['pinyin_2'] = $di['pinyin']->abbr('小白接口'); // 获取拼音首字母,结果是:x b j k
$result['pinyin_3'] = $di['pinyin']->name('张三'); // 姓名转拼音,结果是:zhang san
return $result;
}
F7-1。 发电子邮件
function ($params, $di) {
$result = array('err_code' => 0, 'err_msg' => '');
// 参数1:手机号,参数2:短信签名,参数3:短信模板,参数3:更多数组参数(没动态参数时可传空数组)
$di['sms_aliyun']->aliyunSendSms('13800138000', '小白接口', 'SMS_153055065', array('code' => '123456'));
return $result;
}
温馨提示:使用前需要配置阿里云服务
F9,效用函数
function ($params, $di) {
$result = array('err_code' => 0, 'err_msg' => '');
$time = time(); // 当前时间戳,例如:1590561632
$datetime = date('Y-m-d H:i:s'); // 当前时间,例如:2020-05-20 00:00:00
$arr = json_decode('{"name":"YesApi"}', true); // json解析成数组
$json = json_encode($arr); // 数组转json
$md5 = md5('123456'); // md5操作
return $result;
}