# 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"
   }
}
