Commit 7b6f5519cb07146d2534752762c1677bde3acd6d

Authored by 王富国
1 parent 7f03dbab
Exists in master

fix: 修改订单接口文档

Showing 2 changed files with 1111 additions and 897 deletions   Show diff stats
order/2023022201/order.md 0 → 100644
... ... @@ -0,0 +1,1111 @@
  1 +
  2 +
  3 +### 则一订单对接API
  4 +
  5 +则一提供了不同规范的API,调用则一订单服务端API前,需了解开发前须知及调用流程。本文提供了调用则一订单服务端API示例,供开发者参考。
  6 +
  7 +#### 白名单
  8 +
  9 +则一服务端API接口访问有IP白名单限制,需要接口调用方提供调用API的服务器IP地址。
  10 +
  11 +#### 数据加签
  12 +
  13 +采用md5(32位小写)算法生成签名
  14 +appKey(则一提供) + appSecret(则一提供) + timestamp(当前时间戳毫秒) + nonce(6位随机码大小写字母数子组合) + data(请求数据)
  15 +
  16 +#### 数据加密
  17 +
  18 +数据加密采用AES算法
  19 +加密模式: CBC
  20 +填充方式:PKCS5Padding
  21 +偏移量:iv(则一提供)
  22 +加密内容:appKey(则一提供) + timestamp(当前时间戳毫秒) + nonce(6位随机码大小写字母数子组合) + data(加密数据)
  23 +密钥: appSecret(则一提供)
  24 +输出:base64
  25 +字符集:utf-8
  26 +注:无敏感数据则无需加密
  27 +
  28 +#### 获取访问凭证
  29 +
  30 +##### 概述
  31 +
  32 +调用则一服务API时,都需要先获取对应权限类型的访问凭证accessToken。访问凭证(accessToken)是由则一权限系统颁发的,用来校验调用者的身份信息,确保调用者具有要执行的操作的权限。
  33 +**说明**: 在使用accessToken时,请注意:
  34 +
  35 +* accessToken的有效期默认为30天,有效期内重复获取会返回相同结果,过期后获取会返回新的accessToken。
  36 +* 开发者需要缓存accessToken,用于后续接口的调用。不能频繁调用获取accessToken接口,否则会受到频率拦截。
  37 +* 当调用业务API时,如果返回状态码为401,则说明accessToken不正确或已过期,这时需要重新获取accessToken后再调用对应的API。
  38 +
  39 +##### 接口信息
  40 +
  41 +###### 请求方式:
  42 +
  43 +post
  44 +
  45 +###### 请求地址:
  46 +
  47 +* 生产:https://gw.shjiuze.cn/auth-service-api/login/password
  48 +* 测试:https://test.shjiuze.cn/auth-service-api/login/password
  49 +
  50 +###### Body参数
  51 +
  52 +| 名称 | 类型 | 必填 | 示例值 | 描述 |
  53 +| -------- | ------ | ---- | ----------- | ---------------- |
  54 +| username | String | 是 | zhangsan | 用户名,则一提供 |
  55 +| password | String | 是 | password123 | 密码,则一提供 |
  56 +
  57 +###### 返回参数
  58 +
  59 +| 名称 | 类型 | 示例值 | 描述 |
  60 +| ------------------------------ | ---------- | -------------------------------- | -------------------------------------------------- |
  61 +| success | boolean | true | 成功标识: true 成功,false 失败 |
  62 +| businessException | boolean | false | 业务异常标识: true 业务异常,false 正常 |
  63 +| errorCode | String | 200 | 错误码: 200 业务异常,500 系统异常, 空表示无错误 |
  64 +| message | String | 订单号不能为空 | 错误信息,无错误则返回空 |
  65 +| result | ZYTokenDto | | accessToken结果数据 |
  66 +|     accessToken | String | 000626f15b4b41bba6fe56216a5d2f73 | accessToken |
  67 +|     expiresIn | Integer | 2060 | 有效期限单位秒,accessToken在2060秒后过期 |
  68 +|     tokenType | String | bearer | token类型 |
  69 +
  70 +##### 请求示例
  71 +
  72 +###### Http方式
  73 +
  74 +```http
  75 +POST /auth-service-api/login/password HTTP/1.1
  76 +Host:test.shjiuze.cn
  77 +Content-Type:application/json
  78 +
  79 +{
  80 + "username" : "zeyi",
  81 + "password" : "test1111"
  82 +}
  83 +```
  84 +
  85 +###### Java-sdk方式 [下载SDK](https://zeyi-tms-product.oss-cn-hangzhou.aliyuncs.com/file/jar/java-sdk/zy-java-sdk-1.0.0.jar)
  86 +
  87 +```java
  88 +public class Sample {
  89 + public static void main(String[] args_) {
  90 + String appKey = "appkey";
  91 + String appSecret = "appSecret";
  92 + ZYClient zyClient = new ZYClient(appKey, appSecret);
  93 + ZYTokenRequestDto zyTokenRequest = new ZYTokenRequestDto();
  94 + zyTokenRequest.setUsername("zeyi");
  95 + zyTokenRequest.setPassword("test1111");
  96 + String body = gson.toJson(zyTokenRequest);
  97 + HttpResponseData httpResponseData = zyClient.doPost(Constants.TEST_HOST + Constants.TOKEN_PATH, body);
  98 + if(httpResponseData == null) {
  99 + throw new TokenException("则一Token请求失败,返回为空!");
  100 + }
  101 + ZYResponse<ZYTokenDto> zyResponse = gson.fromJson(httpResponseData.getBody(), new TypeToken<ZYResponse<ZYTokenDto>>(){}.getType());
  102 + if(!Boolean.TRUE.equals(zyResponse.isSuccess())) {
  103 + throw new TokenException("则一Token请求返回失败!" + zyResponse.getMessage());
  104 + }
  105 + if(zyResponse.getResult() == null) {
  106 + throw new TokenException("则一Token请求返回失败,返回结果为空!" + zyResponse.getMessage());
  107 + }
  108 + if(StringUtils.isBlank(zyResponse.getResult().getAccessToken())) {
  109 + throw new TokenException("则一Token请求返回数据异常,AccessToken为空!" + zyResponse.getMessage());
  110 + }
  111 + // 结果 zyResponse.getResult();
  112 + }
  113 +}
  114 +```
  115 +
  116 +##### 返回示例
  117 +
  118 +```json
  119 +{
  120 + "success": true,
  121 + "businessException": false,
  122 + "errorCode": null,
  123 + "message": null,
  124 + "result": {
  125 + "accessToken": "64d7f367-609b-4f7d-a84d-a3d2a0b5ad85",
  126 + "expiresIn": 602105,
  127 + "tokenType": "bearer"
  128 + }
  129 +}
  130 +```
  131 +
  132 +#### 下单
  133 +
  134 +##### 接口信息
  135 +
  136 +###### 请求方式:
  137 +
  138 +post
  139 +
  140 +###### 请求地址:
  141 +
  142 +* 生产:https://gw.shjiuze.cn/oms-service-api/order/add
  143 +* 测试:https://test.shjiuze.cn/oms-service-api/order/add
  144 +
  145 +###### Headers参数
  146 +
  147 +| 名称 | 类型 | 必填 | 示例值 | 描述 |
  148 +| ------------- | ------ | -------------------------- | -------------------------------- | ------------------------------------------------------------ |
  149 +| Authorization | String | 是&nbsp;&nbsp;&nbsp;&nbsp; | Bearer a2c5680001 | 调用服务端API的应用凭证accessToken,通过调用获取访问凭证接口获取。 |
  150 +| appKey | String | 是 | 0867ef5f23ef6483749e19e1692b | 则一提供 |
  151 +| timestamp | String | 是 | 1643251533306 | 当前时间戳毫秒值 |
  152 +| nonce | String | 是 | gdst9t | 6位小写字母数字组合随机串 |
  153 +| sign | String | 是 | fa3ed338d6dfe18e7273c8692234ee70 | 签名:appKey(则一提供) + appSecret(则一提供) + timestamp + nonce(6位随机码) + data(body参数)通过md5(32位小写)算法生成 |
  154 +
  155 +###### Body参数
  156 +
  157 +| 名称 | 类型 | 必填 | 示例值 | 描述 |
  158 +| ------------------------------------- | -------------------- | -------------------------- | ---------------- | ------------------------------------------------------------ |
  159 +| customerOrderCode | String | 是&nbsp;&nbsp;&nbsp;&nbsp; | 220101000001 | 客户订单号,订单唯一标识 |
  160 +| customerSn | String | 否 | 220101000001 | 客户委托单号 |
  161 +| placeOrderTime | Number | 是 | 1643251533306 | 下单时间,时间戳毫秒值 |
  162 +| loadTime | Number | 是 | 1643251533306 | 装货时间,时间戳毫秒值 |
  163 +| expectArrivalTime | Number | 否 | 1643251533306 | 期望送达时间,时间戳毫秒值 |
  164 +| receiptType | String | 否 | ELECTRON_TYPE | 回单类型:ELECTRON_TYPE/电子回单,PAPER_TYPE/纸质回单,NONE/无 |
  165 +| receiptNumber | Number | 否 | 1 | 回单张数 |
  166 +| receiptCode | String | 否 | A2022012602278 | 回单号 |
  167 +| payType | String | 否 | PAY_IN_CASH | 付款方式:PAY_IN_CASH/现付,PAY_ON_DELIVERY/到付,PAY_ARREARS/欠付,PAY_MONTH/月结,PAY_BACK/回付,PAY_MULTIPLE/多笔付,PAY_FREE/免费 |
  168 +| lineName | String | 否 | 上海-天津-北京 | 线路名称 |
  169 +| remark | String | 否 | 需要雨布和尾板 | 订单备注 |
  170 +| station | OrderStation[] | 是 | | 订单经停点 |
  171 +| &nbsp;&nbsp;&nbsp; stationId | String | 否 | 123abc | 站点id |
  172 +| &nbsp;&nbsp;&nbsp; stationName | String | 否 | 上海顺丰青浦站点 | 站点名称 |
  173 +| &nbsp;&nbsp;&nbsp; provinceCode | String | 否 | 310000 | 省份编号 |
  174 +| &nbsp;&nbsp;&nbsp; provinceName | String | 是 | 上海 | 省份名称 |
  175 +| &nbsp;&nbsp;&nbsp; cityCode | String | 否 | 310100 | 城市编号 |
  176 +| &nbsp;&nbsp;&nbsp; cityName | String | 是 | 上海市 | 城市名称 |
  177 +| &nbsp;&nbsp;&nbsp; areaCode | String | 否 | 310118 | 区域编号 |
  178 +| &nbsp;&nbsp;&nbsp; areaName | String | 是 | 青浦区 | 区域名称 |
  179 +| &nbsp;&nbsp;&nbsp; address | String | 是 | 纪鹤公路1988号 | 详细地址 |
  180 +| &nbsp;&nbsp;&nbsp; lat | String | 是 | 36.221825 | 纬度 |
  181 +| &nbsp;&nbsp;&nbsp; lng | String | 是 | 120.632908 | 经度 |
  182 +| &nbsp;&nbsp;&nbsp; contactName | String | 否 | 张三 | 联系人 |
  183 +| &nbsp;&nbsp;&nbsp; contactMobile | String | 否 | 18801000001 | 联系人电话 |
  184 +| &nbsp;&nbsp;&nbsp; loadFlag | String | 是 | true | 装货标识 |
  185 +| &nbsp;&nbsp;&nbsp; unloadFlag | String | 是 | false | 卸货标识 |
  186 +| &nbsp;&nbsp;&nbsp; expectArrivalTime | Number | 否 | 1643251533306 | 预计到达时间,时间戳毫秒值 |
  187 +| &nbsp;&nbsp;&nbsp;expectDepartTime | Number | 否 | 1643251533306 | 预计发车时间,时间戳毫秒值 |
  188 +| &nbsp;&nbsp;&nbsp; sort | Number | 否 | 1 | 经停点顺序,如果不传则默认按数组顺序 |
  189 +| goods | OrderGoods[] | 否 | | 订单货物信息 |
  190 +| &nbsp;&nbsp;&nbsp; barCode | String | 否 | 21616162626 | 商品条码 |
  191 +| &nbsp; &nbsp;&nbsp;skuId | String | 否 | 1223233536436 | 商品sku_id |
  192 +| &nbsp;&nbsp;&nbsp;&nbsp;name | String | 是 | 鞋子 | 货物名称 |
  193 +| &nbsp;&nbsp;&nbsp;&nbsp;packageType | String | 否 | | 包装规格 |
  194 +| &nbsp;&nbsp;&nbsp;&nbsp;piece | Number | 否 | 200 | 件数 |
  195 +| &nbsp;&nbsp;&nbsp;&nbsp;weight | Number | 否 | 200000 | 重量 |
  196 +| &nbsp;&nbsp;&nbsp;&nbsp;volume | Number | 否 | 50 | 体积 |
  197 +| addService | OrderAddService[] | 否 | | 增值服务 |
  198 +| &nbsp;&nbsp;&nbsp;&nbsp;serviceType | String | 否 | | 服务类型 |
  199 +| &nbsp;&nbsp;&nbsp;&nbsp;serviceName | String | 是 | 包装服务 | 服务名称 |
  200 +| &nbsp;&nbsp;&nbsp;&nbsp;serviceDemand | String | 否 | 纸箱包装 | 服务要求 |
  201 +| tags | OrderTag[] | 否 | | 订单标签 |
  202 +| &nbsp;tagName | String | 是 | 易碎物品 | 标签名称 |
  203 +| vehicleDemands | OrderVehicleDemand[] | 否 | | 车辆需求 |
  204 +| &nbsp;demandVanType | String | 是 | MOTOR_VAN | 需求厢型:MOTOR_VAN/厢车,GAOLAN_VAN/高栏,SLAB_VAN/平板,REFRIGERATOR_CAR/冷藏,IVECO/依维柯,JINBEI/金杯,MINI_VAN/小面包,ELSE_VAN/其他 |
  205 +| &nbsp;&nbsp;demandSpecification | String | 是 | 9.6 | 需求车型:2.7/3.8/4.2/6.8/7.6/9.6/11/12.5/13.5/15/16.5/17.5/19/21 |
  206 +| &nbsp;demandNumber | Number | 否 | 1 | 为空则默认1 |
  207 +| &nbsp;vehicleDemand | String | 否 | 车辆需要带雨布 | 车辆要求描述 |
  208 +
  209 +##### 请求示例
  210 +
  211 +###### Java-sdk方式 [下载SDK](https://zeyi-tms-product.oss-cn-hangzhou.aliyuncs.com/file/jar/java-sdk/zy-java-sdk-1.0.0.jar)
  212 +
  213 +```java
  214 +public class Sample {
  215 + public static void main(String[] args_) {
  216 + String appKey = "appkey";
  217 + String appSecret = "appSecret";
  218 + String jsonData = "下单Body参数JSON数据";
  219 + ZYClient zyClient = new ZYClient(appKey, appSecret);
  220 + HttpResponseData httpResponseData =
  221 +zyClient.doPost(Constants.TEST_HOST + "/oms-service-api/order/add", "accessToken", jsonData);
  222 + if(httpResponseData == null) {
  223 + throw new BusinessException("则一请求失败,返回结果为空!");
  224 + }
  225 + if(httpResponseData.getStatus() == HttpURLConnection.HTTP_UNAUTHORIZED) {
  226 + //重新获取token再次请求
  227 + httpResponseData = zyClient.doPost(Constants.TEST_HOST +
  228 + "/oms-service-api/order/add", "accessToken", jsonData);
  229 + }
  230 + }
  231 +}
  232 +```
  233 +
  234 +##### 返回示例
  235 +
  236 +```json
  237 +{
  238 + "success": true,
  239 + "businessException": false,
  240 + "errorCode": null,
  241 + "message": null,
  242 + "result": {
  243 + "code": "则一订单号",
  244 + "customerOrderCode": "客户订单号"
  245 + }
  246 +}
  247 +```
  248 +
  249 +#### 确认中标
  250 +
  251 +##### 接口信息
  252 +
  253 +###### 请求方式:
  254 +
  255 +post
  256 +
  257 +###### 请求地址:
  258 +
  259 +* 生产:https://gw.shjiuze.cn/oms-service-api/order/confirmBid
  260 +* 测试:https://test.shjiuze.cn/oms-service-api/order/confirmBid
  261 +
  262 +###### Headers参数
  263 +
  264 +| 名称 | 类型 | 必填 | 示例值 | 描述 |
  265 +| ------------- | ------ | -------------------------- | -------------------------------- | ------------------------------------------------------------ |
  266 +| Authorization | String | 是&nbsp;&nbsp;&nbsp;&nbsp; | Bearer a2c5680001 | 调用服务端API的应用凭证accessToken,通过调用获取访问凭证接口获取。 |
  267 +| appKey | String | 是 | 0867ef5f23ef6483749e19e1692b | 则一提供 |
  268 +| timestamp | String | 是 | 1643251533306 | 当前时间戳毫秒值 |
  269 +| nonce | String | 是 | gdst9t | 6位小写字母数字组合随机串 |
  270 +| sign | String | 是 | fa3ed338d6dfe18e7273c8692234ee70 | 签名:appKey(则一提供) + appSecret(则一提供) + timestamp + nonce(6位随机码) + data(body参数)通过md5(32位小写)算法生成 |
  271 +
  272 +###### Body参数
  273 +
  274 +| 名称 | 类型 | 必填 | 示例值 | 描述 |
  275 +| ----------------- | ------ | -------------------------- | ------------ | ------------------------ |
  276 +| code | String | 是 | 220101000001 | 则一订单号 |
  277 +| customerOrderCode | String | 是&nbsp;&nbsp;&nbsp;&nbsp; | 220101000001 | 客户订单号,订单唯一标识 |
  278 +| confirmId | String | 是 | 220101000001 | 中标报价id |
  279 +| quotePrice | Number | 是 | 10000 | 中标价格 |
  280 +
  281 +##### 请求示例
  282 +
  283 +###### Java-sdk方式 [下载SDK](https://zeyi-tms-product.oss-cn-hangzhou.aliyuncs.com/file/jar/java-sdk/zy-java-sdk-1.0.0.jar)
  284 +
  285 +```java
  286 +public class Sample {
  287 + public static void main(String[] args_) {
  288 + String appKey = "appkey";
  289 + String appSecret = "appSecret";
  290 + String jsonData = "确认中标Body参数JSON数据";
  291 + ZYClient zyClient = new ZYClient(appKey, appSecret);
  292 + HttpResponseData httpResponseData =
  293 +zyClient.doPost(Constants.TEST_HOST + "/oms-service-api/order/confirmBid", "accessToken", jsonData);
  294 + if(httpResponseData == null) {
  295 + throw new BusinessException("则一请求失败,返回结果为空!");
  296 + }
  297 + if(httpResponseData.getStatus() == HttpURLConnection.HTTP_UNAUTHORIZED) {
  298 + //重新获取token再次请求
  299 + httpResponseData = zyClient.doPost(Constants.TEST_HOST +
  300 + "/oms-service-api/order/confirmBid", "accessToken", jsonData);
  301 + }
  302 + }
  303 +}
  304 +```
  305 +
  306 +##### 返回示例
  307 +
  308 +```json
  309 +{
  310 + "success": true,
  311 + "businessException": false,
  312 + "errorCode": null,
  313 + "message": null,
  314 + "result": {
  315 + "code": "则一订单号",
  316 + "customerOrderCode": "客户订单号",
  317 + "confirmId": "中标报价id",
  318 + "quotePrice": "中标价格"
  319 + }
  320 +}
  321 +```
  322 +
  323 +#### 确认运费接口
  324 +
  325 +##### 接口信息
  326 +
  327 +###### 概述
  328 +
  329 +调用该接口确认最终运费信息。
  330 +
  331 +###### 请求方式:
  332 +
  333 +post
  334 +
  335 +###### 请求地址:
  336 +
  337 +* 生产:https://gw.shjiuze.cn/oms-service-api/order/confirmFreight
  338 +* 测试:https://test.shjiuze.cn/oms-service-api/order/confirmFreight
  339 +
  340 +###### Headers参数
  341 +
  342 +| 名称 | 类型 | 必填 | 示例值 | 描述 |
  343 +| ------------- | ------ | ---- | -------------------------------- | ------------------------------------------------------------ |
  344 +| Authorization | String | 是 | Bearer a2c5680001 | 调用服务端API的应用凭证accessToken,通过调用获取访问凭证接口获取。 |
  345 +| appKey | String | 是 | 0867ef5f23ef6483749e19e1692b | 则一提供 |
  346 +| timestamp | String | 是 | 1643251533306 | 当前时间戳毫秒值 |
  347 +| nonce | String | 是 | gdst9t | 6位小写字母数字组合随机串 |
  348 +| sign | String | 是 | fa3ed338d6dfe18e7273c8692234ee70 | 签名:appKey(则一提供) + appSecret(则一提供) + timestamp + nonce(6位随机码) + data(body参数)通过md5(32位小写)算法生成 |
  349 +
  350 +###### Body参数
  351 +
  352 +| 名称 | 类型 | 必填 | 示例值 | 描述 |
  353 +| ----------------- | ------ | ---- | ------------ | ------------------------ |
  354 +| code | String | 是 | 220101000001 | 则一订单号 |
  355 +| customerOrderCode | String | 是 | 220101000001 | 客户订单号,订单唯一标识 |
  356 +| totalBasePrice | Number | 是 | 10000 | 基础运费合计 |
  357 +| totalExtraPrice | Number | 是 | 500 | 超里程运费合计 |
  358 +| totalPrice | Number | 是 | 10500 | 运费总额 |
  359 +| attachment | String | 否 | 图片url | 附件 |
  360 +| freightList | Array | 是 | | 运费信息 |
  361 +| waybillCode | String | 是 | Y20220101001 | 运单号 |
  362 +| specification | String | 是 | 9.6 | 车型 |
  363 +| vanType | String | 是 | MOTOR_VAN | 箱型 |
  364 +| number | Number | 否 | 1 | 数量 |
  365 +| volume | Number | 否 | 30.256 | 方数 |
  366 +| weight | Number | 否 | 80 | 吨位 |
  367 +| baseUnit | String | 是 | car/kg/m³ | 基础单位 |
  368 +| baseUnitPrice | Number | 是 | 100 | 基础单价 |
  369 +| basePrice | Number | 是 | 10000 | 基础运费 |
  370 +| extraUnit | String | 否 | car/kg/m³ | 超里程单位 |
  371 +| extraUnitPrice | Number | 否 | 100 | 超里程单价 |
  372 +| extraPrice | Number | 否 | 1000 | 超里程运费 |
  373 +
  374 +##### 请求示例
  375 +
  376 +###### Java-sdk方式 [下载SDK](https://zeyi-tms-product.oss-cn-hangzhou.aliyuncs.com/file/jar/java-sdk/zy-java-sdk-1.0.0.jar)
  377 +
  378 +```java
  379 +public class Sample {
  380 + public static void main(String[] args_) {
  381 + String appKey = "appkey";
  382 + String appSecret = "appSecret";
  383 + String jsonData = "确认运费Body参数JSON数据";
  384 + ZYClient zyClient = new ZYClient(appKey, appSecret);
  385 + HttpResponseData httpResponseData =
  386 +zyClient.doPost(Constants.TEST_HOST + "/oms-service-api/order/confirmFreight", "accessToken", jsonData);
  387 + if(httpResponseData == null) {
  388 + throw new BusinessException("则一请求失败,返回结果为空!");
  389 + }
  390 + if(httpResponseData.getStatus() == HttpURLConnection.HTTP_UNAUTHORIZED) {
  391 + //重新获取token再次请求
  392 + httpResponseData = zyClient.doPost(Constants.TEST_HOST +
  393 + "/oms-service-api/order/confirmFreight", "accessToken", jsonData);
  394 + }
  395 + }
  396 +}
  397 +```
  398 +
  399 +
  400 +
  401 +##### 返回示例
  402 +
  403 +```json
  404 +{
  405 + "success": true,
  406 + "businessException": false,
  407 + "errorCode": null,
  408 + "message": null,
  409 + "result": {
  410 + "code": "则一订单号",
  411 + "customerOrderCode": "客户订单号"
  412 + }
  413 +}
  414 +```
  415 +
  416 +
  417 +
  418 +#### 取消订单
  419 +
  420 +##### 接口信息
  421 +
  422 +###### 请求方式:
  423 +
  424 +post
  425 +
  426 +###### 请求地址:
  427 +
  428 +* 生产:https://gw.shjiuze.cn/oms-service-api/order/cancel
  429 +* 测试:https://test.shjiuze.cn/oms-service-api/order/cancel
  430 +
  431 +###### Headers参数
  432 +
  433 +| 名称 | 类型 | 必填 | 示例值 | 描述 |
  434 +| ------------- | ------ | -------------------------- | -------------------------------- | ------------------------------------------------------------ |
  435 +| Authorization | String | 是&nbsp;&nbsp;&nbsp;&nbsp; | Bearer a2c5680001 | 调用服务端API的应用凭证accessToken,通过调用获取访问凭证接口获取。 |
  436 +| appKey | String | 是 | 0867ef5f23ef6483749e19e1692b | 则一提供 |
  437 +| timestamp | String | 是 | 1643251533306 | 当前时间戳毫秒值 |
  438 +| nonce | String | 是 | gdst9t | 6位小写字母数字组合随机串 |
  439 +| sign | String | 是 | fa3ed338d6dfe18e7273c8692234ee70 | 签名:appKey(则一提供) + appSecret(则一提供) + timestamp + nonce(6位随机码) + data(body参数)通过md5(32位小写)算法生成 |
  440 +
  441 +###### Body参数
  442 +
  443 +| 名称 | 类型 | 必填 | 示例值 | 描述 |
  444 +| ----------------- | ------ | -------------------------- | ------------ | ------------------------ |
  445 +| code | String | 是 | 220101000001 | 则一订单号 |
  446 +| customerOrderCode | String | 是&nbsp;&nbsp;&nbsp;&nbsp; | 220101000001 | 客户订单号,订单唯一标识 |
  447 +| cancelRemark | String | 否 | 货量不足 | 取消原因 |
  448 +
  449 +##### 请求示例
  450 +
  451 +###### Java-sdk方式 [下载SDK](https://zeyi-tms-product.oss-cn-hangzhou.aliyuncs.com/file/jar/java-sdk/zy-java-sdk-1.0.0.jar)
  452 +
  453 +```java
  454 +public class Sample {
  455 + public static void main(String[] args_) {
  456 + String appKey = "appkey";
  457 + String appSecret = "appSecret";
  458 + String jsonData = "取消订单Body参数JSON数据";
  459 + ZYClient zyClient = new ZYClient(appKey, appSecret);
  460 + HttpResponseData httpResponseData =
  461 +zyClient.doPost(Constants.TEST_HOST + "/oms-service-api/order/cancel", "accessToken", jsonData);
  462 + if(httpResponseData == null) {
  463 + throw new BusinessException("则一请求失败,返回结果为空!");
  464 + }
  465 + if(httpResponseData.getStatus() == HttpURLConnection.HTTP_UNAUTHORIZED) {
  466 + //重新获取token再次请求
  467 + httpResponseData = zyClient.doPost(Constants.TEST_HOST +
  468 + "/oms-service-api/order/cancel", "accessToken", jsonData);
  469 + }
  470 + }
  471 +}
  472 +```
  473 +
  474 +##### 返回示例
  475 +
  476 +```json
  477 +{
  478 + "success": true,
  479 + "businessException": false,
  480 + "errorCode": null,
  481 + "message": null,
  482 + "result": {
  483 + "code": "则一订单号",
  484 + "customerOrderCode": "客户订单号"
  485 + }
  486 +}
  487 +```
  488 +
  489 +#### 查询车辆定位
  490 +
  491 +##### 接口信息
  492 +
  493 +###### 概述
  494 +
  495 +可以通过该接口查询车辆当前位置,该接口为收费接口。
  496 +
  497 +###### 请求方式:
  498 +
  499 +post
  500 +
  501 +###### 请求地址:
  502 +
  503 +* 生产:https://gw.shjiuze.cn/oms-service-api/vehicle/location
  504 +* 测试:https://test.shjiuze.cn/oms-service-api/vehicle/location
  505 +
  506 +###### Headers参数
  507 +
  508 +| 名称 | 类型 | 必填 | 示例值 | 描述 |
  509 +| ------------- | ------ | -------------------------- | -------------------------------- | ------------------------------------------------------------ |
  510 +| Authorization | String | 是&nbsp;&nbsp;&nbsp;&nbsp; | Bearer a2c5680001 | 调用服务端API的应用凭证accessToken,通过调用获取访问凭证接口获取。 |
  511 +| appKey | String | 是 | 0867ef5f23ef6483749e19e1692b | 则一提供 |
  512 +| timestamp | String | 是 | 1643251533306 | 当前时间戳毫秒值 |
  513 +| nonce | String | 是 | gdst9t | 6位小写字母数字组合随机串 |
  514 +| sign | String | 是 | fa3ed338d6dfe18e7273c8692234ee70 | 签名:appKey(则一提供) + appSecret(则一提供) + timestamp + nonce(6位随机码) + data(body参数)通过md5(32位小写)算法生成 |
  515 +
  516 +###### Body参数
  517 +
  518 +| 名称 | 类型 | 必填 | 示例值 | 描述 |
  519 +| ----------------- | ------ | ---- | ------------- | ------------------------ |
  520 +| code | String | 是 | D220101000001 | 则一订单号 |
  521 +| waybillCode | String | 是 | Y220101000001 | 则一运单号 |
  522 +| customerOrderCode | String | 是 | 220101000001 | 客户订单号,订单唯一标识 |
  523 +| licenseNumber | String | 是 | 沪DP2312 | 车牌号 |
  524 +
  525 +##### 请求示例
  526 +
  527 +###### Java-sdk方式 [下载SDK](https://zeyi-tms-product.oss-cn-hangzhou.aliyuncs.com/file/jar/java-sdk/zy-java-sdk-1.0.0.jar)
  528 +
  529 +```java
  530 +public class Sample {
  531 + public static void main(String[] args_) {
  532 + String appKey = "appkey";
  533 + String appSecret = "appSecret";
  534 + String jsonData = "车辆位置查询Body参数JSON数据";
  535 + ZYClient zyClient = new ZYClient(appKey, appSecret);
  536 + HttpResponseData httpResponseData =
  537 +zyClient.doPost(Constants.TEST_HOST + "/oms-service-api/vehicle/location", "accessToken", jsonData);
  538 + if(httpResponseData == null) {
  539 + throw new BusinessException("则一请求失败,返回结果为空!");
  540 + }
  541 + if(httpResponseData.getStatus() == HttpURLConnection.HTTP_UNAUTHORIZED) {
  542 + //重新获取token再次请求
  543 + httpResponseData = zyClient.doPost(Constants.TEST_HOST +
  544 + "/oms-service-api/vehicle/location", "accessToken", jsonData);
  545 + }
  546 + }
  547 +}
  548 +```
  549 +
  550 +##### 返回示例
  551 +
  552 +```json
  553 +{
  554 + "success":true,
  555 + "businessException":false,
  556 + "result":{
  557 + "lng":"106.1722328011559", //经度
  558 + "lat":"37.94834927106783", //纬度
  559 + "speed":0, //速度,km/h
  560 + "time":"2022-02-07 19:33:19", //定位时间
  561 + "address":"宁夏回族自治区吴忠市利通区清二沟,东方向,296.5米" //定位地点
  562 + }
  563 +}
  564 +```
  565 +
  566 +#### 查询车辆历史轨迹
  567 +
  568 +##### 接口信息
  569 +
  570 +###### 概述
  571 +
  572 +可以通过该接口查询车辆历史运行轨迹数据,该接口为收费接口。
  573 +
  574 +###### 请求方式:
  575 +
  576 +post
  577 +
  578 +###### 请求地址:
  579 +
  580 +* 生产:https://gw.shjiuze.cn/oms-service-api/vehicle/track
  581 +* 测试:https://test.shjiuze.cn/oms-service-api/vehicle/track
  582 +
  583 +###### Headers参数
  584 +
  585 +| 名称 | 类型 | 必填 | 示例值 | 描述 |
  586 +| ------------- | ------ | -------------------------- | -------------------------------- | ------------------------------------------------------------ |
  587 +| Authorization | String | 是&nbsp;&nbsp;&nbsp;&nbsp; | Bearer a2c5680001 | 调用服务端API的应用凭证accessToken,通过调用获取访问凭证接口获取。 |
  588 +| appKey | String | 是 | 0867ef5f23ef6483749e19e1692b | 则一提供 |
  589 +| timestamp | String | 是 | 1643251533306 | 当前时间戳毫秒值 |
  590 +| nonce | String | 是 | gdst9t | 6位小写字母数字组合随机串 |
  591 +| sign | String | 是 | fa3ed338d6dfe18e7273c8692234ee70 | 签名:appKey(则一提供) + appSecret(则一提供) + timestamp + nonce(6位随机码) + data(body参数)通过md5(32位小写)算法生成 |
  592 +
  593 +###### Body参数
  594 +
  595 +| 名称 | 类型 | 必填 | 示例值 | 描述 |
  596 +| ----------------- | ------ | ---- | ------------- | ------------------------ |
  597 +| code | String | 是 | D220101000001 | 则一订单号 |
  598 +| waybillCode | String | 是 | Y220101000001 | 则一运单号 |
  599 +| customerOrderCode | String | 是 | 220101000001 | 客户订单号,订单唯一标识 |
  600 +| licenseNumber | String | 是 | 沪DP2312 | 车牌号 |
  601 +| startTime | Number | 是 | 1643251533306 | 开始时间 |
  602 +| endTime | Number | 是 | 1643251533308 | 结束时间 |
  603 +
  604 +##### 请求示例
  605 +
  606 +###### Java-sdk方式 [下载SDK](https://zeyi-tms-product.oss-cn-hangzhou.aliyuncs.com/file/jar/java-sdk/zy-java-sdk-1.0.0.jar)
  607 +
  608 +```java
  609 +public class Sample {
  610 + public static void main(String[] args_) {
  611 + String appKey = "appkey";
  612 + String appSecret = "appSecret";
  613 + String jsonData = "车辆轨迹查询Body参数JSON数据";
  614 + ZYClient zyClient = new ZYClient(appKey, appSecret);
  615 + HttpResponseData httpResponseData =
  616 +zyClient.doPost(Constants.TEST_HOST + "/oms-service-api/vehicle/track", "accessToken", jsonData);
  617 + if(httpResponseData == null) {
  618 + throw new BusinessException("则一请求失败,返回结果为空!");
  619 + }
  620 + if(httpResponseData.getStatus() == HttpURLConnection.HTTP_UNAUTHORIZED) {
  621 + //重新获取token再次请求
  622 + httpResponseData = zyClient.doPost(Constants.TEST_HOST +
  623 + "/oms-service-api/vehicle/track", "accessToken", jsonData);
  624 + }
  625 + }
  626 +}
  627 +```
  628 +
  629 +##### 返回示例
  630 +
  631 +```json
  632 +{
  633 + "success":true,
  634 + "businessException":false,
  635 + "result":[
  636 + {
  637 + "lon":"116.6709722499687", //经度
  638 + "lat":"39.64092201495669", //纬度
  639 + "gtm":"2022-02-07 18:55:13", //gps时间
  640 + "spd":"249", //速度 除以10为km/h
  641 + "hgt":"4", //海拔m
  642 + "agl":"257" //正北方向夹角
  643 + },
  644 + {
  645 + "lon":"116.66919560752942",
  646 + "lat":"39.64070361333219",
  647 + "gtm":"2022-02-07 18:55:33",
  648 + "spd":"272",
  649 + "hgt":"6",
  650 + "agl":"260"
  651 + }
  652 + ]
  653 +}
  654 +```
  655 +
  656 +
  657 +
  658 +#### 查询订单操作记录
  659 +
  660 +##### 接口信息
  661 +
  662 +###### 概述
  663 +
  664 +可以通过该接口查询订单的操作记录。
  665 +
  666 +###### 请求方式:
  667 +
  668 +post
  669 +
  670 +###### 请求地址:
  671 +
  672 +* 生产:https://gw.shjiuze.cn/oms-service-api/order/getOperateList
  673 +* 测试:https://test.shjiuze.cn/oms-service-api/order/getOperateList
  674 +
  675 +###### Headers参数
  676 +
  677 +| 名称 | 类型 | 必填 | 示例值 | 描述 |
  678 +| ------------- | ------ | -------------------------- | -------------------------------- | ------------------------------------------------------------ |
  679 +| Authorization | String | 是&nbsp;&nbsp;&nbsp;&nbsp; | Bearer a2c5680001 | 调用服务端API的应用凭证accessToken,通过调用获取访问凭证接口获取。 |
  680 +| appKey | String | 是 | 0867ef5f23ef6483749e19e1692b | 则一提供 |
  681 +| timestamp | String | 是 | 1643251533306 | 当前时间戳毫秒值 |
  682 +| nonce | String | 是 | gdst9t | 6位小写字母数字组合随机串 |
  683 +| sign | String | 是 | fa3ed338d6dfe18e7273c8692234ee70 | 签名:appKey(则一提供) + appSecret(则一提供) + timestamp + nonce(6位随机码) + data(body参数)通过md5(32位小写)算法生成 |
  684 +
  685 +###### Body参数
  686 +
  687 +| 名称 | 类型 | 必填 | 示例值 | 描述 |
  688 +| ----------------- | ------ | ---- | ------------ | ------------------------ |
  689 +| code | String | 否 | 220101000001 | 则一订单号 |
  690 +| customerOrderCode | String | 是 | 220101000001 | 客户订单号,订单唯一标识 |
  691 +
  692 +##### 请求示例
  693 +
  694 +###### Java-sdk方式 [下载SDK](https://zeyi-tms-product.oss-cn-hangzhou.aliyuncs.com/file/jar/java-sdk/zy-java-sdk-1.0.0.jar)
  695 +
  696 +```java
  697 +public class Sample {
  698 + public static void main(String[] args_) {
  699 + String appKey = "appkey";
  700 + String appSecret = "appSecret";
  701 + String jsonData = "车辆轨迹查询Body参数JSON数据";
  702 + ZYClient zyClient = new ZYClient(appKey, appSecret);
  703 + HttpResponseData httpResponseData =
  704 +zyClient.doPost(Constants.TEST_HOST + "/oms-service-api/orderOperateRecord/getList", "accessToken", jsonData);
  705 + if(httpResponseData == null) {
  706 + throw new BusinessException("则一请求失败,返回结果为空!");
  707 + }
  708 + if(httpResponseData.getStatus() == HttpURLConnection.HTTP_UNAUTHORIZED) {
  709 + //重新获取token再次请求
  710 + httpResponseData = zyClient.doPost(Constants.TEST_HOST +
  711 + "/oms-service-api/orderOperateRecord/getList", "accessToken", jsonData);
  712 + }
  713 + }
  714 +}
  715 +```
  716 +
  717 +##### 返回示例
  718 +
  719 +```json
  720 +{
  721 + "success": true,
  722 + "businessException": false,
  723 + "errorCode": null,
  724 + "message": null,
  725 + "result": [
  726 + {
  727 + "orderCode": "220101000001",
  728 + "operateType": "ORDER_XXX",
  729 + "operateContent": "操作详情XXXX1",
  730 + "operateTime": "2022-02-10 18:23:30",
  731 + "operateUser": "张三"
  732 + },
  733 + {
  734 + "orderCode": "220101000001",
  735 + "operateType": "ORDER_XXX",
  736 + "operateContent": "操作详情XXXX2",
  737 + "operateTime": "2022-02-08 12:43:30",
  738 + "operateUser": "李四"
  739 + }
  740 + ]
  741 +}
  742 +```
  743 +
  744 +
  745 +
  746 +
  747 +
  748 +
  749 +
  750 +### 以下接口需要对接方提供
  751 +
  752 +#### 报价接口
  753 +
  754 +##### 接口信息
  755 +
  756 +###### 概述
  757 +
  758 +则一调用该接口进行报价,可以进行多次报价。
  759 +
  760 +###### 请求方式:
  761 +
  762 +post
  763 +
  764 +###### 请求路径:
  765 +
  766 +/quotePrice
  767 +
  768 +###### Body参数
  769 +
  770 +| 名称 | 类型 | 必填 | 示例值 | 描述 |
  771 +| ----------------- | ------ | -------------------------- | ------------- | ------------------------ |
  772 +| code | String | 是 | 220101000001 | 则一订单号 |
  773 +| customerOrderCode | String | 是&nbsp;&nbsp;&nbsp;&nbsp; | 220101000001 | 客户订单号,订单唯一标识 |
  774 +| quoteId | String | 是 | 1a2111bacd56 | 报价id,报价唯一标识 |
  775 +| quotePrice | Number | 是 | 10000 | 报价金额 |
  776 +| contactName | String | 否 | 张三 | 报价联系人 |
  777 +| contactMobile | String | 否 | 18801000000 | 报价联系电话 |
  778 +| quoteInvalidTime | Number | 否 | 1643251533306 | 报价有效期,时间戳毫秒值 |
  779 +| operateTime | Number | 是 | 1643251533306 | 操作时间戳 |
  780 +
  781 +###### 返回示例
  782 +
  783 +```json
  784 +{
  785 + "success": true,
  786 + "businessException": false,
  787 + "errorCode": null,
  788 + "message": null,
  789 + "result": {
  790 + "code": "则一订单号",
  791 + "customerOrderCode": "客户订单号"
  792 + }
  793 +}
  794 +```
  795 +
  796 +#### 报价接口V2
  797 +
  798 +##### 接口信息
  799 +
  800 +###### 概述
  801 +
  802 +则一调用该接口进行报价,可以进行多次报价。
  803 +
  804 +###### 请求方式:
  805 +
  806 +post
  807 +
  808 +###### 请求路径:
  809 +
  810 +/quotePrice
  811 +
  812 +###### Body参数
  813 +
  814 +| 名称 | 类型 | 必填 | 示例值 | 描述 |
  815 +| ----------------- | ------ | ---- | ------------- | ------------------------ |
  816 +| code | String | 是 | 220101000001 | 则一订单号 |
  817 +| customerOrderCode | String | 是 | 220101000001 | 客户订单号,订单唯一标识 |
  818 +| quoteId | String | 是 | 112242536364 | 报价id,报价唯一标识 |
  819 +| quoteInvalidTime | Number | 否 | 1643251533306 | 报价有效期,时间戳毫秒值 |
  820 +| contactName | String | 否 | 张三 | 报价联系人 |
  821 +| contactMobile | String | 否 | 18801733668 | 报价联系人电话 |
  822 +| operateTime | Number | 是 | 1643251533306 | 操作报价时间戳毫秒值 |
  823 +| attachment | String | 否 | 图片url | 附件 |
  824 +| freightList | Array | 是 | | 运费信息 |
  825 +| waybillCode | String | 是 | Y20220101001 | 运单号(子单号) |
  826 +| specification | String | 是 | 17.5 | 车型 |
  827 +| vanType | String | 是 | MOTOR_VAN | 箱型 |
  828 +| number | Number | 否 | 1 | 数量 |
  829 +| volume | Number | 否 | 30.256 | 方数 |
  830 +| weight | Number | 否 | 80 | 吨位 |
  831 +| baseUnit | String | 是 | car/kg/m³ | 基础单位 |
  832 +| baseUnitPrice | Number | 是 | 100 | 基础单价 |
  833 +| basePrice | Number | 否 | 10000 | 基础运费 |
  834 +| extraUnit | String | 否 | car/kg/m³ | 超里程单位 |
  835 +| extraUnitPrice | Number | 否 | 100 | 超里程单价 |
  836 +
  837 +###### 返回示例
  838 +
  839 +```json
  840 +{
  841 + "success": true,
  842 + "businessException": false,
  843 + "errorCode": null,
  844 + "message": null,
  845 + "result": {
  846 + "code": "则一订单号",
  847 + "customerOrderCode": "客户订单号"
  848 + }
  849 +}
  850 +```
  851 +
  852 +
  853 +
  854 +#### 接单接口
  855 +
  856 +##### 接口信息
  857 +
  858 +###### 概述
  859 +
  860 +则一调用该接口推送运单号及参考运费范围。
  861 +
  862 +###### 请求方式:
  863 +
  864 +post
  865 +
  866 +###### 请求路径:
  867 +
  868 +/receiveOrder
  869 +
  870 +###### Body参数
  871 +
  872 +| 名称 | 类型 | 必填 | 示例值 | 描述 |
  873 +| -------------------------------- | --------- | -------------------------- | ------------- | ------------------------ |
  874 +| code | String | 是 | 220101000001 | 则一订单号 |
  875 +| customerOrderCode | String | 是&nbsp;&nbsp;&nbsp;&nbsp; | 220101000001 | 客户订单号,订单唯一标识 |
  876 +| startTotalPrice | Number | 是&nbsp;&nbsp;&nbsp; | 18100 | 参考总金额起始值 |
  877 +| endTotalPrice | Number | 是&nbsp;&nbsp;&nbsp; | 21000 | 参考总金额结束值 |
  878 +| WaybillList | Waybill[] | 是 | | 运单集合 |
  879 +| &nbsp;&nbsp;&nbsp; waybillCode | String | 是 | Y220101000001 | 则一运单号 |
  880 +| &nbsp;&nbsp;&nbsp; startPrice | Number | 是 | 18100 | 参考金额起始值 |
  881 +| &nbsp;&nbsp;&nbsp; endPrice | Number | 是 | 21000 | 参考总金额结束值 |
  882 +| &nbsp;&nbsp;&nbsp; vanType | String | 是 | MOTOR_VAN | 厢型 |
  883 +| &nbsp;&nbsp;&nbsp; specification | String | 是 | 9.6 | 车型 |
  884 +
  885 +###### 返回示例
  886 +
  887 +```json
  888 +{
  889 + "success": true,
  890 + "businessException": false,
  891 + "errorCode": null,
  892 + "message": null,
  893 + "result": {
  894 + "code": "则一订单号",
  895 + "customerOrderCode": "客户订单号"
  896 + }
  897 +}
  898 +```
  899 +
  900 +
  901 +
  902 +
  903 +
  904 +#### 推送司机车辆信息
  905 +
  906 +##### 接口信息
  907 +
  908 +###### 概述
  909 +
  910 +则一调用该接口推送订单司机和车辆信息,可以进行多次推送,以操作时间戳最新一次推送的司机车辆信息为准。
  911 +
  912 +###### 请求方式:
  913 +
  914 +post
  915 +
  916 +###### 请求路径:
  917 +
  918 +/assignVehicle
  919 +
  920 +###### Body参数
  921 +
  922 +| 名称 | 类型 | 必填 | 示例值 | 描述 |
  923 +| -------------------- | ------ | -------------------------- | ------------- | ------------------------ |
  924 +| code | String | 是 | 220101000001 | 则一订单号 |
  925 +| waybillCode | String | 是&nbsp; | Y220101000001 | 则一运单号 |
  926 +| customerOrderCode | String | 是&nbsp;&nbsp;&nbsp;&nbsp; | 220101000001 | 客户订单号,订单唯一标识 |
  927 +| driverName | String | 是 | 张三 | 司机姓名 |
  928 +| driverMobile | String | 是 | 18801000000 | 司机手机号 |
  929 +| licenseNumber | String | 是 | 沪DP2312 | 车牌号 |
  930 +| trailerLicenseNumber | String | 否 | 陕K7C72挂 | 挂车车牌号 |
  931 +| operateTime | Number | 是 | 1643251533306 | 操作时间戳 |
  932 +| weight | Number | 否 | 200000 | 重量 |
  933 +| volume | Number | 否 | 16 | 体积 |
  934 +
  935 +###### 返回示例
  936 +
  937 +```json
  938 +{
  939 + "success": true,
  940 + "businessException": false,
  941 + "errorCode": null,
  942 + "message": null,
  943 + "result": {
  944 + "code": "则一订单号",
  945 + "customerOrderCode": "客户订单号"
  946 + }
  947 +}
  948 +```
  949 +
  950 +
  951 +
  952 +#### 推送发车信息
  953 +
  954 +##### 接口信息
  955 +
  956 +###### 概述
  957 +
  958 +则一调用该接口推送发车运输数据。
  959 +
  960 +###### 请求方式:
  961 +
  962 +post
  963 +
  964 +###### 请求路径:
  965 +
  966 +/departVehicle
  967 +
  968 +###### Body参数
  969 +
  970 +| 名称 | 类型 | 必填 | 示例值 | 描述 |
  971 +| ----------------- | ------ | -------------------------- | ------------- | ------------------------ |
  972 +| code | String | 是 | 220101000001 | 则一订单号 |
  973 +| waybillCode | String | 是&nbsp;&nbsp; | Y220101000001 | 则一运单号 |
  974 +| customerOrderCode | String | 是&nbsp;&nbsp;&nbsp;&nbsp; | 220101000001 | 客户订单号,订单唯一标识 |
  975 +| departTime | Number | 是 | 1643251533306 | 发车时间戳 |
  976 +| operateTime | Number | 是 | 1643251533306 | 操作时间戳 |
  977 +| weight | Number | 否 | 200000 | 重量 |
  978 +| volume | Number | 否 | 16 | 体积 |
  979 +
  980 +###### 返回示例
  981 +
  982 +```json
  983 +{
  984 + "success": true,
  985 + "businessException": false,
  986 + "errorCode": null,
  987 + "message": null,
  988 + "result": {
  989 + "code": "则一订单号",
  990 + "customerOrderCode": "客户订单号"
  991 + }
  992 +}
  993 +```
  994 +
  995 +#### 推送到车信息
  996 +
  997 +##### 接口信息
  998 +
  999 +###### 概述
  1000 +
  1001 +则一调用该接口推送到达数据。
  1002 +
  1003 +###### 请求方式:
  1004 +
  1005 +post
  1006 +
  1007 +###### 请求路径:
  1008 +
  1009 +/arriveVehicle
  1010 +
  1011 +###### Body参数
  1012 +
  1013 +| 名称 | 类型 | 必填 | 示例值 | 描述 |
  1014 +| ----------------- | ------ | -------------------------- | ------------- | ------------------------ |
  1015 +| code | String | 是 | 220101000001 | 则一订单号 |
  1016 +| waybillCode | String | 是&nbsp;&nbsp;&nbsp; | Y220101000001 | 则一运单号 |
  1017 +| customerOrderCode | String | 是&nbsp;&nbsp;&nbsp;&nbsp; | 220101000001 | 客户订单号,订单唯一标识 |
  1018 +| arriveTime | Number | 是 | 1643251533306 | 到车时间戳 |
  1019 +| operateTime | Number | 是 | 1643251533306 | 操作时间戳 |
  1020 +
  1021 +###### 返回示例
  1022 +
  1023 +```json
  1024 +{
  1025 + "success": true,
  1026 + "businessException": false,
  1027 + "errorCode": null,
  1028 + "message": null,
  1029 + "result": {
  1030 + "code": "则一订单号",
  1031 + "customerOrderCode": "客户订单号"
  1032 + }
  1033 +}
  1034 +```
  1035 +
  1036 +#### 推送运费信息
  1037 +
  1038 +##### 接口信息
  1039 +
  1040 +###### 概述
  1041 +
  1042 +则一调用该接口推送最终运费信息。
  1043 +
  1044 +###### 请求方式:
  1045 +
  1046 +post
  1047 +
  1048 +###### 请求路径:
  1049 +
  1050 +/receiveFreight
  1051 +
  1052 +###### Body参数
  1053 +
  1054 +| 名称 | 类型 | 必填 | 示例值 | 描述 |
  1055 +| -------------------------------------- | ------ | ---- | ------------ | ------------------------ |
  1056 +| code | String | 是 | 220101000001 | 则一订单号 |
  1057 +| customerOrderCode | String | 是 | 220101000001 | 客户订单号,订单唯一标识 |
  1058 +| totalBasePrice | Number | 是 | 10000 | 基础运费合计 |
  1059 +| totalExtraPrice | Number | 是 | 500 | 超里程运费合计 |
  1060 +| totalPrice | Number | 是 | 10500 | 运费总额 |
  1061 +| attachment | String | 否 | 图片url | 附件 |
  1062 +| freightList | Array | 是 | | 运费信息 |
  1063 +| &nbsp;&nbsp;&nbsp;&nbsp;waybillCode | String | 是 | Y20220101001 | 运单号 |
  1064 +| &nbsp;&nbsp;&nbsp;&nbsp;specification | String | 是 | 9.6 | 车型 |
  1065 +| &nbsp;&nbsp;&nbsp;&nbsp;vanType | String | 是 | MOTOR_VAN | 箱型 |
  1066 +| &nbsp;&nbsp;&nbsp;&nbsp;number | Number | 否 | 1 | 数量 |
  1067 +| &nbsp;&nbsp;&nbsp;&nbsp;volume | Number | 否 | 30.256 | 方数 |
  1068 +| &nbsp;&nbsp;&nbsp;&nbsp;weight | Number | 否 | 80 | 吨位 |
  1069 +| &nbsp;&nbsp;&nbsp;&nbsp;baseUnit | String | 是 | car/kg/m³ | 基础单位 |
  1070 +| &nbsp;&nbsp;&nbsp;&nbsp;baseUnitPrice | Number | 是 | 100 | 基础单价 |
  1071 +| &nbsp;&nbsp;&nbsp;&nbsp;basePrice | Number | 是 | 10000 | 基础运费 |
  1072 +| &nbsp;&nbsp;&nbsp;&nbsp;extraUnit | String | 否 | car/kg/m³ | 超里程单位 |
  1073 +| &nbsp;&nbsp;&nbsp;&nbsp;extraUnitPrice | Number | 否 | 100 | 超里程单价 |
  1074 +| &nbsp;&nbsp;&nbsp;&nbsp;extraPrice | Number | 否 | 1000 | 超里程运费 |
  1075 +
  1076 +###### 返回示例
  1077 +
  1078 +```json
  1079 +{
  1080 + "success": true,
  1081 + "businessException": false,
  1082 + "errorCode": null,
  1083 + "message": null,
  1084 + "result": {
  1085 + "code": "则一订单号",
  1086 + "customerOrderCode": "客户订单号"
  1087 + }
  1088 +}
  1089 +```
  1090 +
  1091 +
  1092 +
  1093 +### Java-sdk下载
  1094 +
  1095 +[zy-java-sdk](https://zeyi-tms-product.oss-cn-hangzhou.aliyuncs.com/file/jar/java-sdk/zy-java-sdk-1.0.0.jar)
  1096 +
  1097 +
  1098 +
  1099 +### 2022-03-09更新日志
  1100 +
  1101 +为了保证接口的通用性,本次涉及到改动的信息如下
  1102 +
  1103 +- [x] [下单](http://open-doc.shjiuze.cn/order.html#下单): 接口返回值移除子单集合,通过接单接口推送。
  1104 +- [x] [接单接口](http://open-doc.shjiuze.cn/order.html#接单接口):由推送参考价改为接单接口,推送运单集合及每个运单的参考价格。
  1105 +- [x] 对接接口中子单号subCode参数命名更改为运单号waybillCode。
  1106 +
  1107 +### 2023-02-22更新日志
  1108 +
  1109 +- [x] 增加报价接口V2版本
  1110 +- [x] 增加推送运费信息接口
  1111 +- [x] 增加确认运费接口
0 1112 \ No newline at end of file
... ...
order/order.md
... ... @@ -1,897 +0,0 @@
1   -
2   -
3   -### 则一订单对接API
4   -
5   -则一提供了不同规范的API,调用则一订单服务端API前,需了解开发前须知及调用流程。本文提供了调用则一订单服务端API示例,供开发者参考。
6   -
7   -#### 白名单
8   -
9   -则一服务端API接口访问有IP白名单限制,需要接口调用方提供调用API的服务器IP地址。
10   -
11   -#### 数据加签
12   -
13   -采用md5(32位小写)算法生成签名
14   -appKey(则一提供) + appSecret(则一提供) + timestamp(当前时间戳毫秒) + nonce(6位随机码大小写字母数子组合) + data(请求数据)
15   -
16   -#### 数据加密
17   -
18   -数据加密采用AES算法
19   -加密模式: CBC
20   -填充方式:PKCS5Padding
21   -偏移量:iv(则一提供)
22   -加密内容:appKey(则一提供) + timestamp(当前时间戳毫秒) + nonce(6位随机码大小写字母数子组合) + data(加密数据)
23   -密钥: appSecret(则一提供)
24   -输出:base64
25   -字符集:utf-8
26   -注:无敏感数据则无需加密
27   -
28   -#### 获取访问凭证
29   -
30   -##### 概述
31   -
32   -调用则一服务API时,都需要先获取对应权限类型的访问凭证accessToken。访问凭证(accessToken)是由则一权限系统颁发的,用来校验调用者的身份信息,确保调用者具有要执行的操作的权限。
33   -**说明**: 在使用accessToken时,请注意:
34   -
35   -* accessToken的有效期默认为30天,有效期内重复获取会返回相同结果,过期后获取会返回新的accessToken。
36   -* 开发者需要缓存accessToken,用于后续接口的调用。不能频繁调用获取accessToken接口,否则会受到频率拦截。
37   -* 当调用业务API时,如果返回状态码为401,则说明accessToken不正确或已过期,这时需要重新获取accessToken后再调用对应的API。
38   -
39   -##### 接口信息
40   -
41   -###### 请求方式:
42   -
43   -post
44   -
45   -###### 请求地址:
46   -
47   -* 生产:https://gw.shjiuze.cn/auth-service-api/login/password
48   -* 测试:https://test.shjiuze.cn/auth-service-api/login/password
49   -
50   -###### Body参数
51   -
52   -| 名称 | 类型 | 必填 | 示例值 | 描述 |
53   -| -------- | ------ | ---- | ----------- | ---------------- |
54   -| username | String | 是 | zhangsan | 用户名,则一提供 |
55   -| password | String | 是 | password123 | 密码,则一提供 |
56   -
57   -###### 返回参数
58   -
59   -| 名称 | 类型 | 示例值 | 描述 |
60   -| ------------------------------ | ---------- | -------------------------------- | -------------------------------------------------- |
61   -| success | boolean | true | 成功标识: true 成功,false 失败 |
62   -| businessException | boolean | false | 业务异常标识: true 业务异常,false 正常 |
63   -| errorCode | String | 200 | 错误码: 200 业务异常,500 系统异常, 空表示无错误 |
64   -| message | String | 订单号不能为空 | 错误信息,无错误则返回空 |
65   -| result | ZYTokenDto | | accessToken结果数据 |
66   -| &nbsp;&nbsp;&nbsp; accessToken | String | 000626f15b4b41bba6fe56216a5d2f73 | accessToken |
67   -| &nbsp;&nbsp;&nbsp; expiresIn | Integer | 2060 | 有效期限单位秒,accessToken在2060秒后过期 |
68   -| &nbsp;&nbsp;&nbsp; tokenType | String | bearer | token类型 |
69   -
70   -##### 请求示例
71   -
72   -###### Http方式
73   -
74   -```http
75   -POST /auth-service-api/login/password HTTP/1.1
76   -Host:test.shjiuze.cn
77   -Content-Type:application/json
78   -
79   -{
80   - "username" : "zeyi",
81   - "password" : "test1111"
82   -}
83   -```
84   -
85   -###### Java-sdk方式 [下载SDK](https://zeyi-tms-product.oss-cn-hangzhou.aliyuncs.com/file/jar/java-sdk/zy-java-sdk-1.0.0.jar)
86   -
87   -```java
88   -public class Sample {
89   - public static void main(String[] args_) {
90   - String appKey = "appkey";
91   - String appSecret = "appSecret";
92   - ZYClient zyClient = new ZYClient(appKey, appSecret);
93   - ZYTokenRequestDto zyTokenRequest = new ZYTokenRequestDto();
94   - zyTokenRequest.setUsername("zeyi");
95   - zyTokenRequest.setPassword("test1111");
96   - String body = gson.toJson(zyTokenRequest);
97   - HttpResponseData httpResponseData = zyClient.doPost(Constants.TEST_HOST + Constants.TOKEN_PATH, body);
98   - if(httpResponseData == null) {
99   - throw new TokenException("则一Token请求失败,返回为空!");
100   - }
101   - ZYResponse<ZYTokenDto> zyResponse = gson.fromJson(httpResponseData.getBody(), new TypeToken<ZYResponse<ZYTokenDto>>(){}.getType());
102   - if(!Boolean.TRUE.equals(zyResponse.isSuccess())) {
103   - throw new TokenException("则一Token请求返回失败!" + zyResponse.getMessage());
104   - }
105   - if(zyResponse.getResult() == null) {
106   - throw new TokenException("则一Token请求返回失败,返回结果为空!" + zyResponse.getMessage());
107   - }
108   - if(StringUtils.isBlank(zyResponse.getResult().getAccessToken())) {
109   - throw new TokenException("则一Token请求返回数据异常,AccessToken为空!" + zyResponse.getMessage());
110   - }
111   - // 结果 zyResponse.getResult();
112   - }
113   -}
114   -```
115   -
116   -##### 返回示例
117   -
118   -```json
119   -{
120   - "success": true,
121   - "businessException": false,
122   - "errorCode": null,
123   - "message": null,
124   - "result": {
125   - "accessToken": "64d7f367-609b-4f7d-a84d-a3d2a0b5ad85",
126   - "expiresIn": 602105,
127   - "tokenType": "bearer"
128   - }
129   -}
130   -```
131   -
132   -#### 下单
133   -
134   -##### 接口信息
135   -
136   -###### 请求方式:
137   -
138   -post
139   -
140   -###### 请求地址:
141   -
142   -* 生产:https://gw.shjiuze.cn/oms-service-api/order/add
143   -* 测试:https://test.shjiuze.cn/oms-service-api/order/add
144   -
145   -###### Headers参数
146   -
147   -| 名称 | 类型 | 必填 | 示例值 | 描述 |
148   -| ------------- | ------ | -------------------------- | -------------------------------- | ------------------------------------------------------------ |
149   -| Authorization | String | 是&nbsp;&nbsp;&nbsp;&nbsp; | Bearer a2c5680001 | 调用服务端API的应用凭证accessToken,通过调用获取访问凭证接口获取。 |
150   -| appKey | String | 是 | 0867ef5f23ef6483749e19e1692b | 则一提供 |
151   -| timestamp | String | 是 | 1643251533306 | 当前时间戳毫秒值 |
152   -| nonce | String | 是 | gdst9t | 6位小写字母数字组合随机串 |
153   -| sign | String | 是 | fa3ed338d6dfe18e7273c8692234ee70 | 签名:appKey(则一提供) + appSecret(则一提供) + timestamp + nonce(6位随机码) + data(body参数)通过md5(32位小写)算法生成 |
154   -
155   -###### Body参数
156   -
157   -| 名称 | 类型 | 必填 | 示例值 | 描述 |
158   -| ------------------------------------- | -------------------- | -------------------------- | ---------------- | ------------------------------------------------------------ |
159   -| customerOrderCode | String | 是&nbsp;&nbsp;&nbsp;&nbsp; | 220101000001 | 客户订单号,订单唯一标识 |
160   -| customerSn | String | 否 | 220101000001 | 客户委托单号 |
161   -| placeOrderTime | Number | 是 | 1643251533306 | 下单时间,时间戳毫秒值 |
162   -| loadTime | Number | 是 | 1643251533306 | 装货时间,时间戳毫秒值 |
163   -| expectArrivalTime | Number | 否 | 1643251533306 | 期望送达时间,时间戳毫秒值 |
164   -| receiptType | String | 否 | ELECTRON_TYPE | 回单类型:ELECTRON_TYPE/电子回单,PAPER_TYPE/纸质回单,NONE/无 |
165   -| receiptNumber | Number | 否 | 1 | 回单张数 |
166   -| receiptCode | String | 否 | A2022012602278 | 回单号 |
167   -| payType | String | 否 | PAY_IN_CASH | 付款方式:PAY_IN_CASH/现付,PAY_ON_DELIVERY/到付,PAY_ARREARS/欠付,PAY_MONTH/月结,PAY_BACK/回付,PAY_MULTIPLE/多笔付,PAY_FREE/免费 |
168   -| lineName | String | 否 | 上海-天津-北京 | 线路名称 |
169   -| remark | String | 否 | 需要雨布和尾板 | 订单备注 |
170   -| station | OrderStation[] | 是 | | 订单经停点 |
171   -| &nbsp;&nbsp;&nbsp; stationId | String | 否 | 123abc | 站点id |
172   -| &nbsp;&nbsp;&nbsp; stationName | String | 否 | 上海顺丰青浦站点 | 站点名称 |
173   -| &nbsp;&nbsp;&nbsp; provinceCode | String | 否 | 310000 | 省份编号 |
174   -| &nbsp;&nbsp;&nbsp; provinceName | String | 是 | 上海 | 省份名称 |
175   -| &nbsp;&nbsp;&nbsp; cityCode | String | 否 | 310100 | 城市编号 |
176   -| &nbsp;&nbsp;&nbsp; cityName | String | 是 | 上海市 | 城市名称 |
177   -| &nbsp;&nbsp;&nbsp; areaCode | String | 否 | 310118 | 区域编号 |
178   -| &nbsp;&nbsp;&nbsp; areaName | String | 是 | 青浦区 | 区域名称 |
179   -| &nbsp;&nbsp;&nbsp; address | String | 是 | 纪鹤公路1988号 | 详细地址 |
180   -| &nbsp;&nbsp;&nbsp; lat | String | 是 | 36.221825 | 纬度 |
181   -| &nbsp;&nbsp;&nbsp; lng | String | 是 | 120.632908 | 经度 |
182   -| &nbsp;&nbsp;&nbsp; contactName | String | 否 | 张三 | 联系人 |
183   -| &nbsp;&nbsp;&nbsp; contactMobile | String | 否 | 18801000001 | 联系人电话 |
184   -| &nbsp;&nbsp;&nbsp; loadFlag | String | 是 | true | 装货标识 |
185   -| &nbsp;&nbsp;&nbsp; unloadFlag | String | 是 | false | 卸货标识 |
186   -| &nbsp;&nbsp;&nbsp; expectArrivalTime | Number | 否 | 1643251533306 | 预计到达时间,时间戳毫秒值 |
187   -| &nbsp;&nbsp;&nbsp;expectDepartTime | Number | 否 | 1643251533306 | 预计发车时间,时间戳毫秒值 |
188   -| &nbsp;&nbsp;&nbsp; sort | Number | 否 | 1 | 经停点顺序,如果不传则默认按数组顺序 |
189   -| goods | OrderGoods[] | 否 | | 订单货物信息 |
190   -| &nbsp;&nbsp;&nbsp; barCode | String | 否 | 21616162626 | 商品条码 |
191   -| &nbsp; &nbsp;&nbsp;skuId | String | 否 | 1223233536436 | 商品sku_id |
192   -| &nbsp;&nbsp;&nbsp;&nbsp;name | String | 是 | 鞋子 | 货物名称 |
193   -| &nbsp;&nbsp;&nbsp;&nbsp;packageType | String | 否 | | 包装规格 |
194   -| &nbsp;&nbsp;&nbsp;&nbsp;piece | Number | 否 | 200 | 件数 |
195   -| &nbsp;&nbsp;&nbsp;&nbsp;weight | Number | 否 | 200000 | 重量 |
196   -| &nbsp;&nbsp;&nbsp;&nbsp;volume | Number | 否 | 50 | 体积 |
197   -| addService | OrderAddService[] | 否 | | 增值服务 |
198   -| &nbsp;&nbsp;&nbsp;&nbsp;serviceType | String | 否 | | 服务类型 |
199   -| &nbsp;&nbsp;&nbsp;&nbsp;serviceName | String | 是 | 包装服务 | 服务名称 |
200   -| &nbsp;&nbsp;&nbsp;&nbsp;serviceDemand | String | 否 | 纸箱包装 | 服务要求 |
201   -| tags | OrderTag[] | 否 | | 订单标签 |
202   -| &nbsp;tagName | String | 是 | 易碎物品 | 标签名称 |
203   -| vehicleDemands | OrderVehicleDemand[] | 否 | | 车辆需求 |
204   -| &nbsp;demandVanType | String | 是 | MOTOR_VAN | 需求厢型:MOTOR_VAN/厢车,GAOLAN_VAN/高栏,SLAB_VAN/平板,REFRIGERATOR_CAR/冷藏,IVECO/依维柯,JINBEI/金杯,MINI_VAN/小面包,ELSE_VAN/其他 |
205   -| &nbsp;&nbsp;demandSpecification | String | 是 | 9.6 | 需求车型:2.7/3.8/4.2/6.8/7.6/9.6/11/12.5/13.5/15/16.5/17.5/19/21 |
206   -| &nbsp;demandNumber | Number | 否 | 1 | 为空则默认1 |
207   -| &nbsp;vehicleDemand | String | 否 | 车辆需要带雨布 | 车辆要求描述 |
208   -
209   -##### 请求示例
210   -
211   -###### Java-sdk方式 [下载SDK](https://zeyi-tms-product.oss-cn-hangzhou.aliyuncs.com/file/jar/java-sdk/zy-java-sdk-1.0.0.jar)
212   -
213   -```java
214   -public class Sample {
215   - public static void main(String[] args_) {
216   - String appKey = "appkey";
217   - String appSecret = "appSecret";
218   - String jsonData = "下单Body参数JSON数据";
219   - ZYClient zyClient = new ZYClient(appKey, appSecret);
220   - HttpResponseData httpResponseData =
221   -zyClient.doPost(Constants.TEST_HOST + "/oms-service-api/order/add", "accessToken", jsonData);
222   - if(httpResponseData == null) {
223   - throw new BusinessException("则一请求失败,返回结果为空!");
224   - }
225   - if(httpResponseData.getStatus() == HttpURLConnection.HTTP_UNAUTHORIZED) {
226   - //重新获取token再次请求
227   - httpResponseData = zyClient.doPost(Constants.TEST_HOST +
228   - "/oms-service-api/order/add", "accessToken", jsonData);
229   - }
230   - }
231   -}
232   -```
233   -
234   -##### 返回示例
235   -
236   -```json
237   -{
238   - "success": true,
239   - "businessException": false,
240   - "errorCode": null,
241   - "message": null,
242   - "result": {
243   - "code": "则一订单号",
244   - "customerOrderCode": "客户订单号"
245   - }
246   -}
247   -```
248   -
249   -#### 确认中标
250   -
251   -##### 接口信息
252   -
253   -###### 请求方式:
254   -
255   -post
256   -
257   -###### 请求地址:
258   -
259   -* 生产:https://gw.shjiuze.cn/oms-service-api/order/confirmBid
260   -* 测试:https://test.shjiuze.cn/oms-service-api/order/confirmBid
261   -
262   -###### Headers参数
263   -
264   -| 名称 | 类型 | 必填 | 示例值 | 描述 |
265   -| ------------- | ------ | -------------------------- | -------------------------------- | ------------------------------------------------------------ |
266   -| Authorization | String | 是&nbsp;&nbsp;&nbsp;&nbsp; | Bearer a2c5680001 | 调用服务端API的应用凭证accessToken,通过调用获取访问凭证接口获取。 |
267   -| appKey | String | 是 | 0867ef5f23ef6483749e19e1692b | 则一提供 |
268   -| timestamp | String | 是 | 1643251533306 | 当前时间戳毫秒值 |
269   -| nonce | String | 是 | gdst9t | 6位小写字母数字组合随机串 |
270   -| sign | String | 是 | fa3ed338d6dfe18e7273c8692234ee70 | 签名:appKey(则一提供) + appSecret(则一提供) + timestamp + nonce(6位随机码) + data(body参数)通过md5(32位小写)算法生成 |
271   -
272   -###### Body参数
273   -
274   -| 名称 | 类型 | 必填 | 示例值 | 描述 |
275   -| ----------------- | ------ | -------------------------- | ------------ | ------------------------ |
276   -| code | String | 是 | 220101000001 | 则一订单号 |
277   -| customerOrderCode | String | 是&nbsp;&nbsp;&nbsp;&nbsp; | 220101000001 | 客户订单号,订单唯一标识 |
278   -| confirmId | String | 是 | 220101000001 | 中标报价id |
279   -| quotePrice | Number | 是 | 10000 | 中标价格 |
280   -
281   -##### 请求示例
282   -
283   -###### Java-sdk方式 [下载SDK](https://zeyi-tms-product.oss-cn-hangzhou.aliyuncs.com/file/jar/java-sdk/zy-java-sdk-1.0.0.jar)
284   -
285   -```java
286   -public class Sample {
287   - public static void main(String[] args_) {
288   - String appKey = "appkey";
289   - String appSecret = "appSecret";
290   - String jsonData = "确认中标Body参数JSON数据";
291   - ZYClient zyClient = new ZYClient(appKey, appSecret);
292   - HttpResponseData httpResponseData =
293   -zyClient.doPost(Constants.TEST_HOST + "/oms-service-api/order/confirmBid", "accessToken", jsonData);
294   - if(httpResponseData == null) {
295   - throw new BusinessException("则一请求失败,返回结果为空!");
296   - }
297   - if(httpResponseData.getStatus() == HttpURLConnection.HTTP_UNAUTHORIZED) {
298   - //重新获取token再次请求
299   - httpResponseData = zyClient.doPost(Constants.TEST_HOST +
300   - "/oms-service-api/order/confirmBid", "accessToken", jsonData);
301   - }
302   - }
303   -}
304   -```
305   -
306   -##### 返回示例
307   -
308   -```json
309   -{
310   - "success": true,
311   - "businessException": false,
312   - "errorCode": null,
313   - "message": null,
314   - "result": {
315   - "code": "则一订单号",
316   - "customerOrderCode": "客户订单号",
317   - "confirmId": "中标报价id",
318   - "quotePrice": "中标价格"
319   - }
320   -}
321   -```
322   -
323   -#### 取消订单
324   -
325   -##### 接口信息
326   -
327   -###### 请求方式:
328   -
329   -post
330   -
331   -###### 请求地址:
332   -
333   -* 生产:https://gw.shjiuze.cn/oms-service-api/order/cancel
334   -* 测试:https://test.shjiuze.cn/oms-service-api/order/cancel
335   -
336   -###### Headers参数
337   -
338   -| 名称 | 类型 | 必填 | 示例值 | 描述 |
339   -| ------------- | ------ | -------------------------- | -------------------------------- | ------------------------------------------------------------ |
340   -| Authorization | String | 是&nbsp;&nbsp;&nbsp;&nbsp; | Bearer a2c5680001 | 调用服务端API的应用凭证accessToken,通过调用获取访问凭证接口获取。 |
341   -| appKey | String | 是 | 0867ef5f23ef6483749e19e1692b | 则一提供 |
342   -| timestamp | String | 是 | 1643251533306 | 当前时间戳毫秒值 |
343   -| nonce | String | 是 | gdst9t | 6位小写字母数字组合随机串 |
344   -| sign | String | 是 | fa3ed338d6dfe18e7273c8692234ee70 | 签名:appKey(则一提供) + appSecret(则一提供) + timestamp + nonce(6位随机码) + data(body参数)通过md5(32位小写)算法生成 |
345   -
346   -###### Body参数
347   -
348   -| 名称 | 类型 | 必填 | 示例值 | 描述 |
349   -| ----------------- | ------ | -------------------------- | ------------ | ------------------------ |
350   -| code | String | 是 | 220101000001 | 则一订单号 |
351   -| customerOrderCode | String | 是&nbsp;&nbsp;&nbsp;&nbsp; | 220101000001 | 客户订单号,订单唯一标识 |
352   -| cancelRemark | String | 否 | 货量不足 | 取消原因 |
353   -
354   -##### 请求示例
355   -
356   -###### Java-sdk方式 [下载SDK](https://zeyi-tms-product.oss-cn-hangzhou.aliyuncs.com/file/jar/java-sdk/zy-java-sdk-1.0.0.jar)
357   -
358   -```java
359   -public class Sample {
360   - public static void main(String[] args_) {
361   - String appKey = "appkey";
362   - String appSecret = "appSecret";
363   - String jsonData = "取消订单Body参数JSON数据";
364   - ZYClient zyClient = new ZYClient(appKey, appSecret);
365   - HttpResponseData httpResponseData =
366   -zyClient.doPost(Constants.TEST_HOST + "/oms-service-api/order/cancel", "accessToken", jsonData);
367   - if(httpResponseData == null) {
368   - throw new BusinessException("则一请求失败,返回结果为空!");
369   - }
370   - if(httpResponseData.getStatus() == HttpURLConnection.HTTP_UNAUTHORIZED) {
371   - //重新获取token再次请求
372   - httpResponseData = zyClient.doPost(Constants.TEST_HOST +
373   - "/oms-service-api/order/cancel", "accessToken", jsonData);
374   - }
375   - }
376   -}
377   -```
378   -
379   -##### 返回示例
380   -
381   -```json
382   -{
383   - "success": true,
384   - "businessException": false,
385   - "errorCode": null,
386   - "message": null,
387   - "result": {
388   - "code": "则一订单号",
389   - "customerOrderCode": "客户订单号"
390   - }
391   -}
392   -```
393   -
394   -#### 查询车辆定位
395   -
396   -##### 接口信息
397   -
398   -###### 概述
399   -
400   -可以通过该接口查询车辆当前位置,该接口为收费接口。
401   -
402   -###### 请求方式:
403   -
404   -post
405   -
406   -###### 请求地址:
407   -
408   -* 生产:https://gw.shjiuze.cn/oms-service-api/vehicle/location
409   -* 测试:https://test.shjiuze.cn/oms-service-api/vehicle/location
410   -
411   -###### Headers参数
412   -
413   -| 名称 | 类型 | 必填 | 示例值 | 描述 |
414   -| ------------- | ------ | -------------------------- | -------------------------------- | ------------------------------------------------------------ |
415   -| Authorization | String | 是&nbsp;&nbsp;&nbsp;&nbsp; | Bearer a2c5680001 | 调用服务端API的应用凭证accessToken,通过调用获取访问凭证接口获取。 |
416   -| appKey | String | 是 | 0867ef5f23ef6483749e19e1692b | 则一提供 |
417   -| timestamp | String | 是 | 1643251533306 | 当前时间戳毫秒值 |
418   -| nonce | String | 是 | gdst9t | 6位小写字母数字组合随机串 |
419   -| sign | String | 是 | fa3ed338d6dfe18e7273c8692234ee70 | 签名:appKey(则一提供) + appSecret(则一提供) + timestamp + nonce(6位随机码) + data(body参数)通过md5(32位小写)算法生成 |
420   -
421   -###### Body参数
422   -
423   -| 名称 | 类型 | 必填 | 示例值 | 描述 |
424   -| ----------------- | ------ | ---- | ------------- | ------------------------ |
425   -| code | String | 是 | D220101000001 | 则一订单号 |
426   -| waybillCode | String | 是 | Y220101000001 | 则一运单号 |
427   -| customerOrderCode | String | 是 | 220101000001 | 客户订单号,订单唯一标识 |
428   -| licenseNumber | String | 是 | 沪DP2312 | 车牌号 |
429   -
430   -##### 请求示例
431   -
432   -###### Java-sdk方式 [下载SDK](https://zeyi-tms-product.oss-cn-hangzhou.aliyuncs.com/file/jar/java-sdk/zy-java-sdk-1.0.0.jar)
433   -
434   -```java
435   -public class Sample {
436   - public static void main(String[] args_) {
437   - String appKey = "appkey";
438   - String appSecret = "appSecret";
439   - String jsonData = "车辆位置查询Body参数JSON数据";
440   - ZYClient zyClient = new ZYClient(appKey, appSecret);
441   - HttpResponseData httpResponseData =
442   -zyClient.doPost(Constants.TEST_HOST + "/oms-service-api/vehicle/location", "accessToken", jsonData);
443   - if(httpResponseData == null) {
444   - throw new BusinessException("则一请求失败,返回结果为空!");
445   - }
446   - if(httpResponseData.getStatus() == HttpURLConnection.HTTP_UNAUTHORIZED) {
447   - //重新获取token再次请求
448   - httpResponseData = zyClient.doPost(Constants.TEST_HOST +
449   - "/oms-service-api/vehicle/location", "accessToken", jsonData);
450   - }
451   - }
452   -}
453   -```
454   -
455   -##### 返回示例
456   -
457   -```json
458   -{
459   - "success":true,
460   - "businessException":false,
461   - "result":{
462   - "lng":"106.1722328011559", //经度
463   - "lat":"37.94834927106783", //纬度
464   - "speed":0, //速度,km/h
465   - "time":"2022-02-07 19:33:19", //定位时间
466   - "address":"宁夏回族自治区吴忠市利通区清二沟,东方向,296.5米" //定位地点
467   - }
468   -}
469   -```
470   -
471   -#### 查询车辆历史轨迹
472   -
473   -##### 接口信息
474   -
475   -###### 概述
476   -
477   -可以通过该接口查询车辆历史运行轨迹数据,该接口为收费接口。
478   -
479   -###### 请求方式:
480   -
481   -post
482   -
483   -###### 请求地址:
484   -
485   -* 生产:https://gw.shjiuze.cn/oms-service-api/vehicle/track
486   -* 测试:https://test.shjiuze.cn/oms-service-api/vehicle/track
487   -
488   -###### Headers参数
489   -
490   -| 名称 | 类型 | 必填 | 示例值 | 描述 |
491   -| ------------- | ------ | -------------------------- | -------------------------------- | ------------------------------------------------------------ |
492   -| Authorization | String | 是&nbsp;&nbsp;&nbsp;&nbsp; | Bearer a2c5680001 | 调用服务端API的应用凭证accessToken,通过调用获取访问凭证接口获取。 |
493   -| appKey | String | 是 | 0867ef5f23ef6483749e19e1692b | 则一提供 |
494   -| timestamp | String | 是 | 1643251533306 | 当前时间戳毫秒值 |
495   -| nonce | String | 是 | gdst9t | 6位小写字母数字组合随机串 |
496   -| sign | String | 是 | fa3ed338d6dfe18e7273c8692234ee70 | 签名:appKey(则一提供) + appSecret(则一提供) + timestamp + nonce(6位随机码) + data(body参数)通过md5(32位小写)算法生成 |
497   -
498   -###### Body参数
499   -
500   -| 名称 | 类型 | 必填 | 示例值 | 描述 |
501   -| ----------------- | ------ | ---- | ------------- | ------------------------ |
502   -| code | String | 是 | D220101000001 | 则一订单号 |
503   -| waybillCode | String | 是 | Y220101000001 | 则一运单号 |
504   -| customerOrderCode | String | 是 | 220101000001 | 客户订单号,订单唯一标识 |
505   -| licenseNumber | String | 是 | 沪DP2312 | 车牌号 |
506   -| startTime | Number | 是 | 1643251533306 | 开始时间 |
507   -| endTime | Number | 是 | 1643251533308 | 结束时间 |
508   -
509   -##### 请求示例
510   -
511   -###### Java-sdk方式 [下载SDK](https://zeyi-tms-product.oss-cn-hangzhou.aliyuncs.com/file/jar/java-sdk/zy-java-sdk-1.0.0.jar)
512   -
513   -```java
514   -public class Sample {
515   - public static void main(String[] args_) {
516   - String appKey = "appkey";
517   - String appSecret = "appSecret";
518   - String jsonData = "车辆轨迹查询Body参数JSON数据";
519   - ZYClient zyClient = new ZYClient(appKey, appSecret);
520   - HttpResponseData httpResponseData =
521   -zyClient.doPost(Constants.TEST_HOST + "/oms-service-api/vehicle/track", "accessToken", jsonData);
522   - if(httpResponseData == null) {
523   - throw new BusinessException("则一请求失败,返回结果为空!");
524   - }
525   - if(httpResponseData.getStatus() == HttpURLConnection.HTTP_UNAUTHORIZED) {
526   - //重新获取token再次请求
527   - httpResponseData = zyClient.doPost(Constants.TEST_HOST +
528   - "/oms-service-api/vehicle/track", "accessToken", jsonData);
529   - }
530   - }
531   -}
532   -```
533   -
534   -##### 返回示例
535   -
536   -```json
537   -{
538   - "success":true,
539   - "businessException":false,
540   - "result":[
541   - {
542   - "lon":"116.6709722499687", //经度
543   - "lat":"39.64092201495669", //纬度
544   - "gtm":"2022-02-07 18:55:13", //gps时间
545   - "spd":"249", //速度 除以10为km/h
546   - "hgt":"4", //海拔m
547   - "agl":"257" //正北方向夹角
548   - },
549   - {
550   - "lon":"116.66919560752942",
551   - "lat":"39.64070361333219",
552   - "gtm":"2022-02-07 18:55:33",
553   - "spd":"272",
554   - "hgt":"6",
555   - "agl":"260"
556   - }
557   - ]
558   -}
559   -```
560   -
561   -
562   -
563   -#### 查询订单操作记录
564   -
565   -##### 接口信息
566   -
567   -###### 概述
568   -
569   -可以通过该接口查询订单的操作记录。
570   -
571   -###### 请求方式:
572   -
573   -post
574   -
575   -###### 请求地址:
576   -
577   -* 生产:https://gw.shjiuze.cn/oms-service-api/order/getOperateList
578   -* 测试:https://test.shjiuze.cn/oms-service-api/order/getOperateList
579   -
580   -###### Headers参数
581   -
582   -| 名称 | 类型 | 必填 | 示例值 | 描述 |
583   -| ------------- | ------ | -------------------------- | -------------------------------- | ------------------------------------------------------------ |
584   -| Authorization | String | 是&nbsp;&nbsp;&nbsp;&nbsp; | Bearer a2c5680001 | 调用服务端API的应用凭证accessToken,通过调用获取访问凭证接口获取。 |
585   -| appKey | String | 是 | 0867ef5f23ef6483749e19e1692b | 则一提供 |
586   -| timestamp | String | 是 | 1643251533306 | 当前时间戳毫秒值 |
587   -| nonce | String | 是 | gdst9t | 6位小写字母数字组合随机串 |
588   -| sign | String | 是 | fa3ed338d6dfe18e7273c8692234ee70 | 签名:appKey(则一提供) + appSecret(则一提供) + timestamp + nonce(6位随机码) + data(body参数)通过md5(32位小写)算法生成 |
589   -
590   -###### Body参数
591   -
592   -| 名称 | 类型 | 必填 | 示例值 | 描述 |
593   -| ----------------- | ------ | ---- | ------------ | ------------------------ |
594   -| code | String | 否 | 220101000001 | 则一订单号 |
595   -| customerOrderCode | String | 是 | 220101000001 | 客户订单号,订单唯一标识 |
596   -
597   -##### 请求示例
598   -
599   -###### Java-sdk方式 [下载SDK](https://zeyi-tms-product.oss-cn-hangzhou.aliyuncs.com/file/jar/java-sdk/zy-java-sdk-1.0.0.jar)
600   -
601   -```java
602   -public class Sample {
603   - public static void main(String[] args_) {
604   - String appKey = "appkey";
605   - String appSecret = "appSecret";
606   - String jsonData = "车辆轨迹查询Body参数JSON数据";
607   - ZYClient zyClient = new ZYClient(appKey, appSecret);
608   - HttpResponseData httpResponseData =
609   -zyClient.doPost(Constants.TEST_HOST + "/oms-service-api/orderOperateRecord/getList", "accessToken", jsonData);
610   - if(httpResponseData == null) {
611   - throw new BusinessException("则一请求失败,返回结果为空!");
612   - }
613   - if(httpResponseData.getStatus() == HttpURLConnection.HTTP_UNAUTHORIZED) {
614   - //重新获取token再次请求
615   - httpResponseData = zyClient.doPost(Constants.TEST_HOST +
616   - "/oms-service-api/orderOperateRecord/getList", "accessToken", jsonData);
617   - }
618   - }
619   -}
620   -```
621   -
622   -##### 返回示例
623   -
624   -```json
625   -{
626   - "success": true,
627   - "businessException": false,
628   - "errorCode": null,
629   - "message": null,
630   - "result": [
631   - {
632   - "orderCode": "220101000001",
633   - "operateType": "ORDER_XXX",
634   - "operateContent": "操作详情XXXX1",
635   - "operateTime": "2022-02-10 18:23:30",
636   - "operateUser": "张三"
637   - },
638   - {
639   - "orderCode": "220101000001",
640   - "operateType": "ORDER_XXX",
641   - "operateContent": "操作详情XXXX2",
642   - "operateTime": "2022-02-08 12:43:30",
643   - "operateUser": "李四"
644   - }
645   - ]
646   -}
647   -```
648   -
649   -
650   -
651   -
652   -
653   -
654   -
655   -### 以下接口需要对接方提供
656   -
657   -#### 报价接口
658   -
659   -##### 接口信息
660   -
661   -###### 概述
662   -
663   -则一调用该接口进行报价,可以进行多次报价。
664   -
665   -###### 请求方式:
666   -
667   -post
668   -
669   -###### 请求路径:
670   -
671   -/quotePrice
672   -
673   -###### Body参数
674   -
675   -| 名称 | 类型 | 必填 | 示例值 | 描述 |
676   -| ----------------- | ------ | -------------------------- | ------------- | ------------------------ |
677   -| code | String | 是 | 220101000001 | 则一订单号 |
678   -| customerOrderCode | String | 是&nbsp;&nbsp;&nbsp;&nbsp; | 220101000001 | 客户订单号,订单唯一标识 |
679   -| quoteId | String | 是 | 1a2111bacd56 | 报价id,报价唯一标识 |
680   -| quotePrice | Number | 是 | 10000 | 报价金额 |
681   -| contactName | String | 否 | 张三 | 报价联系人 |
682   -| contactMobile | String | 否 | 18801000000 | 报价联系电话 |
683   -| quoteInvalidTime | Number | 否 | 1643251533306 | 报价有效期,时间戳毫秒值 |
684   -| operateTime | Number | 是 | 1643251533306 | 操作时间戳 |
685   -
686   -###### 返回示例
687   -
688   -```json
689   -{
690   - "success": true,
691   - "businessException": false,
692   - "errorCode": null,
693   - "message": null,
694   - "result": {
695   - "code": "则一订单号",
696   - "customerOrderCode": "客户订单号"
697   - }
698   -}
699   -```
700   -
701   -
702   -
703   -#### 接单接口
704   -
705   -##### 接口信息
706   -
707   -###### 概述
708   -
709   -则一调用该接口推送运单号及参考运费范围。
710   -
711   -###### 请求方式:
712   -
713   -post
714   -
715   -###### 请求路径:
716   -
717   -/receiveOrder
718   -
719   -###### Body参数
720   -
721   -| 名称 | 类型 | 必填 | 示例值 | 描述 |
722   -| -------------------------------- | --------- | -------------------------- | ------------- | ------------------------ |
723   -| code | String | 是 | 220101000001 | 则一订单号 |
724   -| customerOrderCode | String | 是&nbsp;&nbsp;&nbsp;&nbsp; | 220101000001 | 客户订单号,订单唯一标识 |
725   -| startTotalPrice | Number | 是&nbsp;&nbsp;&nbsp; | 18100 | 参考总金额起始值 |
726   -| endTotalPrice | Number | 是&nbsp;&nbsp;&nbsp; | 21000 | 参考总金额结束值 |
727   -| WaybillList | Waybill[] | 是 | | 运单集合 |
728   -| &nbsp;&nbsp;&nbsp; waybillCode | String | 是 | Y220101000001 | 则一运单号 |
729   -| &nbsp;&nbsp;&nbsp; startPrice | Number | 是 | 18100 | 参考金额起始值 |
730   -| &nbsp;&nbsp;&nbsp; endPrice | Number | 是 | 21000 | 参考总金额结束值 |
731   -| &nbsp;&nbsp;&nbsp; vanType | String | 是 | MOTOR_VAN | 厢型 |
732   -| &nbsp;&nbsp;&nbsp; specification | String | 是 | 9.6 | 车型 |
733   -
734   -###### 返回示例
735   -
736   -```json
737   -{
738   - "success": true,
739   - "businessException": false,
740   - "errorCode": null,
741   - "message": null,
742   - "result": {
743   - "code": "则一订单号",
744   - "customerOrderCode": "客户订单号"
745   - }
746   -}
747   -```
748   -
749   -
750   -
751   -
752   -
753   -#### 推送司机车辆信息
754   -
755   -##### 接口信息
756   -
757   -###### 概述
758   -
759   -则一调用该接口推送订单司机和车辆信息,可以进行多次推送,以操作时间戳最新一次推送的司机车辆信息为准。
760   -
761   -###### 请求方式:
762   -
763   -post
764   -
765   -###### 请求路径:
766   -
767   -/assignVehicle
768   -
769   -###### Body参数
770   -
771   -| 名称 | 类型 | 必填 | 示例值 | 描述 |
772   -| -------------------- | ------ | -------------------------- | ------------- | ------------------------ |
773   -| code | String | 是 | 220101000001 | 则一订单号 |
774   -| waybillCode | String | 是&nbsp; | Y220101000001 | 则一运单号 |
775   -| customerOrderCode | String | 是&nbsp;&nbsp;&nbsp;&nbsp; | 220101000001 | 客户订单号,订单唯一标识 |
776   -| driverName | String | 是 | 张三 | 司机姓名 |
777   -| driverMobile | String | 是 | 18801000000 | 司机手机号 |
778   -| licenseNumber | String | 是 | 沪DP2312 | 车牌号 |
779   -| trailerLicenseNumber | String | 否 | 陕K7C72挂 | 挂车车牌号 |
780   -| operateTime | Number | 是 | 1643251533306 | 操作时间戳 |
781   -| weight | Number | 否 | 200000 | 重量 |
782   -| volume | Number | 否 | 16 | 体积 |
783   -
784   -###### 返回示例
785   -
786   -```json
787   -{
788   - "success": true,
789   - "businessException": false,
790   - "errorCode": null,
791   - "message": null,
792   - "result": {
793   - "code": "则一订单号",
794   - "customerOrderCode": "客户订单号"
795   - }
796   -}
797   -```
798   -
799   -
800   -
801   -#### 推送发车信息
802   -
803   -##### 接口信息
804   -
805   -###### 概述
806   -
807   -则一调用该接口推送发车运输数据。
808   -
809   -###### 请求方式:
810   -
811   -post
812   -
813   -###### 请求路径:
814   -
815   -/departVehicle
816   -
817   -###### Body参数
818   -
819   -| 名称 | 类型 | 必填 | 示例值 | 描述 |
820   -| ----------------- | ------ | -------------------------- | ------------- | ------------------------ |
821   -| code | String | 是 | 220101000001 | 则一订单号 |
822   -| waybillCode | String | 是&nbsp;&nbsp; | Y220101000001 | 则一运单号 |
823   -| customerOrderCode | String | 是&nbsp;&nbsp;&nbsp;&nbsp; | 220101000001 | 客户订单号,订单唯一标识 |
824   -| departTime | Number | 是 | 1643251533306 | 发车时间戳 |
825   -| operateTime | Number | 是 | 1643251533306 | 操作时间戳 |
826   -| weight | Number | 否 | 200000 | 重量 |
827   -| volume | Number | 否 | 16 | 体积 |
828   -
829   -###### 返回示例
830   -
831   -```json
832   -{
833   - "success": true,
834   - "businessException": false,
835   - "errorCode": null,
836   - "message": null,
837   - "result": {
838   - "code": "则一订单号",
839   - "customerOrderCode": "客户订单号"
840   - }
841   -}
842   -```
843   -
844   -#### 推送到车信息
845   -
846   -##### 接口信息
847   -
848   -###### 概述
849   -
850   -则一调用该接口推送到达数据。
851   -
852   -###### 请求方式:
853   -
854   -post
855   -
856   -###### 请求路径:
857   -
858   -/arriveVehicle
859   -
860   -###### Body参数
861   -
862   -| 名称 | 类型 | 必填 | 示例值 | 描述 |
863   -| ----------------- | ------ | -------------------------- | ------------- | ------------------------ |
864   -| code | String | 是 | 220101000001 | 则一订单号 |
865   -| waybillCode | String | 是&nbsp;&nbsp;&nbsp; | Y220101000001 | 则一运单号 |
866   -| customerOrderCode | String | 是&nbsp;&nbsp;&nbsp;&nbsp; | 220101000001 | 客户订单号,订单唯一标识 |
867   -| arriveTime | Number | 是 | 1643251533306 | 到车时间戳 |
868   -| operateTime | Number | 是 | 1643251533306 | 操作时间戳 |
869   -
870   -###### 返回示例
871   -
872   -```json
873   -{
874   - "success": true,
875   - "businessException": false,
876   - "errorCode": null,
877   - "message": null,
878   - "result": {
879   - "code": "则一订单号",
880   - "customerOrderCode": "客户订单号"
881   - }
882   -}
883   -```
884   -
885   -### Java-sdk下载
886   -
887   -[zy-java-sdk](https://zeyi-tms-product.oss-cn-hangzhou.aliyuncs.com/file/jar/java-sdk/zy-java-sdk-1.0.0.jar)
888   -
889   -
890   -
891   -### 2022-03-09更新日志
892   -
893   -为了保证接口的通用性,本次涉及到改动的信息如下
894   -
895   -1. [下单](http://open-doc.shjiuze.cn/order.html#下单): 接口返回值移除子单集合,通过接单接口推送。
896   -2. [接单接口](http://open-doc.shjiuze.cn/order.html#接单接口):由推送参考价改为接单接口,推送运单集合及每个运单的参考价格。
897   -3. 对接接口中子单号subCode参数命名更改为运单号waybillCode。
898 0 \ No newline at end of file