附近小店
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

immediate_delivery.go 23 KiB

2 months ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479
  1. package weapp
  2. const (
  3. apiAbnormalConfirm = "/cgi-bin/express/local/business/order/confirm_return"
  4. apiAddDeliveryOrder = "/cgi-bin/express/local/business/order/add"
  5. apiAddDeliveryTip = "/cgi-bin/express/local/business/order/addtips"
  6. apiCancelDeliveryOrder = "/cgi-bin/express/local/business/order/cancel"
  7. apiGetAllImmediateDelivery = "/cgi-bin/express/local/business/delivery/getall"
  8. apiGetDeliveryBindAccount = "/cgi-bin/express/local/business/shop/get"
  9. apiGetDeliveryOrder = "/cgi-bin/express/local/business/order/get"
  10. apiPreAddDeliveryOrder = "/cgi-bin/express/local/business/order/pre_add"
  11. apiPreCancelDeliveryOrder = "/cgi-bin/express/local/business/order/precancel"
  12. apiReAddDeliveryOrder = "/cgi-bin/express/local/business/order/readd"
  13. apiMockUpdateDeliveryOrder = "/cgi-bin/express/local/business/test_update_order"
  14. apiUpdateDeliveryOrder = "/cgi-bin/express/local/delivery/update_order"
  15. )
  16. // AbnormalConfirmer 异常件退回商家商家确认器
  17. type AbnormalConfirmer struct {
  18. ShopID string `json:"shopid"` // 商家id, 由配送公司分配的appkey
  19. ShopOrderID string `json:"shop_order_id"` // 唯一标识订单的 ID,由商户生成
  20. ShopNo string `json:"shop_no"` // 商家门店编号, 在配送公司登记,如果只有一个门店,可以不填
  21. DeliverySign string `json:"delivery_sign"` // 用配送公司提供的appSecret加密的校验串
  22. WaybillID string `json:"waybill_id"` // 配送单id
  23. Remark string `json:"remark"` // 备注
  24. }
  25. // Confirm 异常件退回商家商家确认收货
  26. func (confirmer *AbnormalConfirmer) Confirm(token string) (*CommonResult, error) {
  27. api := baseURL + apiAbnormalConfirm
  28. return confirmer.confirm(api, token)
  29. }
  30. func (confirmer *AbnormalConfirmer) confirm(api, token string) (*CommonResult, error) {
  31. url, err := tokenAPI(api, token)
  32. if err != nil {
  33. return nil, err
  34. }
  35. res := new(CommonResult)
  36. if err := postJSON(url, confirmer, res); err != nil {
  37. return nil, err
  38. }
  39. return res, nil
  40. }
  41. // DeliveryOrderCreator 下配送单参数
  42. type DeliveryOrderCreator struct {
  43. DeliveryToken string `json:"delivery_token,omitempty"` // 预下单接口返回的参数,配送公司可保证在一段时间内运费不变
  44. ShopID string `json:"shopid"` // 商家id, 由配送公司分配的appkey
  45. ShopOrderID string `json:"shop_order_id"` // 唯一标识订单的 ID,由商户生成
  46. ShopNo string `json:"shop_no"` // 商家门店编号, 在配送公司登记,如果只有一个门店,可以不填
  47. DeliverySign string `json:"delivery_sign"` // 用配送公司提供的appSecret加密的校验串
  48. DeliveryID string `json:"delivery_id"` // 配送公司ID
  49. OpenID string `json:"openid"` // 下单用户的openid
  50. Sender DeliveryUser `json:"sender"` // 发件人信息,闪送、顺丰同城急送必须填写,美团配送、达达,若传了shop_no的值可不填该字段
  51. Receiver DeliveryUser `json:"receiver"` // 收件人信息
  52. Cargo DeliveryCargo `json:"cargo"` // 货物信息
  53. OrderInfo DeliveryOrderInfo `json:"order_info"` // 订单信息
  54. Shop DeliveryShop `json:"shop"` // 商品信息,会展示到物流通知消息中
  55. SubBizID string `json:"sub_biz_id"` // 子商户id,区分小程序内部多个子商户
  56. }
  57. // DeliveryUser 发件人信息,闪送、顺丰同城急送必须填写,美团配送、达达,若传了shop_no的值可不填该字段
  58. type DeliveryUser struct {
  59. Name string `json:"name"` // 姓名,最长不超过256个字符
  60. City string `json:"city"` // 城市名称,如广州市
  61. Address string `json:"address"` // 地址(街道、小区、大厦等,用于定位)
  62. AddressDetail string `json:"address_detail"` // 地址详情(楼号、单元号、层号)
  63. Phone string `json:"phone"` // 电话/手机号,最长不超过64个字符
  64. Lng float64 `json:"lng"` // 经度(火星坐标或百度坐标,和 coordinate_type 字段配合使用,确到小数点后6位
  65. Lat float64 `json:"lat"` // 纬度(火星坐标或百度坐标,和 coordinate_type 字段配合使用,精确到小数点后6位)
  66. CoordinateType uint8 `json:"coordinate_type"` // 坐标类型,0:火星坐标(高德,腾讯地图均采用火星坐标) 1:百度坐标
  67. }
  68. // DeliveryCargo 货物信息
  69. type DeliveryCargo struct {
  70. GoodsValue float64 `json:"goods_value"` // 货物价格,单位为元,精确到小数点后两位(如果小数点后位数多于两位,则四舍五入保留两位小数),范围为(0-5000]
  71. GoodsHeight float64 `json:"goods_height"` // 货物高度,单位为cm,精确到小数点后两位(如果小数点后位数多于两位,则四舍五入保留两位小数),范围为(0-45]
  72. GoodsLength float64 `json:"goods_length"` // 货物长度,单位为cm,精确到小数点后两位(如果小数点后位数多于两位,则四舍五入保留两位小数),范围为(0-65]
  73. GoodsWidth float64 `json:"goods_width"` // 货物宽度,单位为cm,精确到小数点后两位(如果小数点后位数多于两位,则四舍五入保留两位小数),范围为(0-50]
  74. GoodsWeight float64 `json:"goods_weight"` // 货物重量,单位为kg,精确到小数点后两位(如果小数点后位数多于两位,则四舍五入保留两位小数),范围为(0-50]
  75. GoodsDetail DeliveryGoodsDetail `json:"goods_detail"` // 货物详情,最长不超过10240个字符
  76. GoodsPickupInfo string `json:"goods_pickup_info"` // 货物取货信息,用于骑手到店取货,最长不超过100个字符
  77. GoodsDeliveryInfo string `json:"goods_delivery_info"` // 货物交付信息,最长不超过100个字符
  78. CargoFirstClass string `json:"cargo_first_class"` // 品类一级类目
  79. CargoSecondClass string `json:"cargo_second_class"` // 品类二级类目
  80. }
  81. // DeliveryGoodsDetail 货物详情
  82. type DeliveryGoodsDetail struct {
  83. Goods []DeliveryGoods `json:"goods"` // 货物交付信息,最长不超过100个字符
  84. }
  85. // DeliveryGoods 货物
  86. type DeliveryGoods struct {
  87. Count uint `json:"good_count"` // 货物数量
  88. Name string `json:"good_name"` // 货品名称
  89. Price float32 `json:"good_price"` // 货品单价,精确到小数点后两位(如果小数点后位数多于两位,则四舍五入保留两位小数)
  90. Unit string `json:"good_unit"` // 货品单位,最长不超过20个字符
  91. }
  92. // DeliveryOrderInfo 订单信息
  93. type DeliveryOrderInfo struct {
  94. DeliveryServiceCode string `json:"delivery_service_code"` // 配送服务代码 不同配送公司自定义,微信侧不理解
  95. OrderType uint8 `json:"order_type"` // 订单类型, 0: 即时单 1 预约单,如预约单,需要设置expected_delivery_time或expected_finish_time或expected_pick_time
  96. ExpectedDeliveryTime uint `json:"expected_delivery_time"` // 期望派单时间(顺丰同城急送、达达、支持),unix-timestamp
  97. ExpectedFinishTime uint `json:"expected_finish_time"` // 期望送达时间(顺丰同城急送、美团配送支持),unix-timestamp
  98. ExpectedPickTime uint `json:"expected_pick_time"` // 期望取件时间(闪送支持),unix-timestamp
  99. PoiSeq string `json:"poi_seq"` // 门店订单流水号,建议提供,方便骑手门店取货,最长不超过32个字符
  100. Note string `json:"note"` // 备注,最长不超过200个字符
  101. OrderTime uint `json:"order_time"` // 用户下单付款时间
  102. IsInsured uint8 `json:"is_insured"` // 是否保价,0,非保价,1.保价
  103. DeclaredValue float64 `json:"declared_value"` // 保价金额,单位为元,精确到分
  104. Tips float64 `json:"tips"` // 小费,单位为元, 下单一般不加小费
  105. IsDirectDelivery uint `json:"is_direct_delivery"` // 是否选择直拿直送(0:不需要;1:需要。选择直拿直送后,同一时间骑手只能配送此订单至完成,配送费用也相应高一些,闪送必须选1,达达可选0或1,其余配送公司不支持直拿直送)
  106. CashOnDelivery uint `json:"cash_on_delivery"` // 骑手应付金额,单位为元,精确到分
  107. CashOnPickup uint `json:"cash_on_pickup"` // 骑手应收金额,单位为元,精确到分
  108. RiderPickMethod uint8 `json:"rider_pick_method"` // 物流流向,1:从门店取件送至用户;2:从用户取件送至门店
  109. IsFinishCodeNeeded uint8 `json:"is_finish_code_needed"` // 收货码(0:不需要;1:需要。收货码的作用是:骑手必须输入收货码才能完成订单妥投)
  110. IsPickupCodeNeeded uint8 `json:"is_pickup_code_needed"` // 取货码(0:不需要;1:需要。取货码的作用是:骑手必须输入取货码才能从商家取货)
  111. }
  112. // DeliveryShop 商品信息,会展示到物流通知消息中
  113. type DeliveryShop struct {
  114. WxaPath string `json:"wxa_path"` // 商家小程序的路径,建议为订单页面
  115. ImgURL string `json:"img_url"` // 商品缩略图 url
  116. GoodsName string `json:"goods_name"` // 商品名称
  117. GoodsCount uint `json:"goods_count"` // 商品数量
  118. }
  119. // PreDeliveryOrderResponse 返回数据
  120. type PreDeliveryOrderResponse struct {
  121. Fee float64 `json:"fee"` // 实际运费(单位:元),运费减去优惠券费用
  122. Deliverfee float64 `json:"deliverfee"` // 运费(单位:元)
  123. Couponfee float64 `json:"couponfee"` // 优惠券费用(单位:元)
  124. Tips float64 `json:"tips"` // 小费(单位:元)
  125. Insurancefee float64 `json:"insurancefee"` // 保价费(单位:元)
  126. Distance float64 `json:"distance"` // 配送距离(单位:米)
  127. DispatchDuration uint `json:"dispatch_duration"` // 预计骑手接单时间,单位秒,比如5分钟,就填300, 无法预计填0
  128. DeliveryToken string `json:"delivery_token"` // 配送公司可以返回此字段,当用户下单时候带上这个字段,保证在一段时间内运费不变
  129. }
  130. // Prepare 预下配送单接口
  131. func (creator *DeliveryOrderCreator) Prepare(token string) (*PreDeliveryOrderResponse, error) {
  132. api := baseURL + apiPreCancelDeliveryOrder
  133. return creator.prepare(api, token)
  134. }
  135. func (creator *DeliveryOrderCreator) prepare(api, token string) (*PreDeliveryOrderResponse, error) {
  136. url, err := tokenAPI(api, token)
  137. if err != nil {
  138. return nil, err
  139. }
  140. res := new(PreDeliveryOrderResponse)
  141. if err := postJSON(url, creator, res); err != nil {
  142. return nil, err
  143. }
  144. return res, nil
  145. }
  146. // CreateDeliveryOrderResponse 返回数据
  147. type CreateDeliveryOrderResponse struct {
  148. CommonResult
  149. Fee uint `json:"fee"` //实际运费(单位:元),运费减去优惠券费用
  150. Deliverfee uint `json:"deliverfee"` //运费(单位:元)
  151. Couponfee uint `json:"couponfee"` //优惠券费用(单位:元)
  152. Tips uint `json:"tips"` //小费(单位:元)
  153. Insurancefee uint `json:"insurancefee"` //保价费(单位:元)
  154. Distance float64 `json:"distance"` // 配送距离(单位:米)
  155. WaybillID string `json:"waybill_id"` //配送单号
  156. OrderStatus int `json:"order_status"` //配送状态
  157. FinishCode uint `json:"finish_code"` // 收货码
  158. PickupCode uint `json:"pickup_code"` //取货码
  159. DispatchDuration uint `json:"dispatch_duration"` // 预计骑手接单时间,单位秒,比如5分钟,就填300, 无法预计填0
  160. }
  161. // Create 下配送单
  162. func (creator *DeliveryOrderCreator) Create(token string) (*CreateDeliveryOrderResponse, error) {
  163. api := baseURL + apiAddDeliveryOrder
  164. return creator.create(api, token)
  165. }
  166. func (creator *DeliveryOrderCreator) create(api, token string) (*CreateDeliveryOrderResponse, error) {
  167. url, err := tokenAPI(api, token)
  168. if err != nil {
  169. return nil, err
  170. }
  171. res := new(CreateDeliveryOrderResponse)
  172. if err := postJSON(url, creator, res); err != nil {
  173. return nil, err
  174. }
  175. return res, nil
  176. }
  177. // Recreate 重新下单
  178. func (creator *DeliveryOrderCreator) Recreate(token string) (*CreateDeliveryOrderResponse, error) {
  179. api := baseURL + apiReAddDeliveryOrder
  180. return creator.recreate(api, token)
  181. }
  182. func (creator *DeliveryOrderCreator) recreate(api, token string) (*CreateDeliveryOrderResponse, error) {
  183. url, err := tokenAPI(api, token)
  184. if err != nil {
  185. return nil, err
  186. }
  187. res := new(CreateDeliveryOrderResponse)
  188. if err := postJSON(url, creator, res); err != nil {
  189. return nil, err
  190. }
  191. return res, nil
  192. }
  193. // DeliveryTipAdder 增加小费参数
  194. type DeliveryTipAdder struct {
  195. ShopID string `json:"shopid"` // 商家id, 由配送公司分配的appkey
  196. ShopOrderID string `json:"shop_order_id"` // 唯一标识订单的 ID,由商户生成
  197. ShopNo string `json:"shop_no"` // 商家门店编号, 在配送公司登记,如果只有一个门店,可以不填
  198. DeliverySign string `json:"delivery_sign"` // 用配送公司提供的appSecret加密的校验串
  199. WaybillID string `json:"waybill_id"` // 配送单id
  200. OpenID string `json:"openid"` // 下单用户的openid
  201. Tips float64 `json:"tips"` // 小费金额(单位:元) 各家配送公司最大值不同
  202. Remark string `json:"Remark"` // 备注
  203. }
  204. // Add 对待接单状态的订单增加小费。需要注意:订单的小费,以最新一次加小费动作的金额为准,故下一次增加小费额必须大于上一次小费额
  205. func (adder *DeliveryTipAdder) Add(token string) (*CommonResult, error) {
  206. api := baseURL + apiAddDeliveryTip
  207. return adder.add(api, token)
  208. }
  209. func (adder *DeliveryTipAdder) add(api, token string) (*CommonResult, error) {
  210. url, err := tokenAPI(api, token)
  211. if err != nil {
  212. return nil, err
  213. }
  214. res := new(CommonResult)
  215. if err := postJSON(url, adder, res); err != nil {
  216. return nil, err
  217. }
  218. return res, nil
  219. }
  220. // DeliveryOrderCanceler 取消配送单参数
  221. type DeliveryOrderCanceler struct {
  222. ShopID string `json:"shopid"` // 商家id, 由配送公司分配的appkey
  223. ShopOrderID string `json:"shop_order_id"` // 唯一标识订单的 ID,由商户生成
  224. ShopNo string `json:"shop_no"` // 商家门店编号, 在配送公司登记,如果只有一个门店,可以不填
  225. DeliverySign string `json:"delivery_sign"` // 用配送公司提供的appSecret加密的校验串
  226. DeliveryID string `json:"delivery_id"` // 快递公司ID
  227. WaybillID string `json:"waybill_id"` // 配送单id
  228. ReasonID uint8 `json:"cancel_reason_id"` // 取消原因Id
  229. Reason string `json:"cancel_reason"` // 取消原因
  230. }
  231. // CancelDeliveryOrderResponse 取消配送单返回数据
  232. type CancelDeliveryOrderResponse struct {
  233. CommonResult
  234. DeductFee float64 `json:"deduct_fee"` // 预计扣除的违约金(单位:元),精确到分
  235. Desc string `json:"desc"` //说明
  236. }
  237. // Prepare 预取消配送单
  238. func (canceler *DeliveryOrderCanceler) Prepare(token string) (*CancelDeliveryOrderResponse, error) {
  239. api := baseURL + apiCancelDeliveryOrder
  240. return canceler.prepare(api, token)
  241. }
  242. func (canceler *DeliveryOrderCanceler) prepare(api, token string) (*CancelDeliveryOrderResponse, error) {
  243. url, err := tokenAPI(api, token)
  244. if err != nil {
  245. return nil, err
  246. }
  247. res := new(CancelDeliveryOrderResponse)
  248. if err := postJSON(url, canceler, res); err != nil {
  249. return nil, err
  250. }
  251. return res, nil
  252. }
  253. // Cancel 取消配送单
  254. func (canceler *DeliveryOrderCanceler) Cancel(token string) (*CancelDeliveryOrderResponse, error) {
  255. api := baseURL + apiCancelDeliveryOrder
  256. return canceler.cancel(api, token)
  257. }
  258. func (canceler *DeliveryOrderCanceler) cancel(api, token string) (*CancelDeliveryOrderResponse, error) {
  259. url, err := tokenAPI(api, token)
  260. if err != nil {
  261. return nil, err
  262. }
  263. res := new(CancelDeliveryOrderResponse)
  264. if err := postJSON(url, canceler, res); err != nil {
  265. return nil, err
  266. }
  267. return res, nil
  268. }
  269. // GetAllImmediateDeliveryResponse 获取已支持的配送公司列表接口返回数据
  270. type GetAllImmediateDeliveryResponse struct {
  271. CommonResult
  272. List []struct {
  273. ID string `json:"delivery_id"` //配送公司Id
  274. Name string `json:"delivery_name"` // 配送公司名称
  275. } `json:"list"` // 配送公司列表
  276. }
  277. // GetAllImmediateDelivery 获取已支持的配送公司列表接口
  278. func GetAllImmediateDelivery(token string) (*GetAllImmediateDeliveryResponse, error) {
  279. api := baseURL + apiGetAllImmediateDelivery
  280. return getAllImmediateDelivery(api, token)
  281. }
  282. func getAllImmediateDelivery(api, token string) (*GetAllImmediateDeliveryResponse, error) {
  283. url, err := tokenAPI(api, token)
  284. if err != nil {
  285. return nil, err
  286. }
  287. res := new(GetAllImmediateDeliveryResponse)
  288. if err := postJSON(url, nil, res); err != nil {
  289. return nil, err
  290. }
  291. return res, nil
  292. }
  293. // GetBindAccountResponse 返回数据
  294. type GetBindAccountResponse struct {
  295. CommonResult
  296. ShopList []struct {
  297. DeliveryID string `json:"delivery_id"` // 配送公司Id
  298. ShopID string `json:"shopid"` // 商家id
  299. AuditResult uint8 `json:"audit_result"` // 审核状态
  300. } `json:"shop_list"` // 配送公司列表
  301. }
  302. // GetBindAccount 拉取已绑定账号
  303. func GetBindAccount(token string) (*GetBindAccountResponse, error) {
  304. api := baseURL + apiGetDeliveryBindAccount
  305. return getBindAccount(api, token)
  306. }
  307. func getBindAccount(api, token string) (*GetBindAccountResponse, error) {
  308. url, err := tokenAPI(api, token)
  309. if err != nil {
  310. return nil, err
  311. }
  312. res := new(GetBindAccountResponse)
  313. if err := postJSON(url, nil, res); err != nil {
  314. return nil, err
  315. }
  316. return res, nil
  317. }
  318. // DeliveryOrderGetter 请求参数
  319. type DeliveryOrderGetter struct {
  320. ShopID string `json:"shopid"` // 商家id, 由配送公司分配的appkey
  321. ShopOrderID string `json:"shop_order_id"` // 唯一标识订单的 ID,由商户生成
  322. ShopNo string `json:"shop_no"` // 商家门店编号, 在配送公司登记,如果只有一个门店,可以不填
  323. DeliverySign string `json:"delivery_sign"` // 用配送公司提供的appSecret加密的校验串说明
  324. }
  325. // GetDeliveryOrderResponse 返回数据
  326. type GetDeliveryOrderResponse struct {
  327. CommonResult
  328. OrderStatus int `json:"order_status"` // 配送状态,枚举值
  329. WaybillID string `json:"waybill_id"` // 配送单号
  330. RiderName string `json:"rider_name"` // 骑手姓名
  331. RiderPhone string `json:"rider_phone"` // 骑手电话
  332. RiderLng float64 `json:"rider_lng"` // 骑手位置经度, 配送中时返回
  333. RiderLat float64 `json:"rider_lat"` // 骑手位置纬度, 配送中时返回
  334. }
  335. // Get 下配送单
  336. func (getter *DeliveryOrderGetter) Get(token string) (*GetDeliveryOrderResponse, error) {
  337. api := baseURL + apiGetDeliveryOrder
  338. return getter.get(api, token)
  339. }
  340. func (getter *DeliveryOrderGetter) get(api, token string) (*GetDeliveryOrderResponse, error) {
  341. url, err := tokenAPI(api, token)
  342. if err != nil {
  343. return nil, err
  344. }
  345. res := new(GetDeliveryOrderResponse)
  346. if err := postJSON(url, getter, res); err != nil {
  347. return nil, err
  348. }
  349. return res, nil
  350. }
  351. // UpdateDeliveryOrderMocker 请求参数
  352. type UpdateDeliveryOrderMocker struct {
  353. ShopID string `json:"shopid"` // 商家id, 必须是 "test_shop_id"
  354. ShopOrderID string `json:"shop_order_id"` // 唯一标识订单的 ID,由商户生成
  355. ActionTime uint `json:"action_time"` // 状态变更时间点,Unix秒级时间戳
  356. OrderStatus int `json:"order_status"` // 配送状态,枚举值
  357. ActionMsg string `json:"action_msg"` // 附加信息
  358. }
  359. // Mock 模拟配送公司更新配送单状态
  360. func (mocker *UpdateDeliveryOrderMocker) Mock(token string) (*CommonResult, error) {
  361. api := baseURL + apiMockUpdateDeliveryOrder
  362. return mocker.mock(api, token)
  363. }
  364. func (mocker *UpdateDeliveryOrderMocker) mock(api, token string) (*CommonResult, error) {
  365. url, err := tokenAPI(api, token)
  366. if err != nil {
  367. return nil, err
  368. }
  369. res := new(CommonResult)
  370. if err := postJSON(url, mocker, res); err != nil {
  371. return nil, err
  372. }
  373. return res, nil
  374. }
  375. // DeliveryOrderUpdater 请求参数
  376. type DeliveryOrderUpdater struct {
  377. WXToken string `json:"wx_token"` // 下单事件中推送的wx_token字段
  378. ShopID string `json:"shopid"` // 商家id, 由配送公司分配,可以是dev_id或者appkey
  379. ShopOrderID string `json:"shop_order_id"` // 唯一标识订单的 ID,由商户生成
  380. ShopNo string `json:"shop_no,omitempty"` // 商家门店编号, 在配送公司侧登记
  381. WaybillID string `json:"waybill_id"` // 配送单id
  382. ActionTime uint `json:"action_time"` // 状态变更时间点,Unix秒级时间戳
  383. OrderStatus int `json:"order_status"` // 订单状态,枚举值,下附枚举值列表及说明
  384. ActionMsg string `json:"action_msg,omitempty"` // 附加信息
  385. WxaPath string `json:"wxa_path"` // 配送公司小程序跳转路径,用于用户收到消息会间接跳转到这个页面
  386. Agent DeliveryAgent `json:"agent,omitempty"` // 骑手信息, 骑手接单时需返回
  387. ExpectedDeliveryTime uint `json:"expected_delivery_time,omitempty"` // 预计送达时间戳, 骑手接单时需返回
  388. }
  389. // DeliveryAgent 骑手信息
  390. type DeliveryAgent struct {
  391. Name string `json:"name"` // 骑手姓名
  392. Phone string `json:"phone"` // 骑手电话
  393. Encrypted uint8 `json:"is_phone_encrypted,omitempty"` // 电话是否加密
  394. }
  395. // Update 模拟配送公司更新配送单状态
  396. func (updater *DeliveryOrderUpdater) Update(token string) (*CommonResult, error) {
  397. api := baseURL + apiUpdateDeliveryOrder
  398. return updater.update(api, token)
  399. }
  400. func (updater *DeliveryOrderUpdater) update(api, token string) (*CommonResult, error) {
  401. url, err := tokenAPI(api, token)
  402. if err != nil {
  403. return nil, err
  404. }
  405. res := new(CommonResult)
  406. if err := postJSON(url, updater, res); err != nil {
  407. return nil, err
  408. }
  409. return res, nil
  410. }