From da9c8a11c2beaa857db36eb20240af586b08ac87 Mon Sep 17 00:00:00 2001 From: gazebo Date: Sun, 28 Jul 2019 12:34:52 +0800 Subject: [PATCH] =?UTF-8?q?-=20=E9=87=8D=E8=A6=81=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E7=9B=B8=E5=85=B3=E7=9A=84=E5=87=BD=E6=95=B0=E6=96=B0=E5=A2=9E?= =?UTF-8?q?trackInfo=E5=8F=82=E6=95=B0=EF=BC=8C=E8=BF=BD=E8=B8=AA=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E4=BA=BA.=E6=8E=A5=E5=8F=A3=E7=B1=BB=E5=9E=8B?= =?UTF-8?q?=E6=94=B9=E5=8F=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- platformapi/ebaiapi/ebaiapi.go | 9 ++++- platformapi/ebaiapi/shop_sku.go | 44 ++++++++++++------------ platformapi/ebaiapi/shop_sku_test.go | 19 ++++++----- platformapi/jdapi/jdapi.go | 17 ++++++++-- platformapi/jdapi/order.go | 12 +++++++ platformapi/jdapi/store_sku.go | 28 +++++++-------- platformapi/jdapi/store_sku_test.go | 4 +-- platformapi/mtwmapi/act.go | 6 ++-- platformapi/mtwmapi/mtwmapi.go | 7 ++-- platformapi/mtwmapi/order.go | 11 ++++++ platformapi/mtwmapi/retail.go | 51 ++++++++++++++-------------- platformapi/mtwmapi/retail_test.go | 12 +++---- platformapi/platformapi.go | 32 ++++++++++------- 13 files changed, 152 insertions(+), 100 deletions(-) diff --git a/platformapi/ebaiapi/ebaiapi.go b/platformapi/ebaiapi/ebaiapi.go index 74234697..b3b5f50b 100644 --- a/platformapi/ebaiapi/ebaiapi.go +++ b/platformapi/ebaiapi/ebaiapi.go @@ -91,7 +91,7 @@ func (a *API) getShopID(body map[string]interface{}) (shopID string) { return "" } -func (a *API) AccessAPI(cmd string, body map[string]interface{}) (retVal *ResponseResult, err error) { +func (a *API) AccessAPI2(cmd string, body map[string]interface{}, trackInfo string) (retVal *ResponseResult, err error) { baseapi.SugarLogger.Debugf("ebai AccessAPI cmd:%s", cmd) // a.speedLimiter.AccessAPI(allAPI) a.speedLimiter.AccessAPI(cmd, a.getShopID(body)) @@ -114,6 +114,9 @@ func (a *API) AccessAPI(cmd string, body map[string]interface{}) (retVal *Respon request, _ := http.NewRequest(http.MethodPost, prodURL, strings.NewReader(encodedParams)) request.Header.Set("Content-Type", "application/x-www-form-urlencoded") request.Header.Set("User-Agent", "ebai-golang-api") + if trackInfo != "" { + request.Header.Set(platformapi.KeyTrackInfo, trackInfo) + } return request }, a.config, @@ -147,6 +150,10 @@ func (a *API) AccessAPI(cmd string, body map[string]interface{}) (retVal *Respon return retVal, err } +func (a *API) AccessAPI(cmd string, body map[string]interface{}) (retVal *ResponseResult, err error) { + return a.AccessAPI2(cmd, body, "") +} + func (a *API) GetSupplierID() (supplierID int64) { a.locker.RLock() supplierID = a.supplierID diff --git a/platformapi/ebaiapi/shop_sku.go b/platformapi/ebaiapi/shop_sku.go index a7679a96..fd282197 100644 --- a/platformapi/ebaiapi/shop_sku.go +++ b/platformapi/ebaiapi/shop_sku.go @@ -291,7 +291,7 @@ func (a *API) SkuList(shopID string, params *SkuListParams) (skuInfo *PageDataIn } // 饿百商品名可以相同,不会报错 -func (a *API) SkuCreate(shopID string, customSkuID int, params map[string]interface{}) (skuID int64, err error) { +func (a *API) SkuCreate(trackInfo, shopID string, customSkuID int, params map[string]interface{}) (skuID int64, err error) { defParams := map[string]interface{}{ KeyShopID: shopID, KeyCustomSkuID: customSkuID, @@ -308,19 +308,19 @@ func (a *API) SkuCreate(shopID string, customSkuID int, params map[string]interf } params = utils.MergeMaps(params, defParams) // baseapi.SugarLogger.Debugf(utils.Format4Output(params, false)) - result, err := a.AccessAPI("sku.create", params) + result, err := a.AccessAPI2("sku.create", params, trackInfo) if err == nil { return utils.Str2Int64(utils.Interface2String(result.Data.(map[string]interface{})[KeySkuID])), nil } return 0, err } -func (a *API) SkuUpdate(shopID string, ebaiSkuID int64, params map[string]interface{}) (skuID int64, err error) { +func (a *API) SkuUpdate(trackInfo, shopID string, ebaiSkuID int64, params map[string]interface{}) (skuID int64, err error) { defParams := map[string]interface{}{ KeyShopID: shopID, KeySkuID: ebaiSkuID, } - result, err := a.AccessAPI("sku.update", utils.MergeMaps(params, defParams)) + result, err := a.AccessAPI2("sku.update", utils.MergeMaps(params, defParams), trackInfo) if err == nil { return utils.Str2Int64(utils.Interface2String(result.Data.(map[string]interface{})[KeySkuID])), nil } @@ -383,10 +383,10 @@ func handleShopSkuBatchErr(err error) (opResult *BatchOpResult, outErr error) { // 另外需要注意的是SkuPriceUpdateBatch的失败明细中的skuID是int64,但其它几个是string... // 文档上说支持custom_sku_id,但实际好像只支持skuid -func (a *API) SkuDelete(shopID string, skuIDs []int64, customSkuDs []string) (opResult *BatchOpResult, err error) { +func (a *API) SkuDelete(trackInfo, shopID string, skuIDs []int64, customSkuDs []string) (opResult *BatchOpResult, err error) { params := genSkuIDParams(intIDs2Str(skuIDs), strIDs2Str(customSkuDs), "") params[KeyShopID] = shopID - result, err := a.AccessAPI("sku.delete", params) + result, err := a.AccessAPI2("sku.delete", params, trackInfo) if err == nil { opResult, err = handleShopSkuBatchResult(result) } else { @@ -395,10 +395,10 @@ func (a *API) SkuDelete(shopID string, skuIDs []int64, customSkuDs []string) (op return opResult, err } -func (a *API) SkuOnline(shopID string, skuIDs []int64, customSkuDs, upcs []string) (opResult *BatchOpResult, err error) { +func (a *API) SkuOnline(trackInfo, shopID string, skuIDs []int64, customSkuDs, upcs []string) (opResult *BatchOpResult, err error) { params := genSkuIDParams(intIDs2Str(skuIDs), strIDs2Str(customSkuDs), strIDs2Str(upcs)) params[KeyShopID] = shopID - result, err := a.AccessAPI("sku.online", params) + result, err := a.AccessAPI2("sku.online", params, trackInfo) if err == nil { opResult, err = handleShopSkuBatchResult(result) } else { @@ -407,17 +407,17 @@ func (a *API) SkuOnline(shopID string, skuIDs []int64, customSkuDs, upcs []strin return opResult, err } -func (a *API) SkuOnlineOne(shopID string, skuID int64, customSkuID, upc string) (err error) { +func (a *API) SkuOnlineOne(trackInfo, shopID string, skuID int64, customSkuID, upc string) (err error) { params := genSkuIDParams(utils.Int64ToStrNoZero(skuID), customSkuID, upc) params[KeyShopID] = shopID - _, err = a.AccessAPI("sku.online.one", params) + _, err = a.AccessAPI2("sku.online.one", params, trackInfo) return err } -func (a *API) SkuOffline(shopID string, skuIDs []int64, customSkuDs, upcs []string) (opResult *BatchOpResult, err error) { +func (a *API) SkuOffline(trackInfo, shopID string, skuIDs []int64, customSkuDs, upcs []string) (opResult *BatchOpResult, err error) { params := genSkuIDParams(intIDs2Str(skuIDs), strIDs2Str(customSkuDs), strIDs2Str(upcs)) params[KeyShopID] = shopID - result, err := a.AccessAPI("sku.offline", params) + result, err := a.AccessAPI2("sku.offline", params, trackInfo) if err == nil { opResult, err = handleShopSkuBatchResult(result) } else { @@ -426,19 +426,19 @@ func (a *API) SkuOffline(shopID string, skuIDs []int64, customSkuDs, upcs []stri return opResult, err } -func (a *API) SkuOfflineOne(shopID string, skuID int64, customSkuID, upc string) (err error) { +func (a *API) SkuOfflineOne(trackInfo, shopID string, skuID int64, customSkuID, upc string) (err error) { params := genSkuIDParams(utils.Int64ToStrNoZero(skuID), customSkuID, upc) params[KeyShopID] = shopID - _, err = a.AccessAPI("sku.offline.one", params) + _, err = a.AccessAPI2("sku.offline.one", params, trackInfo) return err } -func (a *API) SkuPriceUpdateBatch(shopID string, priceList ShopSkuInfoList, skuIDType int) (opResult *BatchOpResult, err error) { +func (a *API) SkuPriceUpdateBatch(trackInfo, shopID string, priceList ShopSkuInfoList, skuIDType int) (opResult *BatchOpResult, err error) { params := map[string]interface{}{ KeyShopID: shopID, priceUpdateKeyIDMap[skuIDType]: priceList.PriceString(skuIDType), } - result, err := a.AccessAPI("sku.price.update.batch", params) + result, err := a.AccessAPI2("sku.price.update.batch", params, trackInfo) if err == nil { opResult, err = handleShopSkuBatchResult(result) } else { @@ -447,22 +447,22 @@ func (a *API) SkuPriceUpdateBatch(shopID string, priceList ShopSkuInfoList, skuI return opResult, err } -func (a *API) SkuPriceUpdateOne(shopID string, priceInfo *ShopSkuInfo) (err error) { +func (a *API) SkuPriceUpdateOne(trackInfo, shopID string, priceInfo *ShopSkuInfo) (err error) { skuIDType := priceInfo.GuessIDType() params := map[string]interface{}{ KeyShopID: shopID, priceUpdateKeyIDMap[skuIDType]: priceInfo.PriceString(skuIDType), } - _, err = a.AccessAPI("sku.price.update.one", params) + _, err = a.AccessAPI2("sku.price.update.one", params, trackInfo) return err } -func (a *API) SkuStockUpdateBatch(shopID string, stockList ShopSkuInfoList, skuIDType int) (opResult *BatchOpResult, err error) { +func (a *API) SkuStockUpdateBatch(trackInfo, shopID string, stockList ShopSkuInfoList, skuIDType int) (opResult *BatchOpResult, err error) { params := map[string]interface{}{ KeyShopID: shopID, stockUpdateKeyIDMap[skuIDType]: stockList.StockString(skuIDType), } - result, err := a.AccessAPI("sku.stock.update.batch", params) + result, err := a.AccessAPI2("sku.stock.update.batch", params, trackInfo) if err == nil { opResult, err = handleShopSkuBatchResult(result) } else { @@ -471,13 +471,13 @@ func (a *API) SkuStockUpdateBatch(shopID string, stockList ShopSkuInfoList, skuI return opResult, err } -func (a *API) SkuStockUpdateOne(shopID string, stockInfo *ShopSkuInfo) (err error) { +func (a *API) SkuStockUpdateOne(trackInfo, shopID string, stockInfo *ShopSkuInfo) (err error) { skuIDType := stockInfo.GuessIDType() params := map[string]interface{}{ KeyShopID: shopID, stockUpdateKeyIDMap[skuIDType]: stockInfo.StockString(skuIDType), } - _, err = a.AccessAPI("sku.stock.update.one", params) + _, err = a.AccessAPI2("sku.stock.update.one", params, trackInfo) return err } diff --git a/platformapi/ebaiapi/shop_sku_test.go b/platformapi/ebaiapi/shop_sku_test.go index bfa75db2..d55f5e58 100644 --- a/platformapi/ebaiapi/shop_sku_test.go +++ b/platformapi/ebaiapi/shop_sku_test.go @@ -95,7 +95,7 @@ func TestSkuCreate(t *testing.T) { func TestSkuUpdate(t *testing.T) { // 15579787500720732 高级 - result, err := api.SkuUpdate("2", 1557043939079105, map[string]interface{}{ + result, err := api.SkuUpdate(utils.GetUUID(), "2", 1557043939079105, map[string]interface{}{ // "name": "高级商品2015a333约1100g/份", // "rtf": "http://www.rosy.net.cn/rtf.html", "shelf_number": 12, @@ -119,7 +119,7 @@ func TestSkuDelete(t *testing.T) { notExistSkuID = 12345678 existSkuID = 156406677407848 ) - opResult, err := api.SkuDelete(testShopID, []int64{notExistSkuID}, nil) + opResult, err := api.SkuDelete(utils.GetUUID(), testShopID, []int64{notExistSkuID}, nil) t.Log(utils.Format4Output(opResult, false)) if err == nil { t.Log("应该要报错") @@ -127,7 +127,7 @@ func TestSkuDelete(t *testing.T) { if opResult == nil || len(opResult.FailedList) != 1 || opResult.FailedList[0].SkuID != notExistSkuID { t.Logf("错误结果中应该要包含:%d", notExistSkuID) } - opResult, err = api.SkuDelete(testShopID, []int64{existSkuID}, nil) + opResult, err = api.SkuDelete(utils.GetUUID(), testShopID, []int64{existSkuID}, nil) t.Log(utils.Format4Output(opResult, false)) if err != nil { t.Fatal(err) @@ -143,8 +143,9 @@ func TestSkuOnline(t *testing.T) { existSkuID = 156406688807623 ) - opResult, err := api.SkuOnline(testShopID, []int64{notExistSkuID, existSkuID}, nil, nil) + opResult, err := api.SkuOnline(utils.GetUUID(), testShopID, []int64{notExistSkuID, existSkuID}, nil, nil) t.Log(utils.Format4Output(opResult, false)) + t.Log(err.Error()) if err == nil { t.Log("应该要报错") } @@ -157,14 +158,14 @@ func TestSkuOnline(t *testing.T) { } func TestSkuOnlineOne(t *testing.T) { - err := api.SkuOnlineOne(testShopID, 13211, "", "") + err := api.SkuOnlineOne(utils.GetUUID(), testShopID, 13211, "", "") if err == nil { t.Fatal("应该要报错才对") } } func TestSkuOffline(t *testing.T) { - opResult, err := api.SkuOffline(testShopID, []int64{1564049914071288, 156389470507185}, nil, nil) + opResult, err := api.SkuOffline(utils.GetUUID(), testShopID, []int64{1564049914071288, 156389470507185}, nil, nil) t.Log(utils.Format4Output(opResult, false)) if err != nil { t.Fatal(err) @@ -172,7 +173,7 @@ func TestSkuOffline(t *testing.T) { } func TestSkuPriceUpdateBatch(t *testing.T) { - opResult, err := api.SkuPriceUpdateBatch(testShopID, ShopSkuInfoList{ + opResult, err := api.SkuPriceUpdateBatch(utils.GetUUID(), testShopID, ShopSkuInfoList{ &ShopSkuInfo{ SkuID: 156369111807787, SalePrice: 100, @@ -203,7 +204,7 @@ func TestSkuStockUpdateBatch(t *testing.T) { leftNum = 123 ) - opResult, err := api.SkuStockUpdateBatch(testShopID, ShopSkuInfoList{ + opResult, err := api.SkuStockUpdateBatch(utils.GetUUID(), testShopID, ShopSkuInfoList{ &ShopSkuInfo{ SkuID: notExistSkuID, Stock: leftNum, @@ -239,7 +240,7 @@ func TestSkuStockUpdateOne(t *testing.T) { leftNum = 234 ) - err := api.SkuStockUpdateOne(testShopID, &ShopSkuInfo{ + err := api.SkuStockUpdateOne(utils.GetUUID(), testShopID, &ShopSkuInfo{ SkuID: existSkuID, Stock: leftNum, }) diff --git a/platformapi/jdapi/jdapi.go b/platformapi/jdapi/jdapi.go index 1d3dfed9..7c1b5e64 100644 --- a/platformapi/jdapi/jdapi.go +++ b/platformapi/jdapi/jdapi.go @@ -143,7 +143,7 @@ func New(token, appKey, appSecret string, config ...*platformapi.APIConfig) *API } } -func (a *API) AccessAPI(apiStr string, jdParams map[string]interface{}) (retVal map[string]interface{}, err error) { +func (a *API) AccessAPI2(apiStr string, jdParams map[string]interface{}, traceInfo string) (retVal map[string]interface{}, err error) { params := make(map[string]interface{}) params["v"] = "1.0" params["format"] = "json" @@ -182,6 +182,9 @@ func (a *API) AccessAPI(apiStr string, jdParams map[string]interface{}) (retVal request.Header.Set("charset", "UTF-8") request.Header.Set("Content-Type", "application/x-www-form-urlencoded") } + if traceInfo != "" { + request.Header.Set(platformapi.KeyTrackInfo, traceInfo) + } // request.Close = true //todo 为了性能考虑还是不要关闭 return request }, @@ -208,6 +211,10 @@ func (a *API) AccessAPI(apiStr string, jdParams map[string]interface{}) (retVal return retVal, platformapi.RebuildError(err, jdParams, watchKeys) } +func (a *API) AccessAPI(apiStr string, jdParams map[string]interface{}) (retVal map[string]interface{}, err error) { + return a.AccessAPI2(apiStr, jdParams, "") +} + func genNoPageResultParser(codeKey, msgKey, resultKey, okCode string) func(data map[string]interface{}) (interface{}, error) { return func(data map[string]interface{}) (innerData interface{}, err error) { rawInnerCode, ok := data[codeKey] @@ -236,11 +243,11 @@ func formatErrorMsg(msg interface{}) (strMsg string) { return strMsg } -func (a *API) AccessAPINoPage(apiStr string, jdParams map[string]interface{}, keyToRemove, keyToKeep []string, resultParser func(data map[string]interface{}) (interface{}, error)) (interface{}, error) { +func (a *API) AccessAPINoPage2(apiStr string, jdParams map[string]interface{}, keyToRemove, keyToKeep []string, resultParser func(data map[string]interface{}) (interface{}, error), traceInfo string) (interface{}, error) { if resultParser == nil { resultParser = genNoPageResultParser("code", "msg", "result", "0") } - jsonResult, err := a.AccessAPI(apiStr, jdParams) + jsonResult, err := a.AccessAPI2(apiStr, jdParams, traceInfo) if err != nil { return nil, err } @@ -257,6 +264,10 @@ func (a *API) AccessAPINoPage(apiStr string, jdParams map[string]interface{}, ke return result, err } +func (a *API) AccessAPINoPage(apiStr string, jdParams map[string]interface{}, keyToRemove, keyToKeep []string, resultParser func(data map[string]interface{}) (interface{}, error)) (interface{}, error) { + return a.AccessAPINoPage2(apiStr, jdParams, keyToRemove, keyToKeep, resultParser, "") +} + func normalHavePageResultParser(data map[string]interface{}, totalCount int) ([]interface{}, int, error) { var result map[string]interface{} var retVal []interface{} diff --git a/platformapi/jdapi/order.go b/platformapi/jdapi/order.go index f7485090..ee15e905 100644 --- a/platformapi/jdapi/order.go +++ b/platformapi/jdapi/order.go @@ -622,3 +622,15 @@ func ProcessQuestionPic(questionPic string) (outQuestionPic string) { } return outQuestionPic } + +// 订单商家加小费接口 +// https://openo2o.jddj.com/staticnew/widgets/resources.html?groupid=169&apiid=ed9e3ca7325c4d4d8ceaf959ed0e7a62 +func (a *API) OrderAddTips(OrderID string, tips int, pin string) (err error) { + jdParams := map[string]interface{}{ + "orderId": OrderID, + "tips": tips, + "pin": utils.GetAPIOperator(pin), + } + _, err = a.AccessAPINoPage("order/addTips", jdParams, nil, nil, nullResultParser) + return err +} diff --git a/platformapi/jdapi/store_sku.go b/platformapi/jdapi/store_sku.go index 07700cd7..08ae1886 100644 --- a/platformapi/jdapi/store_sku.go +++ b/platformapi/jdapi/store_sku.go @@ -97,7 +97,7 @@ type StoreSkuBatchUpdateResponse struct { // 根据商家商品编码和商家门店编码批量修改门店价格接口 // https://opendj.jd.com/staticnew/widgets/resources.html?groupid=205&apiid=fcbf346648a54d03b92dec8fa62ea643 -func (a *API) UpdateVendorStationPrice(outStationNo, stationNo string, skuPriceInfoList []*SkuPriceInfo) (responseList []*StoreSkuBatchUpdateResponse, err error) { +func (a *API) UpdateVendorStationPrice(trackInfo string, outStationNo, stationNo string, skuPriceInfoList []*SkuPriceInfo) (responseList []*StoreSkuBatchUpdateResponse, err error) { jdParams := map[string]interface{}{ "skuPriceInfoList": skuPriceInfoList, } @@ -106,7 +106,7 @@ func (a *API) UpdateVendorStationPrice(outStationNo, stationNo string, skuPriceI } else { jdParams["stationNo"] = stationNo } - result, err := a.AccessAPINoPage("venderprice/updateStationPrice", jdParams, nil, nil, genNoPageResultParser("code", "msg", "result", "0")) + result, err := a.AccessAPINoPage2("venderprice/updateStationPrice", jdParams, nil, nil, genNoPageResultParser("code", "msg", "result", "0"), trackInfo) if result != nil { var err2 error if responseList, err2 = a.handleBatchOpResult(len(skuPriceInfoList), result, "json2"); err2 != nil && err == nil { @@ -119,13 +119,13 @@ func (a *API) UpdateVendorStationPrice(outStationNo, stationNo string, skuPriceI // 根据到家商品编码和到家门店编码修改门店价格接口 // https://opendj.jd.com/staticnew/widgets/resources.html?groupid=205&apiid=45f83ef7c6e74dad94b6b68d3c50b673 // 单商品用此接口 -func (a *API) UpdateStationPrice(skuId int64, stationNo string, price int) (string, error) { +func (a *API) UpdateStationPrice(trackInfo string, skuId int64, stationNo string, price int) (string, error) { jdParams := map[string]interface{}{ "skuId": skuId, "stationNo": stationNo, "price": price, } - result, err := a.AccessAPINoPage("price/updateStationPrice", jdParams, nil, nil, nil) + result, err := a.AccessAPINoPage2("price/updateStationPrice", jdParams, nil, nil, nil, trackInfo) if err == nil && result != nil { return utils.Interface2String(result), nil } @@ -165,7 +165,7 @@ func (a *API) handleBatchOpResult(batchCount int, result interface{}, tagName st // 根据商家商品编码和商家门店编码批量修改现货库存接口 // https://opendj.jd.com/staticnew/widgets/resources.html?groupid=200&apiid=10812f9fc7ee4564b552f19270a7e92e -func (a *API) BatchUpdateCurrentQtys(outStationNo, stationNo string, skuStockList []*SkuStock, userPin string) (responseList []*StoreSkuBatchUpdateResponse, err error) { +func (a *API) BatchUpdateCurrentQtys(trackInfo, outStationNo, stationNo string, skuStockList []*SkuStock, userPin string) (responseList []*StoreSkuBatchUpdateResponse, err error) { if (outStationNo == "" && stationNo == "") || (outStationNo != "" && stationNo != "") { return nil, errors.New("outStationNo and stationNo can not all be empty or have value") } @@ -178,7 +178,7 @@ func (a *API) BatchUpdateCurrentQtys(outStationNo, stationNo string, skuStockLis } else { jdParams["stationNo"] = stationNo } - result, err := a.AccessAPINoPage("stock/batchUpdateCurrentQtys", jdParams, nil, nil, genNoPageResultParser("retCode", "retMsg", "data", "0")) + result, err := a.AccessAPINoPage2("stock/batchUpdateCurrentQtys", jdParams, nil, nil, genNoPageResultParser("retCode", "retMsg", "data", "0"), trackInfo) if result != nil { var err2 error if responseList, err2 = a.handleBatchOpResult(len(skuStockList), result, ""); err2 != nil && err == nil { @@ -191,14 +191,14 @@ func (a *API) BatchUpdateCurrentQtys(outStationNo, stationNo string, skuStockLis // 根据商家商品编码和商家门店编码更新门店现货库存接口 // https://opendj.jd.com/staticnew/widgets/resources.html?groupid=200&apiid=a78664d4ead349da95d2f4576ed18d7f // 此接口基本可以不用 -func (a *API) StockUpdate(outStationNo string, outSkuID string, currentQty int) error { +func (a *API) StockUpdate(trackInfo string, outStationNo string, outSkuID string, currentQty int) error { // !这个接口的stationNo与skuId好像本身就写错了的 jdParams := map[string]interface{}{ "stationNo": outStationNo, "skuId": outSkuID, "currentQty": currentQty, } - _, err := a.AccessAPINoPage("stock/update", jdParams, nil, nil, genNoPageResultParser("retCode", "retMsg", "", "0")) + _, err := a.AccessAPINoPage2("stock/update", jdParams, nil, nil, genNoPageResultParser("retCode", "retMsg", "", "0"), trackInfo) if err == nil { return nil } @@ -208,13 +208,13 @@ func (a *API) StockUpdate(outStationNo string, outSkuID string, currentQty int) // 根据到家商品编码和到家门店编码更新门店现货库存 // https://openo2o.jddj.com/staticnew/widgets/resources.html?groupid=200&apiid=af70e699d4974e1683128742018f6381 // 单商品用此接口 -func (a *API) UpdateCurrentQty(stationNo string, skuID int64, currentQty int) error { +func (a *API) UpdateCurrentQty(trackInfo string, stationNo string, skuID int64, currentQty int) error { jdParams := map[string]interface{}{ "stationNo": stationNo, "skuId": skuID, "currentQty": currentQty, } - _, err := a.AccessAPINoPage("update/currentQty", jdParams, nil, nil, genNoPageResultParser("retCode", "retMsg", "", "0")) + _, err := a.AccessAPINoPage2("update/currentQty", jdParams, nil, nil, genNoPageResultParser("retCode", "retMsg", "", "0"), trackInfo) if err == nil { return nil } @@ -224,11 +224,11 @@ func (a *API) UpdateCurrentQty(stationNo string, skuID int64, currentQty int) er // 根据到家商品编码和到家门店编码批量修改门店商品可售状态接口 // https://opendj.jd.com/staticnew/widgets/resources.html?groupid=200&apiid=b783a508e2cf4aca94681e4eed9af5bc // 尽量不用这个接口,用下面那个,原因是这个不支持设置操作人,BatchUpdateVendibility可以 -func (a *API) UpdateVendibility(listBaseStockCenterRequest []*QueryStockRequest) (responseList []*StoreSkuBatchUpdateResponse, err error) { +func (a *API) UpdateVendibility(trackInfo string, listBaseStockCenterRequest []*QueryStockRequest) (responseList []*StoreSkuBatchUpdateResponse, err error) { jdParams := map[string]interface{}{ "listBaseStockCenterRequest": listBaseStockCenterRequest, } - result, err := a.AccessAPINoPage("stock/updateVendibility", jdParams, nil, nil, genNoPageResultParser("retCode", "retMsg", "data", "0")) + result, err := a.AccessAPINoPage2("stock/updateVendibility", jdParams, nil, nil, genNoPageResultParser("retCode", "retMsg", "data", "0"), trackInfo) if result != nil { var err2 error if responseList, err2 = a.handleBatchOpResult(len(listBaseStockCenterRequest), result, ""); err2 != nil && err == nil { @@ -240,7 +240,7 @@ func (a *API) UpdateVendibility(listBaseStockCenterRequest []*QueryStockRequest) // 根据商家商品编码和门店编码批量修改门店商品可售状态接口 // https://opendj.jd.com/staticnew/widgets/resources.html?groupid=200&apiid=ac6f559ebabf4b70bc423687638e07c1 -func (a *API) BatchUpdateVendibility(outStationNo, stationNo string, stockVendibilityList []*StockVendibility, userPin string) (responseList []*StoreSkuBatchUpdateResponse, err error) { +func (a *API) BatchUpdateVendibility(trackInfo, outStationNo, stationNo string, stockVendibilityList []*StockVendibility, userPin string) (responseList []*StoreSkuBatchUpdateResponse, err error) { if (outStationNo == "" && stationNo == "") || (outStationNo != "" && stationNo != "") { return nil, errors.New("outStationNo and stationNo can not all be empty or have value") } @@ -253,7 +253,7 @@ func (a *API) BatchUpdateVendibility(outStationNo, stationNo string, stockVendib } else { jdParams["stationNo"] = stationNo } - result, err := a.AccessAPINoPage("stock/batchUpdateVendibility", jdParams, nil, nil, genNoPageResultParser("retCode", "retMsg", "data", "0")) + result, err := a.AccessAPINoPage2("stock/batchUpdateVendibility", jdParams, nil, nil, genNoPageResultParser("retCode", "retMsg", "data", "0"), trackInfo) if result != nil { var err2 error if responseList, err2 = a.handleBatchOpResult(len(stockVendibilityList), result, ""); err2 != nil && err == nil { diff --git a/platformapi/jdapi/store_sku_test.go b/platformapi/jdapi/store_sku_test.go index 5319c147..ba7655de 100644 --- a/platformapi/jdapi/store_sku_test.go +++ b/platformapi/jdapi/store_sku_test.go @@ -46,7 +46,7 @@ func TestQueryStockCenter(t *testing.T) { } func TestBatchUpdateVendibility(t *testing.T) { - result, err := api.BatchUpdateVendibility("100130", "", []*StockVendibility{ + result, err := api.BatchUpdateVendibility("", "100130", "", []*StockVendibility{ &StockVendibility{ OutSkuId: "26919", DoSale: true, @@ -59,7 +59,7 @@ func TestBatchUpdateVendibility(t *testing.T) { } func TestUpdateVendibility(t *testing.T) { - result, err := api.UpdateVendibility([]*QueryStockRequest{ + result, err := api.UpdateVendibility("", []*QueryStockRequest{ &QueryStockRequest{ StationNo: "11053496", SkuId: 2012224772, diff --git a/platformapi/mtwmapi/act.go b/platformapi/mtwmapi/act.go index bdadd767..0caac913 100644 --- a/platformapi/mtwmapi/act.go +++ b/platformapi/mtwmapi/act.go @@ -186,7 +186,7 @@ func (a *API) FullDiscountBatchSave(poiCode string, actInfo *FullDiscountActInfo if actInfo.ActType == ActTypeSkuFullDiscount { params["app_foods"] = string(utils.MustMarshal(actSkuList)) } - result, err := a.AccessAPI2("act/full/discount/batchsave", false, params, resultKeySuccessMsg) + result, err := a.AccessAPI2("act/full/discount/batchsave", false, params, resultKeySuccessMsg, "") if err == nil { err = utils.UnmarshalUseNumber([]byte(result.(string)), &actIDList) } @@ -322,7 +322,7 @@ func (a *API) RetailDiscountBatchSave(poiCode string, actData []*RetailDiscountA result, err := a.AccessAPI2("act/retail/discount/batchsave", false, map[string]interface{}{ KeyAppPoiCode: poiCode, "act_data": string(utils.MustMarshal(actData)), - }, resultKeySuccessMsg) + }, resultKeySuccessMsg, "") if err == nil { err = utils.UnmarshalUseNumber([]byte(result.(string)), &actResult) } @@ -394,7 +394,7 @@ func (a *API) InStoreCouponBatchSave(poiCode string, limitTime *LimitTime, coupo KeyAppPoiCode: poiCode, "limit_time": string(utils.MustMarshal(limitTime)), "act_data": string(utils.MustMarshal(couponInfoList)), - }, resultKeySuccessMsg) + }, resultKeySuccessMsg, "") if err == nil { err = utils.UnmarshalUseNumber([]byte(result.(string)), &couponResultList) } diff --git a/platformapi/mtwmapi/mtwmapi.go b/platformapi/mtwmapi/mtwmapi.go index 6bddaf05..3aa53dff 100644 --- a/platformapi/mtwmapi/mtwmapi.go +++ b/platformapi/mtwmapi/mtwmapi.go @@ -112,7 +112,7 @@ func (a *API) signParams(signURL string, params map[string]interface{}) string { return fmt.Sprintf("%x", md5.Sum([]byte(finalStr))) } -func (a *API) AccessAPI2(cmd string, isGet bool, bizParams map[string]interface{}, resultKey string) (retVal interface{}, err error) { +func (a *API) AccessAPI2(cmd string, isGet bool, bizParams map[string]interface{}, resultKey, trackInfo string) (retVal interface{}, err error) { params := make(map[string]interface{}) params["timestamp"] = time.Now().Unix() params["app_id"] = a.appID @@ -155,6 +155,9 @@ func (a *API) AccessAPI2(cmd string, isGet bool, bizParams map[string]interface{ } request.Header.Set("charset", "UTF-8") } + if trackInfo != "" { + request.Header.Set(platformapi.KeyTrackInfo, trackInfo) + } // request.Close = true //todo 为了性能考虑还是不要关闭 return request }, @@ -184,5 +187,5 @@ func (a *API) AccessAPI2(cmd string, isGet bool, bizParams map[string]interface{ } func (a *API) AccessAPI(cmd string, isGet bool, bizParams map[string]interface{}) (retVal interface{}, err error) { - return a.AccessAPI2(cmd, isGet, bizParams, resultKeyData) + return a.AccessAPI2(cmd, isGet, bizParams, resultKeyData, "") } diff --git a/platformapi/mtwmapi/order.go b/platformapi/mtwmapi/order.go index c866efff..c3498b0e 100644 --- a/platformapi/mtwmapi/order.go +++ b/platformapi/mtwmapi/order.go @@ -550,3 +550,14 @@ func (a *API) GetOrderIdByDaySeq(poiCode string, dateTime time.Time, seqStart, s } return vendorOrderIDs, err } + +// 众包配送单追加小费 +// https://developer.waimai.meituan.com/home/docDetail/158 +func (a *API) OrderUpdateTip(orderID int64, tipAmount float64) (err error) { + params := map[string]interface{}{ + KeyOrderID: orderID, + "tip_amount": tipAmount, + } + _, err = a.AccessAPI("order/zhongbao/update/tip", true, params) + return err +} diff --git a/platformapi/mtwmapi/retail.go b/platformapi/mtwmapi/retail.go index cd444246..856c2cef 100644 --- a/platformapi/mtwmapi/retail.go +++ b/platformapi/mtwmapi/retail.go @@ -154,16 +154,6 @@ func (a *API) RetailCatList(poiCode string) (retailCatList []*RetailCategoryInfo return nil, err } -// 商品名最长30个字符(非字节) -// 不能包含敏感词:特级 -func (a *API) RetailInitData(poiCode, foodCode string, params map[string]interface{}) (err error) { - _, err = a.AccessAPI("retail/initdata", false, utils.MergeMaps(map[string]interface{}{ - KeyAppPoiCode: poiCode, - KeyAppFoodCode: foodCode, - }, params)) - return err -} - // offset 从0开始,limit最大不能超过200 // 返回的app_poi_code始终是空,手动建的商品app_food_code也为空(导致无法通过API删除) func (a *API) RetailList(poiCode string, offset, limit int) (foodList []*AppFood, err error) { @@ -209,33 +199,42 @@ func handleRetailBatchResultByRegexp(result interface{}) (failedFoodList []*AppF return failedFoodList, err } -func (a *API) RetailBatchInitData(poiCode string, foodDataList []map[string]interface{}) (failedFoodList []*AppFoodResult, err error) { +// 商品名最长30个字符(非字节) +func (a *API) RetailInitData(trackInfo, poiCode, foodCode string, params map[string]interface{}) (err error) { + _, err = a.AccessAPI2("retail/initdata", false, utils.MergeMaps(map[string]interface{}{ + KeyAppPoiCode: poiCode, + KeyAppFoodCode: foodCode, + }, params), resultKeyData, trackInfo) + return err +} + +func (a *API) RetailBatchInitData(trackInfo, poiCode string, foodDataList []map[string]interface{}) (failedFoodList []*AppFoodResult, err error) { result, err := a.AccessAPI2("retail/batchinitdata", false, map[string]interface{}{ KeyAppPoiCode: poiCode, "food_data": string(utils.MustMarshal(foodDataList)), - }, resultKeyMsg) + }, resultKeyMsg, trackInfo) if err == nil { failedFoodList, err = handleRetailBatchResult(result) } return failedFoodList, err } -func (a *API) RetailSkuPrice(poiCode string, foodData []*BareStoreFoodInfo) (failedFoodList []*AppFoodResult, err error) { +func (a *API) RetailSkuPrice(trackInfo, poiCode string, foodData []*BareStoreFoodInfo) (failedFoodList []*AppFoodResult, err error) { result, err := a.AccessAPI2("retail/sku/price", false, map[string]interface{}{ KeyAppPoiCode: poiCode, "food_data": string(utils.MustMarshal(foodData)), - }, resultKeyMsg) + }, resultKeyMsg, trackInfo) if err == nil { failedFoodList, err = handleRetailBatchResult(result) } return failedFoodList, err } -func (a *API) RetailSkuStock(poiCode string, foodData []*BareStoreFoodInfo) (failedFoodList []*AppFoodResult, err error) { +func (a *API) RetailSkuStock(trackInfo, poiCode string, foodData []*BareStoreFoodInfo) (failedFoodList []*AppFoodResult, err error) { result, err := a.AccessAPI2("retail/sku/stock", false, map[string]interface{}{ KeyAppPoiCode: poiCode, "food_data": string(utils.MustMarshal(foodData)), - }, resultKeyMsg) + }, resultKeyMsg, trackInfo) if err == nil { failedFoodList, err = handleRetailBatchResult(result) } @@ -243,12 +242,12 @@ func (a *API) RetailSkuStock(poiCode string, foodData []*BareStoreFoodInfo) (fai } // retail/sku/sellStatus在部分失败时会返回错误,其它相应的批处理函数则会返回成功 -func (a *API) RetailSkuSellStatus(poiCode string, foodData []*BareStoreFoodInfo, sellStatus int) (failedFoodList []*AppFoodResult, err error) { +func (a *API) RetailSkuSellStatus(trackInfo, poiCode string, foodData []*BareStoreFoodInfo, sellStatus int) (failedFoodList []*AppFoodResult, err error) { _, err = a.AccessAPI2("retail/sku/sellStatus", false, map[string]interface{}{ KeyAppPoiCode: poiCode, "food_data": string(utils.MustMarshal(foodData)), "sell_status": sellStatus, - }, resultKeyMsg) + }, resultKeyMsg, trackInfo) if err != nil { if errExt, ok := err.(*utils.ErrorWithCode); ok { failedFoodList, _ = handleRetailBatchResultByRegexp(errExt.ErrMsg()) @@ -281,20 +280,20 @@ func (a *API) RetailSkuSave(poiCode, foodCode string, standardSkus, unstandardSk return err } -func (a *API) RetailDelete(poiCode, foodCode string) (err error) { - _, err = a.AccessAPI("retail/delete", false, map[string]interface{}{ +func (a *API) RetailDelete(trackInfo, poiCode, foodCode string) (err error) { + _, err = a.AccessAPI2("retail/delete", false, map[string]interface{}{ KeyAppPoiCode: poiCode, KeyAppFoodCode: foodCode, - }) + }, resultKeyData, trackInfo) return err } -func (a *API) RetailSkuDelete(poiCode, foodCode, skuID string) (err error) { - _, err = a.AccessAPI("retail/sku/delete", false, map[string]interface{}{ +func (a *API) RetailSkuDelete(trackInfo, poiCode, foodCode, skuID string) (err error) { + _, err = a.AccessAPI2("retail/sku/delete", false, map[string]interface{}{ KeyAppPoiCode: poiCode, KeyAppFoodCode: foodCode, "sku_id": skuID, - }) + }, resultKeyData, trackInfo) return err } @@ -310,7 +309,7 @@ func (a *API) RetailGetSpTagIds() (tagIds []*RetailTag, err error) { } // 此接口将申请授权后方可接入 -func (a *API) RetailCatSkuBatchDelete(poiCode string, catNames []string, secondaryCatNames []string, foodCodes []string) (err error) { +func (a *API) RetailCatSkuBatchDelete(trackInfo, poiCode string, catNames []string, secondaryCatNames []string, foodCodes []string) (err error) { params := map[string]interface{}{ KeyAppPoiCode: poiCode, } @@ -323,7 +322,7 @@ func (a *API) RetailCatSkuBatchDelete(poiCode string, catNames []string, seconda if len(foodCodes) > 0 { params["app_food_codes"] = strings.Join(foodCodes, ",") } - _, err = a.AccessAPI("retailCat/batchdelete/catandretail", false, params) + _, err = a.AccessAPI2("retailCat/batchdelete/catandretail", false, params, resultKeyData, trackInfo) return err } diff --git a/platformapi/mtwmapi/retail_test.go b/platformapi/mtwmapi/retail_test.go index 7a1cec24..7e1e9913 100644 --- a/platformapi/mtwmapi/retail_test.go +++ b/platformapi/mtwmapi/retail_test.go @@ -70,21 +70,21 @@ func TestRetailGetSpTagIds(t *testing.T) { } func TestRetailCatSkuBatchDelete(t *testing.T) { - err := api.RetailCatSkuBatchDelete(testPoiCode, []string{"测试一级类别"}, nil, nil) + err := api.RetailCatSkuBatchDelete(utils.GetUUID(), testPoiCode, []string{"测试一级类别"}, nil, nil) if err != nil { t.Fatal(err) } } func TestRetailDelete(t *testing.T) { - err := api.RetailDelete(testPoiCode, "614") + err := api.RetailDelete(utils.GetUUID(), testPoiCode, "614") if err != nil { t.Fatal(err) } } func TestRetailBatchInitData(t *testing.T) { - failedFoods, err := api.RetailBatchInitData(testPoiCode, []map[string]interface{}{ + failedFoods, err := api.RetailBatchInitData(utils.GetUUID(), testPoiCode, []map[string]interface{}{ map[string]interface{}{ "app_food_code": "23841", "box_num": 0, @@ -139,7 +139,7 @@ func TestRetailBatchInitData(t *testing.T) { } func TestRetailSkuPrice(t *testing.T) { - result, err := api.RetailSkuPrice(testPoiCode, []*BareStoreFoodInfo{ + result, err := api.RetailSkuPrice(utils.GetUUID(), testPoiCode, []*BareStoreFoodInfo{ &BareStoreFoodInfo{ AppFoodCode: "23841", Skus: []*BareStoreSkuInfo{ @@ -166,7 +166,7 @@ func TestRetailSkuPrice(t *testing.T) { } func TestRetailSkuStock(t *testing.T) { - result, err := api.RetailSkuStock(testPoiCode, []*BareStoreFoodInfo{ + result, err := api.RetailSkuStock(utils.GetUUID(), testPoiCode, []*BareStoreFoodInfo{ &BareStoreFoodInfo{ AppFoodCode: "23841", Skus: []*BareStoreSkuInfo{ @@ -194,7 +194,7 @@ func TestRetailSkuStock(t *testing.T) { } func TestRetailSkuSellStatus(t *testing.T) { - result, err := api.RetailSkuSellStatus(testPoiCode, []*BareStoreFoodInfo{ + result, err := api.RetailSkuSellStatus(utils.GetUUID(), testPoiCode, []*BareStoreFoodInfo{ &BareStoreFoodInfo{ AppFoodCode: "23841", Skus: []*BareStoreSkuInfo{ diff --git a/platformapi/platformapi.go b/platformapi/platformapi.go index ab911c43..63e04287 100644 --- a/platformapi/platformapi.go +++ b/platformapi/platformapi.go @@ -21,6 +21,8 @@ const ( DefSleepSecondWhenExceedLimit = 3 * time.Second DefMaxRecoverableRetryCount = 1 DefMaxExceedLimitRetryCount = 25 + + KeyTrackInfo = "TrackInfo" ) type APIRetryConfig struct { @@ -98,24 +100,30 @@ func AccessPlatformAPIWithRetry(client *http.Client, handleRequest func() *http. request.Body = ioutil.NopCloser(io.TeeReader(request.Body, savedBuf)) } beginTime := time.Now() - trackID := utils.GetUUID() - baseapi.SugarLogger.Debugf("begin AccessPlatformAPIWithRetry:%s do:%s url:%v", trackID, request.Method, request.URL) + trackInfo := request.Header.Get(KeyTrackInfo) + if trackInfo == "" { + trackInfo = utils.GetUUID() + // request.Header.Set(KeyTrackInfo, trackID) + } else { + request.Header.Del(KeyTrackInfo) + } + baseapi.SugarLogger.Debugf("begin AccessPlatformAPIWithRetry:%s do:%s url:%v", trackInfo, request.Method, request.URL) response, err := client.Do(request) - baseapi.SugarLogger.Debugf("end AccessPlatformAPIWithRetry:%s do url:%v, request:%s", trackID, request.URL, getClonedData(request.URL, savedBuf)) + baseapi.SugarLogger.Debugf("end AccessPlatformAPIWithRetry:%s do url:%v, request:%s", trackInfo, request.URL, getClonedData(request.URL, savedBuf)) if err != nil { - baseapi.SugarLogger.Debugf("AccessPlatformAPIWithRetry:%s client.Get return err:%v", trackID, err) + baseapi.SugarLogger.Debugf("AccessPlatformAPIWithRetry:%s client.Get return err:%v", trackInfo, err) err, ok := err.(net.Error) recoverableErrorRetryCount++ if ok /*&& err.Timeout()*/ && recoverableErrorRetryCount <= config.MaxRecoverableRetryCount { // 只要是网络错误都重试 continue } else { - baseapi.SugarLogger.Errorf("AccessPlatformAPIWithRetry:%s access api url:%v, request:%v, error:%v", trackID, request.URL, getClonedData(request.URL, savedBuf), err) + baseapi.SugarLogger.Errorf("AccessPlatformAPIWithRetry:%s access api url:%v, request:%v, error:%v", trackInfo, request.URL, getClonedData(request.URL, savedBuf), err) return ErrAPIAccessFailed } } usedMilliSecond := time.Now().Sub(beginTime) / time.Millisecond if usedMilliSecond > 5000 { - baseapi.SugarLogger.Infof("AccessPlatformAPIWithRetry:%s access api too slow, url:%v, request:%v, usedMilliSecond:%d", trackID, request.URL, getClonedData(request.URL, savedBuf), usedMilliSecond) + baseapi.SugarLogger.Infof("AccessPlatformAPIWithRetry:%s access api too slow, url:%v, request:%v, usedMilliSecond:%d", trackInfo, request.URL, getClonedData(request.URL, savedBuf), usedMilliSecond) } defer response.Body.Close() if response.StatusCode != http.StatusOK { @@ -127,9 +135,9 @@ func AccessPlatformAPIWithRetry(client *http.Client, handleRequest func() *http. } } if bodyData, err := ioutil.ReadAll(response.Body); err == nil { - baseapi.SugarLogger.Errorf("AccessPlatformAPIWithRetry:%s HTTP code is:%d, url:%v, request:%v, response:%s", trackID, response.StatusCode, request.URL, getClonedData(request.URL, savedBuf), string(bodyData)) + baseapi.SugarLogger.Errorf("AccessPlatformAPIWithRetry:%s HTTP code is:%d, url:%v, request:%v, response:%s", trackInfo, response.StatusCode, request.URL, getClonedData(request.URL, savedBuf), string(bodyData)) } else { - baseapi.SugarLogger.Errorf("AccessPlatformAPIWithRetry:%s ioutil.ReadAll failed, HTTP code is:%d, url:%v, request:%v, error:%v", trackID, response.StatusCode, request.URL, getClonedData(request.URL, savedBuf), err) + baseapi.SugarLogger.Errorf("AccessPlatformAPIWithRetry:%s ioutil.ReadAll failed, HTTP code is:%d, url:%v, request:%v, error:%v", trackInfo, response.StatusCode, request.URL, getClonedData(request.URL, savedBuf), err) } return ErrHTTPCodeIsNot200 } @@ -140,14 +148,14 @@ func AccessPlatformAPIWithRetry(client *http.Client, handleRequest func() *http. ) bodyData, err := ioutil.ReadAll(response.Body) if err != nil { - baseapi.SugarLogger.Errorf("AccessPlatformAPIWithRetry:%s ioutil.ReadAll failed, url:%v, request:%v, error:%v", trackID, request.URL, getClonedData(request.URL, savedBuf), err) + baseapi.SugarLogger.Errorf("AccessPlatformAPIWithRetry:%s ioutil.ReadAll failed, url:%v, request:%v, error:%v", trackInfo, request.URL, getClonedData(request.URL, savedBuf), err) errLevel = ErrLevelRecoverableErr // 读取数据错误,或数据格式错误认为是偶发情况,重试 } else { if err = utils.TryUnmarshalUseNumber(bodyData, &bodyMap); err != nil { parseJSONErr = err err = nil // 尝试忽略解析成json错 } else { - baseapi.SugarLogger.Debugf("AccessPlatformAPIWithRetry:%s url:%v, response:%s", trackID, request.URL, utils.Format4Output(bodyMap, true)) + baseapi.SugarLogger.Debugf("AccessPlatformAPIWithRetry:%s url:%v, response:%s", trackInfo, request.URL, utils.Format4Output(bodyMap, true)) } errLevel, err = handleResponse(response, string(bodyData), bodyMap) if err != nil && parseJSONErr != nil { @@ -157,7 +165,7 @@ func AccessPlatformAPIWithRetry(client *http.Client, handleRequest func() *http. if bodyDataLen > maxOutputLen { bodyData2 = bodyData2[:maxOutputLen] } - baseapi.SugarLogger.Infof("AccessPlatformAPIWithRetry:%s TryUnmarshalUseNumber failed, url:%v, request:%v, error:%v, bodyData:%s", trackID, request.URL, getClonedData(request.URL, savedBuf), parseJSONErr, string(bodyData2)) + baseapi.SugarLogger.Infof("AccessPlatformAPIWithRetry:%s TryUnmarshalUseNumber failed, url:%v, request:%v, error:%v, bodyData:%s", trackInfo, request.URL, getClonedData(request.URL, savedBuf), parseJSONErr, string(bodyData2)) } } @@ -175,7 +183,7 @@ func AccessPlatformAPIWithRetry(client *http.Client, handleRequest func() *http. continue } } - baseapi.SugarLogger.Infof("AccessPlatformAPIWithRetry:%s failed, url:%v, response:%s, error:%v", trackID, request.URL, utils.Format4Output(bodyMap, true), err) + baseapi.SugarLogger.Infof("AccessPlatformAPIWithRetry:%s failed, url:%v, response:%s, error:%v", trackInfo, request.URL, utils.Format4Output(bodyMap, true), err) return err } }