package jdapi import ( "errors" "git.rosy.net.cn/baseapi/utils" ) const ( OrderStatusAddComment = "12001" OrderStatusModifyComment = "12006" OrderStatusTipChanged = "12008" OrderStatusPurchased = "41000" // 也即待处理,JD的消息很怪,新订单消息发过来是32000,但如果不是自动接单的,去查却是41000?,接单后才变为32000 OrderStatusNew = "32000" OrderStatusAdjust = "33080" OrderStatusWaitOutStore = "32001" OrderStatusFinishedPickup = "2" OrderStatusDelivering = "33040" OrderStatusDelivered = "33060" OrderStatusFinished = "90000" OrderStatusCanceled = "20020" OrderStatusUserApplyCancel = "20030" // 这个其实不是一个状态,是一个动作 OrderStatusLocked = "20010" OrderStatusUnlocked = "20050" OrderStatusInfoChanged = "1" ) const ( DeliveryStatusWait4Grap = "10" DeliveryStatusAccepted = "20" DeliveryStatusCourierCanceled = "21" DeliveryStatusCourierArrived = "23" DeliveryStatusFailedGetGoods = "25" DeliveryStatusFailedGetGoodsRejected = "26" DeliveryStatusFailedGetGoodsWaiting = "27" DeliveryStatusGotGoods = "30" DeliveryStatusFailedDelivery = "35" DeliveryStatusFinished = "40" ) const ( PromotionTypeNormal = 1 PromotionTypeSeckill = 2 PromotionTypeDirectDown = 3 PromotionTypeLimitedTime = 4 PromotionTypeAddMoneyBuy = 1202 PromotionTypeOverflowGiveGift = 1203 PromotionTypeBuyGiveGift = 6 ) const ( QueryOrderRetryCount = 1 // 因为京东到家当前不存在的订单也返回-4,暂时不重试 ) var ( ErrCanNotFindOrder = errors.New("can not find order") ) var ( orderOperationResultParser = genNoPageResultParser("code", "msg", "detail", "0") ) // 订单列表查询接口 // https://opendj.jd.com/staticnew/widgets/resources.html?groupid=169&apiid=ba3027848c3c4fda9674966e2a466482 func (a *API) OrderQuery(jdParams map[string]interface{}) (retVal []interface{}, totalCount int, err error) { // 最多试三次 for i := 0; i < QueryOrderRetryCount; i++ { retVal, totalCount, err = a.AccessAPIHavePage("order/es/query", jdParams, nil, nil, nil) if err != nil { if err2, ok := err.(*utils.ErrorWithCode); ok { if err2.IntCode() == -4 { continue } } } break } return retVal, totalCount, err } // orderFreightMoney 基础运费 // tips 商家承担小费 // merchantPaymentDistanceFreightMoney 取件服务费(开票)(正向单展示远距离运费;售后单则展示达达售后运费) // orderBaseFreightMoney ? func (a *API) QuerySingleOrder(orderId string) (map[string]interface{}, error) { jdParams := make(map[string]interface{}) jdParams["orderId"] = orderId result, _, err := a.OrderQuery(jdParams) if err != nil { return nil, err } if len(result) == 0 { return nil, ErrCanNotFindOrder } return result[0].(map[string]interface{}), nil } func (a *API) LegacyQuerySingleOrder(orderId string) (map[string]interface{}, error) { jdParams := make(map[string]interface{}) jdParams["orderId"] = orderId result, err := a.AccessAPI("order/es/query", jdParams) if err != nil { return nil, err } dataStr, _ := result["data"].(string) var data map[string]interface{} utils.UnmarshalUseNumber([]byte(dataStr), &data) result["data"] = data var dataResult map[string]interface{} utils.UnmarshalUseNumber([]byte(data["result"].(string)), &dataResult) data["result"] = dataResult return result, nil } // 商家确认接单接口 // https://opendj.jd.com/staticnew/widgets/resources.html?groupid=169&apiid=c1a15129d1374e9da7fa35487f878604 func (a *API) OrderAcceptOperate(orderId string, isAgreed bool, userName string) error { jdParams := map[string]interface{}{ "orderId": orderId, "isAgreed": utils.Bool2String(isAgreed), "operator": utils.GetAPIOperator(userName), } _, err := a.AccessAPINoPage("ocs/orderAcceptOperate", jdParams, nil, nil, orderOperationResultParser) return err } // 拣货完成且众包配送接口 // https://opendj.jd.com/staticnew/widgets/resources.html?groupid=169&apiid=ed93745b86c6487eaaea5f55a84785ac func (a *API) OrderJDZBDelivery(orderId string, userName string) (detail string, err error) { jdParams := map[string]interface{}{ "orderId": orderId, "operator": utils.GetAPIOperator(userName), } result, err := a.AccessAPINoPage("bm/open/api/order/OrderJDZBDelivery", jdParams, nil, nil, orderOperationResultParser) if err == nil { return utils.Interface2String(result), nil } return "", err } // 订单达达配送转商家自送接口 // https://opendj.jd.com/staticnew/widgets/resources.html?groupid=169&apiid=e7b4950164754eecac7ea87278c2b071 func (a *API) ModifySellerDelivery(orderId string, userName string) (detail string, err error) { jdParams := map[string]interface{}{ "orderId": orderId, "updatePin": utils.GetAPIOperator(userName), } result, err := a.AccessAPINoPage("order/modifySellerDelivery", jdParams, nil, nil, orderOperationResultParser) if err == nil { return utils.Interface2String(result), nil } return "", err } // 拣货完成且商家自送接口(这个接口是商家本身配置为自送模式下才能调用的接口,如果启用了达达配送,是不能调用的) // https://opendj.jd.com/staticnew/widgets/resources.html?groupid=169&apiid=0e08e71a45dc48b6a337e06a852ac33a func (a *API) OrderSerllerDelivery(orderId string, userName string) (detail string, err error) { jdParams := map[string]interface{}{ "orderId": orderId, "operator": utils.GetAPIOperator(userName), } result, err := a.AccessAPINoPage("bm/open/api/order/OrderSerllerDelivery", jdParams, nil, nil, orderOperationResultParser) if err == nil { return utils.Interface2String(result), nil } return "", err } // 商家自送,订单妥投接口 // https://opendj.jd.com/staticnew/widgets/resources.html?groupid=169&apiid=ecc80f06d35141979f4841f345001f74 func (a *API) DeliveryEndOrder(orderId string, userName string) (result map[string]interface{}, err error) { jdParams := map[string]interface{}{ "orderId": orderId, "operPin": utils.GetAPIOperator(userName), "operTime": utils.GetCurTimeStr(), } tmpResult, err := a.AccessAPINoPage("ocs/deliveryEndOrder", jdParams, nil, nil, nil) if err == nil { return tmpResult.(map[string]interface{}), nil } return nil, err }