# OpenAPI
请注意 FinClip 将小程序管理后台相关业务管理的服务封装成了 API,供开发者在自有业务中进行调用。
# 1. 功能介绍
开发者可以通过开放 API(OpenAPI)完成以下操作:
- 上传小程序代码;
- 提交小程序审核;
- 通过小程序审核并发布;
- 获取小程序线上版二维码;
- 获取小程序体验版二维码链接;
- 获取小程序版本列表;
- 小程序登录鉴权;
# 2. 使用流程
登录 FinClip 后台,进入小程序详情页面,点击基本信息右上角的「openAPISecret」开始配置信息
首次使用时openAPISecret 的密钥默认为空,需要点击右侧的「生成」按钮获得对应的密钥内容
随后勾选下方的相关权限(目前分别提供了小程序审核
,小程序发布
,小程序代码上传
,代码预览
与账户鉴权
共 5 个权限分组),点击确定后即可生效。
请注意 openAPISecret 将不会明文存储在开发平台中,请您妥善复制保存。如果遗失或需要更换,再次进入「openAPISecret」点击右侧「重置」按钮即可。
# 3. 功能与环境对比
当前功能在不同环境中可能有所区别与限制,具体请见下表,如需要进一步了解不同版本间区别与介绍,可以点击这里 (opens new window)。
社区版环境 | SaaS 环境 | 企业版(年付费或一次性买断) | |
---|---|---|---|
费用管理 | ❌ | ✅ | ✅ |
# 4. 接口文档
# 上传文件到网盘
API
POST /api/v1/mop/customer-open-api/organ/netdisk/upload
query 参数
字段 | 类型 | 含义 | 备注 |
---|---|---|---|
nonce | string | 随机字符串 | 确保是唯一的,建议使用uuid |
timestamp | string | 时间戳,单位毫秒 | 使用当前系统的时间戳 |
sign | string | 签名字符串 |
参数
content-type: application/form-data
字段 | 类型 | 含义 | 备注 |
---|---|---|---|
appId | string | 小程序id | |
uploadFile | file | 文件 | 文件格式 |
示例
- appId、nonce、timestamp 拼接一起,并且按照参数字母排序,得到签名之前的字符串salt如下: appId=6141bd122e0fd10001318982&nonce=b3fceb4f-6766-4a1a-9efb-c07ce85409aa×tamp=1631851443000
将salt拼接上apiKey,得到salt是这样,appId=6141bd122e0fd10001318982&nonce=b3fceb4f-6766-4a1a-9efb-c07ce85409aa×tamp=1631851443000&apiKey=ABCDEFGHIJKLMNOPQ1234567890 3. 对salt,进行MD5签名,得到sign=CCA7AC5EDFC1541EBEBA8207A46EB699 4. 最后得到请求的例子如下:
POST /api/v1/mop/customer-open-api/organ/netdisk/upload?nonce=b3fceb4f-6766-4a1a-9efb-c07ce85409aa×tamp=1631851443000&sign=CCA7AC5EDFC1541EBEBA8207A46EB699
Body application/form-data
{
"appId": "6141bd122e0fd10001318982",
"uploadFile":文件
}
Response
{
"errcode": "OK",
"error": "",
"data": {
"netdiskID": "6141bd122e0fd10001318982", //网盘id
}
}
# 上传小程序代码
API
POST /api/v1/mop/customer-open-api/organ/upload/applet
query 参数
字段 | 类型 | 含义 | 备注 |
---|---|---|---|
nonce | string | 随机字符串 | 确保是唯一的,建议使用uuid |
timestamp | string | 时间戳,单位毫秒 | 使用当前系统的时间戳 |
sign | string | 签名字符串 |
参数
content-type: application/form-data
字段 | 类型 | 含义 | 备注 |
---|---|---|---|
appId | string | 小程序id | |
version | string | 小程序版本 | 一般使用3位,例如:1.0.0 |
versionRemark | string | 版本描述信息 | |
filesFromNetdisk | string | 小程序代码包网盘信息 | json字符串,不加入签名生成 |
packages | string | 小程序包文件信息 | json字符串,不加入签名生成 |
示例
- appId、version、versionRemark、nonce、timestamp 拼接一起,并且按照参数字母排序,得到签名之前的字符串salt如下: appId=6141bd122e0fd10001318982&nonce=b3fceb4f-6766-4a1a-9efb-c07ce85409aa×tamp=1631851443000&version=1.0.0&versionRemark=版本调试
- 将 salt 拼接上 apiKey,得到 salt 是这样,appId=6141bd122e0fd10001318982&nonce=b3fceb4f-6766-4a1a-9efb-c07ce85409aa×tamp=1631851443000&version=1.0.0&versionRemark=版本调试 &apiKey=ABCDEFGHIJKLMNOPQ1234567890
- 对salt,进行MD5签名,得到sign=CCA7AC5EDFC1541EBEBA8207A46EB699
POST /api/v1/mop/customer-open-api/organ/upload/applet?nonce=b3fceb4f-6766-4a1a-9efb-c07ce85409aa×tamp=1631851443000&sign=CCA7AC5EDFC1541EBEBA8207A46EB699
Body application/form-data
{
"appId": "6141bd122e0fd10001318982",
"version":"1.0.0",
"versionRemark":"调试版本",
"filesFromNetdisk":json字符串,
"packages":json字符串
}
Response
{
"errcode": "OK",
"error": "",
"data": {
"appId": "6141bd122e0fd10001318982", //小程序id
"buildLog": "", //上传调试信息
"status": true, //上传是否成功
"buildId": "6141bd122e0fd10001318983" //此次上传的id
}
}
# 提交小程序审核
API
POST /api/v1/mop/customer-open-api/organ/publish/applet
query 参数
字段 | 类型 | 含义 | 备注 |
---|---|---|---|
nonce | string | 随机字符串 | 确保是唯一的,建议使用uuid |
timestamp | string | 时间戳,单位毫秒 | 使用当前系统的时间戳 |
sign | string | 签名字符串 |
参数
content-type: application/json
字段 | 类型 | 含义 | 备注 |
---|---|---|---|
appId | string | 小程序id | |
buildId | string | 编译id |
json 的字段顺序必须是:appId、buildId
示例
- 将 body 转化为 string 字符串,得到param={"appId": "6141bd122e0fd10001318982","buildId":"6141bd122e0fd10001318983"}
- 和 nonce、timestamp 拼接一起,并且按照参数字母排序,得到签名之前的字符串 salt 如下: nonce=b3fceb4f-6766-4a1a-9efb-c07ce85409aa¶m={"appId": " 6141bd122e0fd10001318982","buildId":"6141bd122e0fd10001318983"} ×tamp=1631851443000
- 将 salt 拼接上 apiKey,得到 salt 是这样,nonce=b3fceb4f-6766-4a1a-9efb-c07ce85409aa¶m={"appId": "6141bd122e0fd10001318982"," buildId":"6141bd122e0fd10001318983"} ×tamp=1631851443000&apiKey=ABCDEFGHIJKLMNOPQ1234567890
- 对 salt,进行 MD5 签名,得到 sign=CCA7AC5EDFC1541EBEBA8207A46EB699
POST /api/v1/mop/customer-open-api/organ/publish/applet?nonce=b3fceb4f-6766-4a1a-9efb-c07ce85409aa×tamp=1631851443000&sign=CCA7AC5EDFC1541EBEBA8207A46EB699
Body application/json
{
"appId": "6141bd122e0fd10001318982",
"buildId":"6141bd122e0fd10001318983"
}
Response
{
"data": {
"appId": "629491cdf049b5000127e9ed",
"sequence": 3
},
"errcode": "OK",
"error": ""
}
# 通过小程序审核并发布
API
POST /api/v1/mop/customer-open-api/organ/audit/applet
query 参数
字段 | 类型 | 含义 | 备注 |
---|---|---|---|
nonce | string | 随机字符串 | 确保是唯一的,建议使用uuid |
timestamp | string | 时间戳,单位毫秒 | 使用当前系统的时间戳 |
sign | string | 签名字符串 |
参数
content-type: application/json
字段 | 类型 | 含义 | 备注 |
---|---|---|---|
appId | string | 小程序id | |
sequence | int | 编译序列号,该字段在提交小程序上架审核后返回 | |
operation | string | Approve-同意 Reject-取消 | |
reason | string | 驳回原因 |
json 字段顺序必须是:appId、sequence、operation、reason
示例
- 将 body 转化为string字符串,得到param={"appId": "6141bd122e0fd10001318982","sequence":2,"operation": "Approve","reason": ""}
- 和 nonce、timestamp 拼接一起,并且按照参数字母排序,得到签名之前的字符串 salt 如下: nonce=b3fceb4f-6766-4a1a-9efb-c07ce85409aa¶m={"appId": " 6141bd122e0fd10001318982","sequence":2,"operation": "Approve","reason": ""} ×tamp=1631851443000
- 将 salt 拼接上 apiKey,得到 salt 是这样,nonce=b3fceb4f-6766-4a1a-9efb-c07ce85409aa¶m={"appId": "6141bd122e0fd10001318982"," sequence":2,"operation": "Approve","reason": ""} ×tamp=1631851443000&apiKey=ABCDEFGHIJKLMNOPQ1234567890
- 对 salt,进行MD5签名,得到sign=CCA7AC5EDFC1541EBEBA8207A46EB699
POST /api/v1/mop/customer-open-api/organ/audit/applet?nonce=b3fceb4f-6766-4a1a-9efb-c07ce85409aa×tamp=1631851443000&sign=CCA7AC5EDFC1541EBEBA8207A46EB699
Body application/json
{
"appId": "629491cdf049b5000127e9ed",
"sequence": 2,
"operation": "Approve",
"reason": ""
}
Response
{
"data": {
"appId": "629491cdf049b5000127e9ed",
"qrcodeUrl": "${host}/api/v1/mop/runtime/applet/-f-YTA0ZWE0OTQ3MzRiYWRmNg--"
},
"errcode": "OK",
"error": ""
}
# 获取小程序二维码信息
API
POST /api/v1/mop/customer-open-api/organ/release/applet/qrcode
query 参数
字段 | 类型 | 含义 | 备注 |
---|---|---|---|
nonce | string | 随机字符串 | 确保是唯一的,建议使用uuid |
timestamp | string | 时间戳,单位毫秒 | 使用当前系统的时间戳 |
sign | string | 签名字符串 |
参数
content-type: application/json
字段 | 类型 | 含义 | 备注 |
---|---|---|---|
appId | string | 小程序id | |
apiServer | string | api服务地址 |
json 的字段顺序必须是:appId、apiServer
示例
- 将 body 转化为 string 字符串,得到 param={"appId": "6141bd122e0fd10001318982","apiServer": "https://www.finclip.com"}
- 和 nonce、timestamp 拼接一起,并且按照参数字母排序,得到签名之前的字符串salt如下: nonce=b3fceb4f-6766-4a1a-9efb-c07ce85409aa¶m={"appId": " 6141bd122e0fd10001318982","apiServer": "https://www.finclip.com"} ×tamp=1631851443000
- 将 salt 拼接上 apiKey,得到 salt 是这样,nonce=b3fceb4f-6766-4a1a-9efb-c07ce85409aa¶m={"appId": "6141bd122e0fd10001318982"," apiServer": "https://www.finclip.com"} ×tamp=1631851443000&apiKey=ABCDEFGHIJKLMNOPQ1234567890
- 对 salt,进行 MD5 签名,得到 sign=CCA7AC5EDFC1541EBEBA8207A46EB699
POST /api/v1/mop/customer-open-api/organ/release/applet/qrcode?nonce=b3fceb4f-6766-4a1a-9efb-c07ce85409aa×tamp=1631851443000&sign=CCA7AC5EDFC1541EBEBA8207A46EB699
Body json
{
"appId": "6141bd122e0fd10001318982",
"apiServer": "https://www.finclip.com"
}
Response
{
"errcode": "OK",
"error": "",
"data": {
"qrData": "https://www.finclip.com/mop/scattered-page/#/sdktip?type=scanOpen&info=+afT21jLmm4GIvIM2V3Pmad9mLqir+XwuoQVVBrj445XPPRI6eueFFUZcUGP895jz0cGjj0Ne4fcchBRCmJO+As0XFqMrOclsqrXaogsaUOfv+Co/r96qtXEmT529qqdI2JQccA8RSSp0BzLQUVkFfWR2CigS45XtIIGtqS4RCRDFelMrsfr9uUHe8nOXYWW6ompMwFMU6J6S4o2zmG/sHnCmZZRjXDh2MxRiWQF4CkAtCgkJCwwKefA5693YfAvAj8usV+0J93NXGXHtGmU3yrn20vjCfAR5u/tiP7jj+bC38HT2J1GhgK4JuYnhomB&codeType=release"
}
}
# 获取体验版的二维码链接
API
POST /api/v1/mop/customer-open-api/organ/publish/trial/applet
query 参数
字段 | 类型 | 含义 | 备注 |
---|---|---|---|
nonce | string | 随机字符串 | 确保是唯一的,建议使用uuid |
timestamp | string | 时间戳,单位毫秒 | 使用当前系统的时间戳 |
sign | string | 签名字符串 |
参数
content-type: application/json
字段 | 类型 | 含义 | 备注 |
---|---|---|---|
appId | string | 小程序id | |
buildId | string | 编译id | |
apiServer | string | api服务地址 |
json 的字段顺序必须是:appId、buildId、apiServer
示例
- 将 body 转化为 string 字符串,得到 param={"appId": "6141bd122e0fd10001318982","buildId":"6141bd122e0fd10001318983"," apiServer": "https://www.finclip.com"}
- 和 nonce、timestamp 拼接一起,并且按照参数字母排序,得到签名之前的字符串 salt 如下: nonce=b3fceb4f-6766-4a1a-9efb-c07ce85409aa¶m={"appId": " 6141bd122e0fd10001318982","buildId":"6141bd122e0fd10001318983","apiServer": "https://www.finclip.com"} ×tamp=1631851443000
- 将 salt 拼接上 apiKey,得到 salt 是这样,nonce=b3fceb4f-6766-4a1a-9efb-c07ce85409aa¶m={"appId": "6141bd122e0fd10001318982"," buildId":"6141bd122e0fd10001318983","apiServer": "https://www.finclip.com"} ×tamp=1631851443000&apiKey=ABCDEFGHIJKLMNOPQ1234567890
- 对 salt,进行 MD5 签名,得到 sign=CCA7AC5EDFC1541EBEBA8207A46EB699
POST /api/v1/mop/customer-open-api/organ/publish/trial/applet?nonce=b3fceb4f-6766-4a1a-9efb-c07ce85409aa×tamp=1631851443000&sign=CCA7AC5EDFC1541EBEBA8207A46EB699
Body application/json
{
"appId": "6141bd122e0fd10001318982",
"buildId":"6141bd122e0fd10001318983",
"apiServer": "https://www.finclip.com"
}
Response
{
"errcode": "OK",
"error": "",
"data": {
"qrData":"https://www.finclip.com/api/v1/mop/runtime/applet/-f-ZjExNmZhZDdmNGQ0NTU5MA--""
}
}
# 获取小程序版本列表
API
GET /api/v1/mop/customer-open-api/organ/applet/ver-list/:appId
query 参数
字段 | 类型 | 含义 | 备注 |
---|---|---|---|
nonce | string | 随机字符串 | 确保是唯一的,建议使用uuid |
timestamp | string | 时间戳,单位毫秒 | 使用当前系统的时间戳 |
sign | string | 签名字符串 |
url param 参数
字段 | 类型 | 含义 | 备注 |
---|---|---|---|
appId | string | 小程序id |
示例
- 将请求参数转化为 string 字符串,和 nonce、timestamp 拼接一起,并且按照参数字母排序,得到签名之前的字符串 salt 如下: appId=62997e8b9fbba10001d44847&nonce=b3fceb4f-6766-4a1a-9efb-c07ce85409aa×tamp=1631851443000
- 将 salt 拼接上 apiKey,得到 salt 是这样,appId=62997e8b9fbba10001d44847&nonce=b3fceb4f-6766-4a1a-9efb-c07ce85409aa×tamp=1631851443000&apiKey=ABCDEFGHIJKLMNOPQ1234567890
- 对 salt,进行 MD5 签名,得到 sign=CCA7AC5EDFC1541EBEBA8207A46EB699
GET /api/v1/mop/customer-open-api/organ/applet/ver-list/62997e8b9fbba10001d44847?nonce=b3fceb4f-6766-4a1a-9efb-c07ce85409aa×tamp=1631851443000&sign=CCA7AC5EDFC1541EBEBA8207A46EB699
Response
{
"data": {
"list": [
{
"createTime": 1662436084640, //上传时间
"version": "1.1.1", //版本号
"verType": "pubVer", //版本类型:pubVer: 线上版,trialVer:体验版,devVer:开发版,多个版本类型以","分割
"buildId": "6141bd122e0fd10001318983" //编译id
}
...
]
"total": 25 //总条数
},
"errcode": "OK",
"error": ""
}
# 小程序登录鉴权
API
POST /api/v1/mop/customer-open-api/organ/applet/login/auth
query 参数
字段 | 类型 | 含义 | 备注 |
---|---|---|---|
nonce | string | 随机字符串 | 确保是唯一的,建议使用uuid |
timestamp | string | 时间戳,单位毫秒 | 使用当前系统的时间戳 |
sign | string | 签名字符串 |
参数
content-type: application/json
字段 | 类型 | 含义 | 备注 |
---|---|---|---|
appId | string | 小程序id | |
encodeAuth | string | 加密的鉴权字符串 |
json 的字段顺序必须是:appId、encodeAuth
示例
- 将 body 转化为 string 字符串,得到 param={"appId": "6141bd122e0fd10001318982","encodeAuth":"6141bd122e0fd10001318983"}
- 和 nonce、timestamp 拼接一起,并且按照参数字母排序,得到签名之前的字符串 salt 如下: nonce=b3fceb4f-6766-4a1a-9efb-c07ce85409aa¶m={"appId": " 6141bd122e0fd10001318982","encodeAuth":"6141bd122e0fd10001318983"} ×tamp=1631851443000
- 将 salt 拼接上 apiKey,得到 salt 是这样,nonce=b3fceb4f-6766-4a1a-9efb-c07ce85409aa¶m={"appId": "6141bd122e0fd10001318982"," encodeAuth":"6141bd122e0fd10001318983"} ×tamp=1631851443000&apiKey=ABCDEFGHIJKLMNOPQ1234567890
- 对 salt,进行 MD5 签名,得到 sign=CCA7AC5EDFC1541EBEBA8207A46EB699
POST /api/v1/mop/customer-open-api/organ/applet/login/auth?nonce=b3fceb4f-6766-4a1a-9efb-c07ce85409aa×tamp=1631851443000&sign=CCA7AC5EDFC1541EBEBA8207A46EB699
Body application/json
{
"appId": "6141bd122e0fd10001318982",
"encodeAuth":"qW5qtr4b5idqdi+UvM4bjd1XqpEU4/1+xYai6juNvfo="
}
Response
{
"errcode": "OK",
"error": "",
"data": {
"decodeAuth":"www.finclip.com"
}
}