package ebaiapi import ( "fmt" "net/http" "git.rosy.net.cn/baseapi" "git.rosy.net.cn/baseapi/platformapi" "git.rosy.net.cn/baseapi/utils" ) const ( accessStorePageCookieName = "shop.o2o.jd.com1" storeURL = "https://be.ele.me" ) func (a *API) SetStoreCookie(key, value string) { a.locker.Lock() defer a.locker.Unlock() a.storeCookies[key] = value } func (a *API) GetStoreCookie(key string) string { a.locker.RLock() defer a.locker.RUnlock() return a.storeCookies[key] } func (a *API) AccessStorePage(subURL string) (retVal map[string]interface{}, err error) { a.locker.RLock() storeCookieLen := len(a.storeCookies) a.locker.RUnlock() if storeCookieLen == 0 { return nil, fmt.Errorf("需要设置Store Cookie才能使用此方法") } err = platformapi.AccessPlatformAPIWithRetry(a.client, func() *http.Request { fullURL := utils.GenerateGetURL(storeURL, subURL, nil) // baseapi.SugarLogger.Debug(fullURL) request, _ := http.NewRequest(http.MethodGet, fullURL, nil) if err != nil { return nil } a.locker.RLock() for k, v := range a.storeCookies { request.AddCookie(&http.Cookie{ Name: k, Value: v, }) } a.locker.RUnlock() return request }, a.config, func(jsonResult1 map[string]interface{}) (errLevel string, err error) { retVal = jsonResult1 code := int(utils.MustInterface2Int64(jsonResult1["errno"])) if code == ResponseCodeSuccess { retVal = jsonResult1["data"].(map[string]interface{}) return platformapi.ErrLevelSuccess, nil } newErr := utils.NewErrorIntCode(jsonResult1["errmsg"].(string), code) baseapi.SugarLogger.Debugf("ebai AccessStorePage failed, jsonResult1:%s", utils.Format4Output(jsonResult1, true)) return platformapi.ErrLevelCodeIsNotOK, newErr }) return retVal, err } func (a *API) GetRealMobile4Order(orderId string) (mobile string, err error) { retVal, err := a.GetStoreOrderInfo(orderId) if err == nil { return retVal["order_basic"].(map[string]interface{})["user_phone_call"].(string), nil } return "", err } func (a *API) GetStoreOrderInfo(orderId string) (storeOrderInfo map[string]interface{}, err error) { retVal, err := a.AccessStorePage(fmt.Sprintf("crm/orderlist?keyword=%s", orderId)) // baseapi.SugarLogger.Debug(utils.Format4Output(retVal, false)) if err == nil { resultList := retVal["order_list"].([]interface{}) if len(resultList) > 0 { return resultList[0].(map[string]interface{}), nil } return nil, fmt.Errorf("不能找到订单:%s的相关信息", orderId) } return nil, err } func (a *API) GetStoreOrderInfoList(fromTime, toTime string, shopID string, orderStatus int) (storeOrderList []map[string]interface{}, err error) { // pageSize := 20 pageNo := 1 urlTemplate := "crm/orderlist?start_timestamp=%d&end_timestamp=%d&shop_id=%s" params := []interface{}{ utils.Str2Time(fromTime).Unix(), utils.Str2Time(toTime).Unix(), shopID, } if orderStatus >= 0 { urlTemplate += "&order_status=%d" params = append(params, orderStatus) } fixedURL := fmt.Sprintf(urlTemplate, params...) for { retVal, err := a.AccessStorePage(fixedURL + "&page=" + utils.Int2Str(pageNo)) // baseapi.SugarLogger.Debug(utils.Format4Output(retVal, false)) if err == nil { resultList := retVal["order_list"].([]interface{}) storeOrderList = append(storeOrderList, utils.Slice2MapSlice(resultList)...) if len(storeOrderList) >= int(utils.MustInterface2Int64(retVal["order_count"])) { return storeOrderList, nil } pageNo++ } else { return nil, err } } return nil, err }