# 重新下单

[调试诊断](https://developers.weixin.qq.com/console/devtools/debug?utm_source=api_tools)

> 接口应在服务器端调用，不可在前端（小程序、网页、APP等）直接调用，具体可参考[接口调用指南](/doc/oplatform/developers/dev/guide.md)。

接口英文名：reOrder

- 在调用下配送单接口、订单被取消、过期或者投递异常的情况下，可调用此接口，重新下单，需要保持orderid一致。 
- 备注：美团不支持重新下单接口，如果订单被取消商家需要重新下单，请修改orderid之后，调用下配送单接口下单。

## 1. 调用方式

### HTTPS 调用

```bash
POST https://api.weixin.qq.com/cgi-bin/express/local/business/order/readd?access_token=ACCESS_TOKEN
```

### 云调用

- 本接口不支持云调用。

### 第三方调用

- 本接口支持第三方平台代商家调用。

- 该接口所属的权限集 id 为：51、71

- 服务商获得其中之一权限集授权后，可通过使用 [authorizer_access_token](/doc/oplatform/developers/dev/AuthorizerAccessToken.md) 代商家进行调用，具体可查看 [第三方调用](/doc/oplatform/Third-party_Platforms/2.0/Before_Develop/call_interface.md) 说明文档。

## 2. 请求参数

### 查询参数 `Query String Parameters`

```json
[
  {
    "参数名": "access_token",
    "类型": "string",
    "必填": "是",
    "说明": "接口调用凭证，可使用 [access_token](/miniprogram/dev/server/API/mp-access-token/api_getaccesstoken)、[authorizer_access_token](/doc/oplatform/openApi/ticket-token/api_getauthorizeraccesstoken.md)"
  }
]
```

### 请求体 `Request Payload`

```json
[
  {
    "参数名": "shopid",
    "类型": "string",
    "必填": "是",
    "说明": "商家id，由配送公司分配的appkey"
  },
  {
    "参数名": "shop_order_id",
    "类型": "string",
    "必填": "是",
    "说明": "唯一标识订单的 ID，由商户生成, 不超过128字节"
  },
  {
    "参数名": "delivery_id",
    "类型": "string",
    "必填": "是",
    "说明": "配送公司ID"
  },
  {
    "参数名": "openid",
    "类型": "string",
    "必填": "是",
    "说明": "下单用户的openid"
  },
  {
    "参数名": "sender",
    "类型": "object",
    "必填": "是",
    "说明": "发件人信息，顺丰同城急送必须填写，美团配送、达达、闪送，若传了shop_no的值可不填该字段"
  },
  {
    "参数名": "receiver",
    "类型": "object",
    "必填": "是",
    "说明": "收件人信息"
  },
  {
    "参数名": "cargo",
    "类型": "object",
    "必填": "是",
    "说明": "货物信息"
  },
  {
    "参数名": "order_info",
    "类型": "object",
    "必填": "是",
    "说明": "订单信息"
  },
  {
    "参数名": "shop",
    "类型": "object",
    "必填": "是",
    "说明": "商品信息，会展示到物流通知消息中"
  },
  {
    "参数名": "delivery_token",
    "类型": "string",
    "必填": "是",
    "说明": "预下单接口返回的参数，配送公司可保证在一段时间内运费不变"
  },
  {
    "参数名": "delivery_sign",
    "类型": "string",
    "必填": "是",
    "说明": "用配送公司提供的appSecret加密的校验串说明"
  },
  {
    "参数名": "shop_no",
    "类型": "string",
    "必填": "是",
    "说明": "商家门店编号，在配送公司登记，如果只有一个门店，美团闪送必填, 值为店铺id"
  },
  {
    "参数名": "sub_biz_id",
    "类型": "string",
    "必填": "否",
    "说明": "子商户id，区分小程序内部多个子商户"
  }
]
```

### Body.sender `Object Payload`

发件人信息，顺丰同城急送必须填写，美团配送、达达、闪送，若传了shop_no的值可不填该字段

```json
[
  {
    "参数名": "name",
    "类型": "string",
    "必填": "是",
    "说明": "姓名，最长不超过256个字符"
  },
  {
    "参数名": "city",
    "类型": "string",
    "必填": "是",
    "说明": "城市名称，如广州市"
  },
  {
    "参数名": "address",
    "类型": "string",
    "必填": "是",
    "说明": "地址(街道、小区、大厦等，用于定位)"
  },
  {
    "参数名": "address_detail",
    "类型": "string",
    "必填": "是",
    "说明": "地址详情(楼号、单元号、层号)"
  },
  {
    "参数名": "phone",
    "类型": "string",
    "必填": "是",
    "说明": "电话/手机号，最长不超过64个字符"
  },
  {
    "参数名": "lng",
    "类型": "number",
    "必填": "是",
    "说明": "经度（火星坐标或百度坐标，和 coordinate_type 字段配合使用，确到小数点后6位"
  },
  {
    "参数名": "lat",
    "类型": "number",
    "必填": "是",
    "说明": "纬度（火星坐标或百度坐标，和 coordinate_type 字段配合使用，精确到小数点后6位）"
  },
  {
    "参数名": "coordinate_type",
    "类型": "number",
    "必填": "否",
    "说明": "坐标类型，0：火星坐标（高德，腾讯地图均采用火星坐标） 1：百度坐标"
  }
]
```

### Body.receiver `Object Payload`

收件人信息

```json
[
  {
    "参数名": "name",
    "类型": "string",
    "必填": "是",
    "说明": "姓名，最长不超过256个字符"
  },
  {
    "参数名": "city",
    "类型": "string",
    "必填": "是",
    "说明": "城市名称，如广州市"
  },
  {
    "参数名": "address",
    "类型": "string",
    "必填": "是",
    "说明": "地址(街道、小区、大厦等，用于定位)"
  },
  {
    "参数名": "address_detail",
    "类型": "string",
    "必填": "是",
    "说明": "地址详情(楼号、单元号、层号)"
  },
  {
    "参数名": "phone",
    "类型": "string",
    "必填": "是",
    "说明": "电话/手机号，最长不超过64个字符"
  },
  {
    "参数名": "lng",
    "类型": "number",
    "必填": "是",
    "说明": "经度（火星坐标或百度坐标，和 coordinate_type 字段配合使用，确到小数点后6位"
  },
  {
    "参数名": "lat",
    "类型": "number",
    "必填": "是",
    "说明": "纬度（火星坐标或百度坐标，和 coordinate_type 字段配合使用，精确到小数点后6位）"
  },
  {
    "参数名": "coordinate_type",
    "类型": "number",
    "必填": "否",
    "说明": "坐标类型，0：火星坐标（高德，腾讯地图均采用火星坐标） 1：百度坐标"
  }
]
```

### Body.cargo `Object Payload`

货物信息

```json
[
  {
    "参数名": "goods_value",
    "类型": "number",
    "必填": "是",
    "说明": "货物价格，单位为元，精确到小数点后两位（如果小数点后位数多于两位，则四舍五入保留两位小数），范围为(0-5000]",
    "枚举": "-"
  },
  {
    "参数名": "goods_height",
    "类型": "number",
    "必填": "否",
    "说明": "货物高度，单位为cm，精确到小数点后两位（如果小数点后位数多于两位，则四舍五入保留两位小数），范围为(0-45]",
    "枚举": "-"
  },
  {
    "参数名": "goods_width",
    "类型": "number",
    "必填": "否",
    "说明": "货物宽度，单位为cm，精确到小数点后两位（如果小数点后位数多于两位，则四舍五入保留两位小数），范围为(0-50]",
    "枚举": "-"
  },
  {
    "参数名": "goods_length",
    "类型": "number",
    "必填": "否",
    "说明": "货物长度，单位为cm，精确到小数点后两位（如果小数点后位数多于两位，则四舍五入保留两位小数），范围为(0-65]",
    "枚举": "-"
  },
  {
    "参数名": "goods_weight",
    "类型": "number",
    "必填": "是",
    "说明": "货物重量，单位为kg，精确到小数点后两位（如果小数点后位数多于两位，则四舍五入保留两位小数），范围为(0-50]",
    "枚举": "-"
  },
  {
    "参数名": "goods_detail",
    "类型": "object",
    "必填": "否",
    "说明": "货物详情，最长不超过10240个字符",
    "枚举": "-"
  },
  {
    "参数名": "goods_pickup_info",
    "类型": "string",
    "必填": "否",
    "说明": "货物取货信息，用于骑手到店取货，最长不超过100个字符",
    "枚举": "-"
  },
  {
    "参数名": "cargo_first_class",
    "类型": "string",
    "必填": "是",
    "说明": "品类一级类目",
    "枚举": "枚举值"
  },
  {
    "参数名": "cargo_second_class",
    "类型": "string",
    "必填": "是",
    "说明": "品类二级类目",
    "枚举": "-"
  }
]
```

### Body.order_info `Object Payload`

订单信息

```json
[
  {
    "参数名": "delivery_service_code",
    "类型": "string",
    "必填": "否",
    "说明": "配送服务代码 不同配送公司自定义, 顺丰和达达不填"
  },
  {
    "参数名": "expected_delivery_time",
    "类型": "number",
    "必填": "否",
    "说明": "期望派单时间(达达支持，表示达达系统调度时间, 到那个时间才会有状态更新的回调通知)，unix-timestamp, 比如1586342180"
  },
  {
    "参数名": "order_type",
    "类型": "number",
    "必填": "否",
    "说明": "订单类型, 0: 即时单 1 预约单，如预约单，需要设置expected_delivery_time或expected_finish_time或expected_pick_time"
  },
  {
    "参数名": "poi_seq",
    "类型": "string",
    "必填": "否",
    "说明": "门店订单流水号，建议提供，方便骑手门店取货，最长不超过32个字符"
  },
  {
    "参数名": "note",
    "类型": "string",
    "必填": "否",
    "说明": "备注，最长不超过200个字符"
  },
  {
    "参数名": "order_time",
    "类型": "number",
    "必填": "否",
    "说明": "用户下单付款时间, 顺丰必填, 比如1555220757"
  },
  {
    "参数名": "is_insured",
    "类型": "number",
    "必填": "否",
    "说明": "是否保价，0，非保价，1.保价"
  },
  {
    "参数名": "declared_value",
    "类型": "number",
    "必填": "否",
    "说明": "保价金额，单位为元，精确到分"
  },
  {
    "参数名": "tips",
    "类型": "number",
    "必填": "否",
    "说明": "小费，单位为元, 下单一般不加小费"
  },
  {
    "参数名": "is_direct_delivery",
    "类型": "number",
    "必填": "否",
    "说明": "是否选择直拿直送（0：不需要；1：需要。选择直拿直送后，同一时间骑手只能配送此订单至完成，配送费用也相应高一些，闪送必须选1，达达可选0或1，其余配送公司不支持直拿直送）"
  },
  {
    "参数名": "cash_on_delivery",
    "类型": "number",
    "必填": "否",
    "说明": "骑手应付金额，单位为元，精确到分"
  },
  {
    "参数名": "cash_on_pickup",
    "类型": "number",
    "必填": "否",
    "说明": "骑手应收金额，单位为元，精确到分"
  },
  {
    "参数名": "rider_pick_method",
    "类型": "number",
    "必填": "否",
    "说明": "物流流向，1：从门店取件送至用户；2：从用户取件送至门店"
  },
  {
    "参数名": "is_finish_code_needed",
    "类型": "number",
    "必填": "否",
    "说明": "收货码（0：不需要；1：需要。收货码的作用是：骑手必须输入收货码才能完成订单妥投）"
  },
  {
    "参数名": "is_pickup_code_needed",
    "类型": "number",
    "必填": "否",
    "说明": "取货码（0：不需要；1：需要。取货码的作用是：骑手必须输入取货码才能从商家取货）"
  },
  {
    "参数名": "expected_finish_time",
    "类型": "number",
    "必填": "否",
    "说明": "期望送达时间(美团、顺丰同城急送支持），unix-timestamp, 比如1586342180"
  },
  {
    "参数名": "expected_pick_time",
    "类型": "number",
    "必填": "否",
    "说明": "期望取件时间（闪送、顺丰同城急送支持，闪送需要设置两个小时后的时间，顺丰同城急送只需传expected_finish_time或expected_pick_time其中之一即可，同时都传则以expected_finish_time为准），unix-timestamp, 比如1586342180"
  }
]
```

### Body.shop `Object Payload`

商品信息，会展示到物流通知消息中

```json
[
  {
    "参数名": "wxa_path",
    "类型": "string",
    "必填": "否",
    "说明": "商家小程序的路径，建议为订单页面"
  },
  {
    "参数名": "img_url",
    "类型": "string",
    "必填": "否",
    "说明": "商品缩略图 url；shop.detail_list为空则必传，shop.detail_list非空可不传。"
  },
  {
    "参数名": "goods_name",
    "类型": "string",
    "必填": "否",
    "说明": "商品名称, 不超过128字节；shop.detail_list为空则必传，shop.detail_list非空可不传。"
  },
  {
    "参数名": "goods_count",
    "类型": "number",
    "必填": "否",
    "说明": "商品数量；shop.detail_list为空则必传。shop.detail_list非空可不传，默认取shop.detail_list的size"
  },
  {
    "参数名": "wxa_appid",
    "类型": "string",
    "必填": "否",
    "说明": "该参数在【即时配送】的[addLocalOrder](api_addlocalorder)接口才生效。若结算方式为：第三方向配送公司统一结算，商户后续和第三方结算，则该参数必填；在该结算模式下，第三方用自己的开发小程序替授权商户发起下单，并将授权小程序的appid给平台，后续配送通知中可回流授权商户小程序。"
  }
]
```

### Body.cargo.goods_detail `Object Payload`

货物详情，最长不超过10240个字符

```json
[
  {
    "参数名": "goods",
    "类型": "objarray",
    "必填": "是",
    "说明": "货物列表"
  }
]
```

">

### Body.cargo.goods_detail.goods(Array) `Object Payload`

货物列表

```json
[
  {
    "参数名": "good_count",
    "类型": "number",
    "必填": "是",
    "说明": "货物数量"
  },
  {
    "参数名": "good_name",
    "类型": "string",
    "必填": "是",
    "说明": "货品名称"
  },
  {
    "参数名": "good_price",
    "类型": "number",
    "必填": "否",
    "说明": "货品单价，精确到小数点后两位（如果小数点后位数多于两位，则四舍五入保留两位小数）"
  },
  {
    "参数名": "good_unit",
    "类型": "string",
    "必填": "否",
    "说明": "货品单位，最长不超过20个字符"
  }
]
```

## 3. 返回参数

### 返回体 `Response Payload`

```json
[
  {
    "参数名": "resultcode",
    "类型": "number",
    "说明": "运力返回的错误码",
    "枚举": "-"
  },
  {
    "参数名": "resultmsg",
    "类型": "string",
    "说明": "运力返回的错误描述",
    "枚举": "-"
  },
  {
    "参数名": "fee",
    "类型": "number",
    "说明": "实际运费(单位：元)，运费减去优惠券费用",
    "枚举": "-"
  },
  {
    "参数名": "deliverfee",
    "类型": "number",
    "说明": "运费(单位：元)",
    "枚举": "-"
  },
  {
    "参数名": "couponfee",
    "类型": "number",
    "说明": "优惠券费用(单位：元)",
    "枚举": "-"
  },
  {
    "参数名": "tips",
    "类型": "number",
    "说明": "小费(单位：元)",
    "枚举": "-"
  },
  {
    "参数名": "insurancfee",
    "类型": "number",
    "说明": "保价费(单位：元)",
    "枚举": "-"
  },
  {
    "参数名": "distance",
    "类型": "number",
    "说明": "配送距离(整数单位：米)",
    "枚举": "-"
  },
  {
    "参数名": "waybill_id",
    "类型": "string",
    "说明": "配送单号",
    "枚举": "-"
  },
  {
    "参数名": "order_status",
    "类型": "number",
    "说明": "配送状态",
    "枚举": "枚举值"
  },
  {
    "参数名": "finish_code",
    "类型": "number",
    "说明": "收货码",
    "枚举": "-"
  },
  {
    "参数名": "pickup_code",
    "类型": "number",
    "说明": "取货码",
    "枚举": "-"
  },
  {
    "参数名": "dispatch_duration",
    "类型": "number",
    "说明": "预计骑手接单时间，单位秒，比如5分钟，就填300, 无法预计填0",
    "枚举": "-"
  }
]
```

## 4. 枚举信息

### Body.cargo.cargo_first_class `Enum`

品类一级类目

```json
[
  {
    "枚举值": "美食夜宵",
    "描述": "零食小吃\n香锅/烤鱼\n西餐\n日韩料理\n海鲜/烧烤\n快餐/地方菜\n小龙虾\n披萨"
  },
  {
    "枚举值": "甜品饮料",
    "描述": "甜品\n奶茶果汁\n咖啡\n面包/糕点\n冰淇淋"
  },
  {
    "枚举值": "蛋糕",
    "描述": "蛋糕"
  },
  {
    "枚举值": "日用百货",
    "描述": "便利店\n水站/奶站\n零食/干果\n五金日用\n粮油调味\n文具店\n酒水行\n地方特产\n进口食品\n宠物用品\n超市\n书店\n宠物食品用品\n办公家居用品"
  },
  {
    "枚举值": "果蔬生鲜",
    "描述": "果蔬\n海鲜水产\n冷冻速食"
  },
  {
    "枚举值": "鲜花",
    "描述": "鲜花"
  },
  {
    "枚举值": "医药健康",
    "描述": "送药\n器材器具"
  },
  {
    "枚举值": "美妆护肤",
    "描述": "日化美妆"
  },
  {
    "枚举值": "母婴",
    "描述": "孕婴用品"
  },
  {
    "枚举值": "文件或票务",
    "描述": "保单\n票务文件\n政府文件\n证件"
  },
  {
    "枚举值": "服饰鞋帽",
    "描述": "服饰鞋帽综合"
  },
  {
    "枚举值": "洗涤",
    "描述": "脏衣服收\n干净衣服派"
  },
  {
    "枚举值": "珠宝奢侈品",
    "描述": "珠宝饰品\n奢侈品"
  },
  {
    "枚举值": "家居家装",
    "描述": "家具\n装修建材\n厨房卫浴"
  },
  {
    "枚举值": "数码产品",
    "描述": "数码产品"
  },
  {
    "枚举值": "配件器材",
    "描述": "配件器材"
  },
  {
    "枚举值": "电商",
    "描述": "电视购物\n线上商城"
  },
  {
    "枚举值": "现场勘查",
    "描述": "现场勘查"
  },
  {
    "枚举值": "快递业务",
    "描述": "快递配送"
  },
  {
    "枚举值": "其他",
    "描述": "其他"
  }
]
```

### Res.order_status `Enum`

配送状态

```json
[
  {
    "枚举值": "101",
    "描述": "配送公司接单阶段——等待分配骑手，即初始状态"
  },
  {
    "枚举值": "102",
    "描述": "配送公司接单阶段——分配骑手成功"
  },
  {
    "枚举值": "103",
    "描述": "配送公司接单阶段——商家取消订单， 订单结束"
  },
  {
    "枚举值": "201",
    "描述": "骑手取货阶段——骑手到店开始取货"
  },
  {
    "枚举值": "202",
    "描述": "骑手取货阶段——取货成功"
  },
  {
    "枚举值": "203",
    "描述": "骑手取货阶段——取货失败，商家取消订单， 订单结束"
  },
  {
    "枚举值": "204",
    "描述": "骑手取货阶段——取货失败，骑手因自身原因取消订单， 订单结束"
  },
  {
    "枚举值": "205",
    "描述": "骑手取货阶段——取货失败，骑手因商家原因取消订单， 订单结束"
  },
  {
    "枚举值": "301",
    "描述": "骑手配送阶段——配送中"
  },
  {
    "枚举值": "302",
    "描述": "骑手配送阶段——配送成功， 订单结束"
  },
  {
    "枚举值": "303",
    "描述": "骑手配送阶段——商家取消订单，配送物品开始返还商家"
  },
  {
    "枚举值": "304",
    "描述": "骑手配送阶段——无法联系收货人，配送物品开始返还商家"
  },
  {
    "枚举值": "305",
    "描述": "骑手配送阶段——收货人拒收，配送物品开始返还商家"
  },
  {
    "枚举值": "401",
    "描述": "骑手返回配送货品阶段——货品返还商户成功， 订单结束"
  },
  {
    "枚举值": "501",
    "描述": "因运力系统原因取消， 订单结束"
  },
  {
    "枚举值": "502",
    "描述": "因不可抗拒因素（天气，道路管制等原因）取消，订单结束"
  }
]
```

## 5. 注意事项

#### 关于 order_status 枚举值说明

1. 最终状态包括成功状态302，失败状态: 103,203,204,205,401,501,502。
2. 当状态更新时，我们会在关键节点给收件用户推送服务通知，告知配送状态，同一配送单常态下会收到三条通知，即【骑手已接单】、【骑手已取货，配送中】、【配送已完成】，配送异常时会下发【配送异常】服务通知。

#### 不同服务通知对应的 order_status 枚举值为

|服务通知|对应的order_status值|
|:----|:----|
|骑手已接单 | 102|
|骑手已取货，配送中| 202或301 |
|配送已完成| 302 |
|配送异常| 203、204、205、303、304、305、501、502|

## 6. 代码示例

### 6.1 HTTPS调用成功示例

请求示例

```json
{
  "cargo": {
    "cargo_first_class": "美食夜宵",
    "cargo_second_class": "零食小吃",
    "goods_detail": {
      "goods": [
        {
          "good_count": 1,
          "good_name": "水果",
          "good_price": 10,
          "good_unit": "元"
        },
        {
          "good_count": 2,
          "good_name": "蔬菜",
          "good_price": 20,
          "good_unit": "元"
        }
      ]
    },
    "goods_height": 1,
    "goods_length": 3,
    "goods_value": 5,
    "goods_weight": 1,
    "goods_width": 2
  },
  "delivery_id": "SFTC",
  "delivery_sign": "01234567890123456789",
  "openid": "oABC123456",
  "order_info": {
    "delivery_service_code": "",
    "expected_delivery_time": 0,
    "is_direct_delivery": 0,
    "is_finish_code_needed": 1,
    "is_insured": 0,
    "is_pickup_code_needed": 1,
    "note": "test_note",
    "order_time": 1555220757,
    "order_type": 0,
    "poi_seq": "1111",
    "tips": 0
  },
  "receiver": {
    "address": "xxx地铁站",
    "address_detail": "2号楼202",
    "city": "北京市",
    "coordinate_type": 0,
    "lat": 40.15296,
    "lng": 116.50603,
    "name": "老王",
    "phone": "18512345678"
  },
  "sender": {
    "address": "xx大厦",
    "address_detail": "1号楼101",
    "city": "北京市",
    "coordinate_type": 0,
    "lat": 40.448612,
    "lng": 116.383075,
    "name": "刘一",
    "phone": "13712345678"
  },
  "shop": {
    "goods_count": 2,
    "goods_name": "宝贝",
    "img_url": "https://mmbiz.qpic.cn/mmbiz_png/xxxxxxxxx/0?wx_fmt=png",
    "wxa_path": "/page/index/index"
  },
  "shop_no": "12345678",
  "sub_biz_id": "sub_biz_id_1",
  "shop_order_id": "SFTC_001",
  "shopid": "122222222",
  "delivery_token": "xxxxxxxx"
}
```

返回示例

```json
{
  "resultcode": 0,
  "resultmsg": "ok",
  "fee": 10,
  "deliverfee": 10,
  "couponfee": 0,
  "tips": 0,
  "insurancfee": 0,
  "distance": 1000,
  "waybill_id": "123456789",
  "order_status": 101,
  "finish_code": 1024,
  "pickup_code": 2048,
  "dispatch_duration": 300
}
```

### 6.2 HTTPS调用失败示例

请求示例

同上

返回示例

```json
{
  "resultcode": 1010,
  "resultmsg": "收件人信息不正确"
}
```

## 7. 错误码

以下是本接口的错误码列表，其他错误码可参考 [通用错误码](/doc/oplatform/developers/errCode/README.md)；调用接口遇到报错，可使用官方提供的 [API 诊断工具](https://developers.weixin.qq.com/console/devtools/debug?utm_source=api_errcode) 辅助定位和分析问题。

```json
[
  {
    "错误码": "-1",
    "错误描述": "system error",
    "解决方案": "系统繁忙，此时请开发者稍候再试"
  }
]
```

## 8. 适用范围

本接口暂未明确可调用账号类型，或在业务中根据调用传参自行确定是否可调用，请以实际调用情况为准。
