开放对接协议

爱搭贝
更新于2025-08-07

概述

本openapi目前处于内测阶段,本文档仅临时对特定用户开放。 注:正式文档发布前,可能会有变动,为减少可能存在返回工,请在实际开发启动前,联系客服人员确认以是否存在更新版本

简介

开放接口服务(open api)是搭贝能力开放平台的核心服务之一,为搭贝用户提供统一、安全的双向数据传输服务,赋予用户终端应用个性化需求的多维支撑能力。 开放接口openapi及webhook均以本协议实现数据传输。

术语说明

  • 平台:特指搭贝能力开放平台,为用户提供各类功能,为用户提供更多自定义开发能力,功能包括但不限于开放接口、数据推送、自定义组件/页面、oa接入等。
  • 用户:特指搭贝用户,接入平台的用户即为接入方。
  • 第三方服务:用户服务可能涉及除搭贝及自身独立的其他服务,如银行类接口,统一称第三方服务。

协议说明

接口采用https协议做为基本载体,结合签名、加密等机制以达到数据准确、安全传输的目的。

开发须知

在对接开放接口之前,需要先了解如下数据。

  • 获取/配置,使用管理员进入应用工厂,获取开放接口的配置数据
image.png

注:内测阶段, 平台暂不提供图形配置,请联系客服由开发提供

数据项参数说明备注
api_keystring,用户身份的标记由平台为用户分配,需要接入侧保存。注:内测阶段仅一个租户开放一个apiKey
signing_keystring,参与HmacSHA256摘要数据由平台分配或用户自定义生成,用于数据传输中签名/摘要使用
secret_keystring,aes数据加密密钥由平台分配或用户自定义生成,用于body报文的加解密使

请求地址

钉钉 api地址:https://ding.idabei.com/open_api
微信 api地址:https://wechat.idabei.com/open_api

公共参数

参数名参数类型必填说明
Authorizationstring,header,认证格式参考格式Authorization: Bearer api_key,注意首字母A大写,将参与签名
api_versionstring,header中,版本号目前可固定: v1.0
random_strstring,32位随机数用于签名校验。注意区分大小写
timestampnumber,时间戳用于签名校验,请使用发起请求时的时间,注意为ms
signaturestring,摘要/签名防止数据篡改

规则要求

  • 遵循统一的REST的设计风格
  • 请求都统一为HTTPS
  • 数据传输编码为 UTF-8
  • 请求体中数据密文传输
  • 响应体中数据密文传输
  • 时效性为1小时,请求不再处理
  • 同一用户请求限制5次/秒

错误码

状态码说明
200成功
400失败
错误码说明
4001用户认证失败
4002不合法的版本
4002不合法的参数
4003校验签名失败
4004业务参数无效
9999其它错误

开发指南

签名生成

  1. 签名串格式
  2. 签名串至多4行(对于get请求为3行),每一行为一个参数,如果有下一行,行尾以 \n(换行符,ASCII编码值为0x0A)结束,不包括最后一行。

URI\n

请求头apiKey\n

请求参数字符串\n

请求报文主体

  1. 构造签名串

以创建表单数据为例:

获取请求的uri

获取请求的绝对URL,并去除域名部分得到参与签名的URI,注意不包括查询参数

/open_api/apps/app00001/forms/form00001/record_create

获取请求头Authorization中的api_key,注意需要去掉Bearer

d8e0001634bd48b4bf9d999eb3d103e2

获取参数字符串,需要对请求参数数据key按自然顺序排序,把请求要素按照“参数=参数值”的模式用“&”字符拼接成字符串。

random_str=X3oZ21AmdXTuYMl8IJY0hCJLoamryaLd×tamp=1643008040000

  • 获取请求报文主体

将请求报文进行json字符串转换,没有请求体,则不参与。

  • 参与签名的请求体必须明文,不能是加密后密文
  1. 计算签名值

hmacsha256加密

采用HmacSHA256算法对字符串进行摘要算法,这里我们假定signing_key的值为123,然后对其进行base64编码得到signature

1.png

对“1792783e37457f468fa296436d79cf89af6e28e920a357f5ae778f3fc48dcd58”进行base64编码得到signature为:

MTc5Mjc4M2UzNzQ1N2Y0NjhmYTI5NjQzNmQ3OWNmODlhZjZlMjhlOTIwYTM1N2Y1YWU3NzhmM2ZjNDhkY2Q1OA==

报文加密/解密

目前平台只针对请求的body和响应的body中data参数加密,加密方式为aes对称加密。 ecb/128/base64输出

  • 注意:使用openssl,需要将secretKey指定为ascii码的16进制格式,如下方,secretKey原文为:1234567890123456,其16进制为31323334353637383930313233343536
  • 响应体的只有data为密文,整体的errcode和errmsg等协议数据,参考如下

{

   "errcode": 0,

   "errmsg": "success",

   "data": "cRCw/5b+TfUPMY0d5AU8RaTUj27aa8R6xiyctUDXFHQA8LYhT6LwESLSWXR00YzQ"

}

加密演示

echo -n '{"param1":"value1","param2":"value2"}'

| openssl enc -aes-128-ecb -e -K 31323334353637383930313233343536 -nosalt -a

//得到aes加密结果

cRCw/5b+TfUPMY0d5AU8RaTUj27aa8R6xiyctUDXFHQA8LYhT6LwESLSWXR00YzQ

  • 解密演示

echo 'cRCw/5b+TfUPMY0d5AU8RaTUj27aa8R6xiyctUDXFHQA8LYhT6LwESLSWXR00YzQ'

| openssl enc -aes-128-ecb -a -d -K 31323334353637383930313233343536 -nosalt

//得到aes解密结果

{"param1":"value1","param2":"value2"}

签名验签

签名验证用于双向校验,对于用户即接入方校验平台的数据推送签名,而平台侧校验接入方的数据同步

  1. 身份认证

header中请获取Authorization, 得到对应的api_key,并判断该api_key是否和平台分配给自己的值相同,如果不相同,则认为请求无效

Authorization: Bearer d8e0001634bd48b4bf9d999eb3d103e2

  1. 签名校验

对于接入方而言,需要按上方签名生成的步骤,走一遍摘要算法,得到值后同参数中的signature对比,如果相同则验证通过。

  • 签名前需要对body解密