1.背景介绍
用于外部工单系统与内部基多的安装单进行数据更新同步
2. 接口规范
2.1 协议说明
对接的openAPI接口目前只开放HTTPS方式,所有的消息一律采用POST方式。
Content-Type | application/json |
数据格式 | 返回为Json格式 |
字符编码 | UTF-8字符编码 |
签名算法 | RSA |
签名规则 | 参考2.2 |
2.2 签名规则
使用非对称加密方式,请求方生成密钥对,保留密钥对的私钥,并对请求体进行加签后再作请求,防止消息被篡改。提供接口的一方保留密钥对的公钥,对请求体进行签名验证。
2.2.1 生成密钥对
- 使用openssl工具生成RSA私钥和公钥 (2048 bit)
- 把RSA私钥转换成PKCS8格式
- 将RSA公钥发送给需要验签的一方
2.2.2 加签步骤
- 获取请求体 post 内容,不包括字节类型参数,如文件、字节流,剔除 sign 字段,剔除值为空的参数;
- 按照第一个字符的键值 ASCII 码递增排序(字母升序排序),如果遇到相同字符则按照第二个字符的键值 ASCII 码递增排序,以此类推;
- 将排序后的参数与其对应值,组合成 参数=参数值 的格式,并且把这些参数用
&
字符连接起来,此时生成的字符串为待签名字符串。示例:
原请求体:
{"app_id":"20210021","time_stamp":1643093114,"biz_content":{"order_no":"","shop_no":""}}
处理完成后:"app_id='20210021'&time_stamp=1643093114&biz_content={'order_no':'','shop_no':'','shop_name':''}"
- 使用rsa 私钥对字符串进行加签(使用sha1算法,并进行base64处理)。
2.3 公共参数
参数名 | 必填 | 类型 | 说明 | 示例 |
app_id | 是 | string | 唯一标识接入身份,联系商米数字店铺提供 | “20210021” |
time_stamp | 是 | int | 当前的unix timestamp,精度到秒级,10位数字 | 1643093114 |
sign | 是 | string | 签名信息 | skdsaijaowpeoqpo |
3. 安装单接口
3.1 基多服务端同步接口
接口描述:通过此接口将工单数据同步到基多服务中
请求链接:http://quito.sunmi.com/quito/api/mgt/order/subOrder/updateInfo
接口版本:v 1.0
加密之前的字段:
安装单字段
参数名称 | 必须 | 类型 | 说明 |
sub_order_no | 是 | string | 设备安装单编号(子订单编号) |
shop_no | 是 | string | 门店编号 |
shop_name | 是 | string | 门店名称 |
sn | 否 | string | 设备号 |
install_mode | 否 | string | 安装方式 WALL_MOUNTING 挂壁安装 RACK_MOUNTING 底架支座安装 |
install_pic | 否 | string | 安装照片,英文逗号分隔,最多5张 |
install_video | 否 | string | 安装视频,一个 |
order_process_status | 是 | string | 安装进度 WAIT_ORDER 待预约 ORDER_FAILED 预约失败 WAIT_INSTALL 待上门 WAIT_ACCEPT 待验收 ACCEPTED 已验收 ACCEPT_FAILED 验收失败 INSTALL_CANCEL 取消安装 |
installer_sp | 否 | string | 安装网点 |
installer | 否 | string | 安装人员 |
install_cancel_reason | 否 | string | 取消安装原因 |
install_date | 否 | string | 安装日期 YY/MM/DD |
book_visit_date | 否 | string | 预约上门日期 YY/MM/DD |
device_apply_type | 否 | string | 设备用途 |
device_mode | 是 | string | 设备型号 |
请求示例:
{"app_id":"20210021",
"time_stamp":1643093114,
"sign":"skdsaijaowpeoqpo",
"biz_content":{"order_no":"BOb676d92478b9c94096",
"shop_no":"910553061572",
"shop_name":"我的店铺",
"order_process_status":"WAIT_ORDER",
"device_mode":"NPE01",
}}
返回值:
{"code":1,"msg":"success"}
错误码:
code | 说明 |
1 | 更新成功 |
-1 | 其他错误 |
5000 | 数据库错误 |
5026 | 验签失败 |
6055 | sn与门店绑定不一致 |
6056 | 设备未完成回收/维保换机流程 |
6057 | 订单状态不能回退 |
6088 | 设备型号不匹配 |
3.2 第三方工单系统创建接口
接口描述:通过此接口将安装订单数据导入进第三方工单系统
请求链接:/api/order/create
接口版本:v 1.0
加密之前的字段:
安装订单字段属性
参数名称 | 必须 | 类型 | 说明 |
order_no | 是 | string | 主订单编号 |
apply_time | 是 | int | 订单申请时间戳 |
created_time | 是 | int | 订单创建时间戳 |
shop_no | 是 | string | 门店编号 |
shop_name | 是 | string | 门店名称 |
city | 是 | string | 市 |
district | 是 | string | 区 |
address | 是 | string | 详细地址 |
house_no | 是 | string | 门牌号 |
comment | 是 | string | 备注 |
remark | 是 | string | 审核备注 |
sub_order_list | 是 | list[sub_order] | 子订单列表,每一笔子订单对应一台设备安装 |
pictures | 是 | list[string] | 现场照片 |
reference_company | 否 | string | 推荐人公司 |
reference_name | 否 | string | 推荐人姓名 |
reference_phone | 否 | string | 推荐人联系方式 |
contact_name | 是 | string | 店家联系人 |
contact_tel | 是 | string | 店家联系电话 |
router_cnt | 是 | int | 路由数量 |
router_model | 否 | string | 路由型号 |
sub_order 子订单属性
参数名称 | 必须 | 类型 | 说明 |
sub_order_no | 是 | string | 子订单编号 |
device_mode | 是 | string | 设备型号, NPG01: 32寸商业显示器, NPE01: 24寸商业显示器设备型号,NPH01: 43寸商业显示器(4G),NPH02: 43寸商业显示器 |
请求示例:
{"app_id":"20210021",
"time_stamp":1643093114,
"sign":"skdsaijaowpeoqpo",
"biz_content":{
"order_no":"BOb676d92478b9c94096",
"created_time":1643093114,
"shop_no":"910553061572",
"shop_name":"我的店铺",
"city":"上海市",
"district":"杨浦区",
"address":"淞沪路388号",
"house_no":"203",
"commment":"",
"remark":"",
"sub_order_list":[{
"sub_order_no":"SBOC12CEF63480CE180640009",
"device_mode":"NPG01"}
],
"pictures":["http://sunmi.cdn.com/1234.jpg"],
"reference_company":"商米",
"reference_name":"张三",
"reference_phone":"17239123321",
"contact_name":"李四",
"contact_tel":"241244124",
"router_cnt":1,
"router_model":""
}
返回值:
{"code":1,"msg":"success"}
错误码:
code | 说明 |
1 | 导入成功 |
-1 | 其他错误 |
5000 | 数据库错误 |
5020 | 无效参数 |
5021 | 无效路径 |
5023 | 参数缺失 |
5026 | 验签失败 |
3.3 第三方工单系统更新接口
接口描述:通过此接口修改第三方工单系统的订单数据
请求链接:/api/order/update
接口版本:v 1.0
加密之前的字段:
参数名称 | 必须 | 类型 | 说明 |
order_no | 是 | string | 主订单编号 |
shop_name | 否 | string | 门店名称 |
city | 否 | string | 市 |
district | 否 | string | 区 |
address | 否 | string | 详细地址 |
house_no | 否 | string | 门牌号 |
comment | 否 | string | 备注 |
remark | 否 | string | 审核备注 |
sub_order_list | 否 | list[sub_order] | 子订单列表,每一笔子订单对应一台设备安装 |
pictures | 否 | list[string] | 现场照片 |
reference_company | 否 | string | 推荐人公司 |
reference_name | 否 | string | 推荐人姓名 |
reference_phone | 否 | string | 推荐人联系方式 |
contact_name | 否 | string | 店家联系人 |
contact_tel | 否 | string | 店家联系电话 |
router_cnt | 否 | int | 路由数量 |
router_model | 否 | string | 路由型号 |
sub_order 子订单属性
参数名称 | 必须 | 类型 | 说明 |
sub_order_no | 是 | string | 子订单编号 |
device_mode | 是 | string | 设备型号, NPG01: 32寸商业显示器, NPE01: 24寸商业显示器设备型号,NPH01: 43寸商业显示器(4G),NPH02: 43寸商业显示器 |
请求示例:
{"app_id":"20210021",
"time_stamp":1643093114,
"sign":"skdsaijaowpeoqpo",
"biz_content":{
"order_no":"BOb676d92478b9c94096",
"shop_no":"910553061572",
"shop_name":"我的店铺",
"city":"上海市",
"district":"杨浦区",
"address":"淞沪路388号",
"house_no":"203",
"commment":"",
"remark":"",
"sub_order_list":[{
"sub_order_no":"SBOC12CEF63480CE180640009",
"device_mode":"NPG01"}
],
"pictures":["http://sunmi.cdn.com/1234.jpg"],
"reference_company":"商米",
"reference_name":"张三",
"reference_phone":"17239123321",
"contact_name":"李四",
"contact_tel":"241244124",
"router_cnt":1,
"router_model":""
}
返回值:
{"code":1,"msg":"success"}
code | 说明 |
1 | 成功 |
-1 | 其他错误 |
5000 | 数据库错误 |
5020 | 无效参数 |
5021 | 无效路径 |
5023 | 参数缺失 |
5026 | 验签失败 |
5047 | 无效订单 |