diff --git a/platformapi/kuaishou_mini/kuaishou_api.go b/platformapi/kuaishou_mini/kuaishou_api.go index b2ad6c3d..8231e08d 100644 --- a/platformapi/kuaishou_mini/kuaishou_api.go +++ b/platformapi/kuaishou_mini/kuaishou_api.go @@ -1,9 +1,9 @@ package kuaishou_mini import ( - "encoding/json" "fmt" "git.rosy.net.cn/baseapi/platformapi" + "git.rosy.net.cn/baseapi/utils" "net/http" "strings" "sync" @@ -14,7 +14,7 @@ const ( KuaiShouBashUrl = "https://open.kuaishou.com" // 域名 // 获取授权信息 - KuaiShouAuthLogin = "oauth2/mp/code2session" // 授权登录 + KuaiShouAuthLogin = KuaiShouBashUrl + "/oauth2/mp/code2session" // 授权登录 ) type API struct { @@ -51,14 +51,11 @@ func New(appSecret, appId string, config ...*platformapi.APIConfig) *API { // AccessAPI2 发送请求 func (a *API) AccessAPI2(url string, params map[string]interface{}) (retVal map[string]interface{}, err error) { - data, err := json.Marshal(params) - if err != nil { - return nil, err - } + err = platformapi.AccessPlatformAPIWithRetry(a.client, func() *http.Request { - request, _ := http.NewRequest(http.MethodPost, url, strings.NewReader(string(data))) - request.Header.Set("Content-Type", "application/x-www-form-urlencoded") + request, _ := http.NewRequest(http.MethodPost, url, strings.NewReader(utils.Map2URLValues(params).Encode())) + request.Header.Add("Content-Type", "application/x-www-form-urlencoded") return request }, a.config, diff --git a/platformapi/kuaishou_mini/kuaishou_login.go b/platformapi/kuaishou_mini/kuaishou_login.go index 9a600fd8..79bb20b1 100644 --- a/platformapi/kuaishou_mini/kuaishou_login.go +++ b/platformapi/kuaishou_mini/kuaishou_login.go @@ -1,8 +1,29 @@ package kuaishou_mini +import ( + "errors" + "git.rosy.net.cn/baseapi/utils" +) + // AuthLoginKuaiShou 快手授权登录 -func (a *API) AuthLoginKuaiShou(jsCode string) { +func (a *API) AuthLoginKuaiShou(jsCode string) (sessionKey, openId string, err error) { if a.appId == "" || a.appSecret == "" || jsCode == "" { - return + return "", "", err } + + result, err := a.AccessAPI2(KuaiShouAuthLogin, map[string]interface{}{"js_code": jsCode, "app_id": a.appId, "app_secret": a.appSecret}) + if err != nil { + return "", "", err + } + + auth := GetLoginAuth{} + if err := utils.Map2StructByJson(result, &auth, false); err != nil { + return "", "", err + } + + if auth.Error != "" { + return "", "", errors.New(auth.ErrorMsg) + } + + return auth.SessionKey, auth.OpenId, nil } diff --git a/platformapi/kuaishou_mini/kuaishou_model.go b/platformapi/kuaishou_mini/kuaishou_model.go new file mode 100644 index 00000000..2d500d9e --- /dev/null +++ b/platformapi/kuaishou_mini/kuaishou_model.go @@ -0,0 +1,17 @@ +package kuaishou_mini + +// GetLoginAuth 快手授权返回 +type GetLoginAuth struct { + Result int `json:"result"` // 返回数据条数 + Error string `json:"error"` //错误类型 + ErrorMsg string `json:"error_msg"` // 错误消息 + SessionKey string `json:"session_key"` // 会话秘钥 + OpenId string `json:"open_id"` // 用户当前小程序下唯一id + +} + +type ResultInfo struct { + Result int `json:"result"` // 返回数据条数 + Error string `json:"error"` //错误类型 + ErrorMsg string `json:"error_msg"` // 错误消息 +} diff --git a/platformapi/kuaishou_mini/kuaishou_test.go b/platformapi/kuaishou_mini/kuaishou_test.go new file mode 100644 index 00000000..359645cb --- /dev/null +++ b/platformapi/kuaishou_mini/kuaishou_test.go @@ -0,0 +1,28 @@ +package kuaishou_mini + +import ( + "git.rosy.net.cn/baseapi" + "git.rosy.net.cn/jx-callback/globals" + "go.uber.org/zap" + "testing" +) + +var ( + api *API + sugarLogger *zap.SugaredLogger +) + +func init() { + logger, _ := zap.NewDevelopment() + sugarLogger = logger.Sugar() + baseapi.Init(sugarLogger) + api = New("1wShCPqUzhg8W1vcb8OdvA", "ks680887971696897880") +} + +func TestAuthLogin(t *testing.T) { + jscode := "0F937BADB84C739B0C5DAFCACE1DB3BDFC9D83777CAF4A094AD513DD42BE2238" + sessionCode, openId, err := api.AuthLoginKuaiShou(jscode) + globals.SugarLogger.Debugf("session_code := %s", sessionCode) + globals.SugarLogger.Debugf("open_id := %s", openId) + globals.SugarLogger.Debugf("err := %v", err) +}