From d43a076becca9e5139be664e0399d48914ef42f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=82=B9=E5=AE=97=E6=A5=A0?= Date: Fri, 25 Mar 2022 17:00:20 +0800 Subject: [PATCH] fengniao ceshi --- platformapi/fnpsapi/fnps_v3.go | 30 ++++++++-------- platformapi/fnpsapi/fnpsapi.go | 47 +++++++++++++++++-------- platformapi/fnpsapi_v3/fnClient_test.go | 22 ++++++------ platformapi/fnpsapi_v3/fnps_v3.go | 9 ++--- platformapi/fnpsapi_v3/fnpsapi.go | 17 ++++++--- 5 files changed, 78 insertions(+), 47 deletions(-) diff --git a/platformapi/fnpsapi/fnps_v3.go b/platformapi/fnpsapi/fnps_v3.go index 4e232c24..9f46df83 100644 --- a/platformapi/fnpsapi/fnps_v3.go +++ b/platformapi/fnpsapi/fnps_v3.go @@ -7,8 +7,9 @@ import ( ) const ( - TokenURL = "https://open-anubis.ele.me/anubis-webapi/openapi/token" // 正式环境 - ApiURL = "https://open-anubis.ele.me/anubis-webapi/v3/invoke" // 正式环境 + TokenURL = "https://open-anubis.ele.me/anubis-webapi/openapi/token" // 正式环境 + ApiURL = "https://open-anubis.ele.me/anubis-webapi/v3/invoke" // 正式环境 + RefreshTokenUrl = "https://open-anubis.ele.me/anubis-webapi/openapi/refreshToken" // 正式环境刷新token //TokenURL = "https://exam-anubis.ele.me/anubis-webapi/openapi/token" // 沙箱环境 //ApiURL = "https://exam-anubis.ele.me/anubis-webapi/v3/invoke" // 沙箱环境 RequestPost = "POST" @@ -17,18 +18,19 @@ const ( // 注册请求api type API struct { - grantType string `json:"grant_type"` - code string `json:"code"` - appID string `json:"app_id"` - merchantId string `json:"merchant_id"` - signature string `json:"signature"` - timestamp int64 `json:"timestamp"` - accessToken string `json:"access_token"` - appSecret string `json:"app_secret"` - version string `json:"version"` - locker sync.RWMutex - client *http.Client - config *platformapi.APIConfig + grantType string `json:"grant_type"` + code string `json:"code"` + appID string `json:"app_id"` + merchantId string `json:"merchant_id"` + signature string `json:"signature"` + timestamp int64 `json:"timestamp"` + accessToken string `json:"access_token"` + refreshToken string `json:"refresh_token"` + appSecret string `json:"app_secret"` + version string `json:"version"` + locker sync.RWMutex + client *http.Client + config *platformapi.APIConfig } // 请求基础结构体 diff --git a/platformapi/fnpsapi/fnpsapi.go b/platformapi/fnpsapi/fnpsapi.go index ebbcae67..19ed7591 100644 --- a/platformapi/fnpsapi/fnpsapi.go +++ b/platformapi/fnpsapi/fnpsapi.go @@ -30,6 +30,12 @@ func (a *API) SetToken(token string) { a.accessToken = token } +func (a *API) SetRefreshToken(token string) { + a.locker.Lock() + defer a.locker.Unlock() + a.refreshToken = token +} + func (a *API) MakeFnRequestHead() map[string]interface{} { requestParam := make(map[string]interface{}, 6) requestParam["access_token"] = a.accessToken @@ -45,18 +51,21 @@ func New(appID, appSecret, merchantId, code string, config ...*platformapi.APICo if len(config) > 0 { curConfig = *config[0] } + + // 查询蜂鸟refeshToken return &API{ - grantType: "authorization_code", // 授权模式,填固定值authorization_code - code: code, - appID: appID, - merchantId: merchantId, - signature: "", - accessToken: "", - version: "1.0", - appSecret: appSecret, - locker: sync.RWMutex{}, - client: &http.Client{Timeout: curConfig.ClientTimeout}, - config: &curConfig, + grantType: "authorization_code", // 授权模式,填固定值authorization_code + code: code, + appID: appID, + merchantId: merchantId, + signature: "", + accessToken: "", + refreshToken: "", + version: "1.0", + appSecret: appSecret, + locker: sync.RWMutex{}, + client: &http.Client{Timeout: curConfig.ClientTimeout}, + config: &curConfig, } } @@ -125,14 +134,22 @@ func (a *API) AccessAPI(baseUrl, actionApi, method string, bizParams map[string] func (a *API) GetAccessToken() (tokenInfo *TokenInfo, err error) { parameter := make(map[string]interface{}, 6) parameter["grant_type"] = a.grantType - parameter["code"] = a.code parameter["app_id"] = a.appID parameter["merchant_id"] = a.merchantId - result, err := a.AccessAPI(TokenURL, "", RequestPost, parameter) - if err != nil { - return nil, err + // 先去刷新token,没有的话再去获取token(code只能使用一次,生成的token管一年) + var result map[string]interface{} + parameter["refresh_token"] = a.refreshToken + if a.refreshToken == "" { + parameter["code"] = a.code + result, err = a.AccessAPI(TokenURL, "", RequestPost, parameter) + if err != nil { + return nil, err + } + } else { + result, err = a.AccessAPI(RefreshTokenUrl, "", RequestPost, parameter) } + if err := utils.Map2StructByJson(result, &tokenInfo, false); err != nil { return nil, err } diff --git a/platformapi/fnpsapi_v3/fnClient_test.go b/platformapi/fnpsapi_v3/fnClient_test.go index 6fa887a5..dbee403e 100644 --- a/platformapi/fnpsapi_v3/fnClient_test.go +++ b/platformapi/fnpsapi_v3/fnClient_test.go @@ -13,14 +13,6 @@ func Init() { api.accessToken = token.BusinessDataObj.AccessToken } -func TestClient(t *testing.T) { - api = New("6705486294797503379", "c1e6c280-e618-4103-9d0a-673bc54fb22e", "5375691", "iCN2gIftF1Ia9nG7720nyn") - token, err := api.GetAccessToken() - api.accessToken = token.BusinessDataObj.AccessToken - fmt.Println("token===", token.BusinessDataObj.AccessToken) - fmt.Println("err=====", err) -} - // 创建门店, func TestCreateStore(t *testing.T) { api = New("6705486294797503379", "c1e6c280-e618-4103-9d0a-673bc54fb22e", "5375691", "cabrXQf9eFMVWVYg4hNlwu") @@ -91,11 +83,21 @@ func TestUpdataStore(t *testing.T) { fmt.Println(err) } +func TestClient(t *testing.T) { + api = New("6705486294797503379", "c1e6c280-e618-4103-9d0a-673bc54fb22e", "51658", "4W4hqacKND6NOct5gCyjbT") + token, err := api.GetAccessToken() + api.accessToken = token.BusinessDataObj.AccessToken + fmt.Println("token===", token.BusinessDataObj.AccessToken) + fmt.Println("err=====", err) +} + // 查询单个门店 func TestQueryOneStore(t *testing.T) { - api = New("6705486294797503379", "c1e6c280-e618-4103-9d0a-673bc54fb22e", "5375691", "iCN2gIftF1Ia9nG7720nyn") - token, _ := api.GetAccessToken() + api = New("6705486294797503379", "c1e6c280-e618-4103-9d0a-673bc54fb22e", "51658", "4W4hqacKND6NOct5gCyjbT") + token, err := api.GetAccessToken() + fmt.Println("err! ========", err) api.accessToken = token.BusinessDataObj.AccessToken + fmt.Println("err! ========accessToken", api.accessToken) data, err := api.GetStore("637910") fmt.Println(data) fmt.Println(err) diff --git a/platformapi/fnpsapi_v3/fnps_v3.go b/platformapi/fnpsapi_v3/fnps_v3.go index 5ca175d4..7d8f0352 100644 --- a/platformapi/fnpsapi_v3/fnps_v3.go +++ b/platformapi/fnpsapi_v3/fnps_v3.go @@ -7,10 +7,11 @@ import ( ) const ( - //TokenURL = "https://open-anubis.ele.me/anubis-webapi/openapi/token" // 正式环境 - //ApiURL = "https://open-anubis.ele.me/anubis-webapi/v3/invoke"// 正式环境 - TokenURL = "https://exam-anubis.ele.me/anubis-webapi/openapi/token" // 沙箱环境 - ApiURL = "https://exam-anubis.ele.me/anubis-webapi/v3/invoke" // 沙箱环境 + TokenURL = "https://open-anubis.ele.me/anubis-webapi/openapi/token" // 正式环境 + RefreshTokenUrl = "https://open-anubis.ele.me/anubis-webapi/openapi/refreshToken" // 正式环境刷新token + ApiURL = "https://open-anubis.ele.me/anubis-webapi/v3/invoke" // 正式环境 + //TokenURL = "https://exam-anubis.ele.me/anubis-webapi/openapi/token" // 沙箱环境 + //ApiURL = "https://exam-anubis.ele.me/anubis-webapi/v3/invoke" // 沙箱环境 RequestPost = "POST" RequestGet = "GET" ) diff --git a/platformapi/fnpsapi_v3/fnpsapi.go b/platformapi/fnpsapi_v3/fnpsapi.go index 9fd1e44c..ac4568c9 100644 --- a/platformapi/fnpsapi_v3/fnpsapi.go +++ b/platformapi/fnpsapi_v3/fnpsapi.go @@ -71,15 +71,23 @@ func (a *API) signParam(params map[string]interface{}) (sig string) { // 获取access_token func (a *API) GetAccessToken() (tokenInfo *TokenInfo, err error) { parameter := make(map[string]interface{}, 6) - parameter["grant_type"] = a.grantType - parameter["code"] = a.code + parameter["grant_type"] = "refresh_token" parameter["app_id"] = a.appID parameter["merchant_id"] = a.merchantId + parameter["refresh_token"] = "1" - result, err := a.AccessAPI(TokenURL, "", RequestPost, parameter) + // 先去刷新token,没有的话再去获取token(code只能使用一次,生成的token管一年) + var result map[string]interface{} + result, err = a.AccessAPI(RefreshTokenUrl, "", RequestPost, parameter) if err != nil { - return nil, err + parameter["grant_type"] = "authorization_code" + parameter["code"] = a.code + result, err = a.AccessAPI(TokenURL, "", RequestPost, parameter) + if err != nil { + return nil, err + } } + if err := utils.Map2StructByJson(result, &tokenInfo, false); err != nil { return nil, err } @@ -89,6 +97,7 @@ func (a *API) GetAccessToken() (tokenInfo *TokenInfo, err error) { return nil, err } tokenInfo.BusinessDataObj = businessData + //a.r return tokenInfo, err }