81 lines
1.8 KiB
Go
81 lines
1.8 KiB
Go
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)
|
||
}
|