package freshfood import ( "errors" "net/http" "net/url" "time" "github.com/astaxie/beego" "git.rosy.net.cn/jx-callback/globals" ) const ( URL_WX_UPDATE_ACCESSTOKEN = "weixin/accesstoken/update" URL_FRESHFOOD_ELEME_TOKENUPDATE = "eleme/token/update" ) const ( retryCount = 1 ) type API struct { baseURL string client *http.Client } var ( ErrFreshFooddReturnNot200 = errors.New("freshfood return code is not 200") ) var ( FreshFoodAPI *API ) func init() { FreshFoodAPI = New(beego.AppConfig.String("freshFoodServerURL")) } func New(baseURL string) *API { return &API{baseURL, &http.Client{Timeout: time.Millisecond * 2500}} // 2秒超时,因为JD那边的是3秒,超过3秒无意义 } func (f *API) AccessFreshFood(apiStr string, params url.Values) error { var err error var response *http.Response fullURL := f.baseURL + "/" + apiStr for i := 0; i < retryCount; i++ { if params != nil { // globals.SugarLogger.Debug(params.Encode()) response, err = f.client.PostForm(fullURL, params) } else { response, err = f.client.Get(fullURL) } // err = error(nil) // globals.SugarLogger.Debug(fullURL) // globals.SugarLogger.Debug(params) if err == nil && response != nil && response.StatusCode == 200 { break } else { globals.SugarLogger.Infof("AccessFreshFood Call %s error:%v, response: %v", fullURL, err, response) } } if err != nil || response.StatusCode != 200 { globals.SugarLogger.Infof("AccessFreshFood finally failed Call %s error:%v, url:%s, response: %v", fullURL, err, fullURL, response) if err != nil { return err } return ErrFreshFooddReturnNot200 } return nil } func (f *API) RefreshWeixinToken() error { return f.AccessFreshFood(URL_WX_UPDATE_ACCESSTOKEN, nil) } func (f *API) RefreshElmToken() error { return f.AccessFreshFood(URL_FRESHFOOD_ELEME_TOKENUPDATE, nil) }