|
@@ -220,6 +220,10 @@ func ThirdLogin(req map[string]interface{}) (data GetCrmTokenData, err error, er
|
|
|
// @return tokenResp GetCrmTokenData
|
|
|
// @return err error
|
|
|
func ThirdCodeLoginFromMiddleServer(param map[string]interface{}) (tokenResp GetCrmTokenData, err error) {
|
|
|
+ if utils.EtaBridgeLoginUrl == "" {
|
|
|
+ err = errors.New("未配置第三方登录的桥接服务地址")
|
|
|
+ return
|
|
|
+ }
|
|
|
data, e := json.Marshal(param)
|
|
|
if e != nil {
|
|
|
err = fmt.Errorf("data json marshal err: %s", e.Error())
|
|
@@ -273,3 +277,72 @@ func ThirdCodeLoginFromMiddleServer(param map[string]interface{}) (tokenResp Get
|
|
|
tokenResp = result.Data
|
|
|
return
|
|
|
}
|
|
|
+
|
|
|
+// ThirdLogout
|
|
|
+// @Description: 第三方登出
|
|
|
+// @author: Roc
|
|
|
+// @datetime 2024-01-30 16:09:18
|
|
|
+// @param req map[string]interface{}
|
|
|
+// @return data GetCrmTokenData
|
|
|
+// @return err error
|
|
|
+func ThirdLogout(accessToken string) (err error) {
|
|
|
+ if utils.EtaBridgeLogoutUrl == "" {
|
|
|
+ // 未配置第三方登出的桥接服务地址
|
|
|
+ return
|
|
|
+ }
|
|
|
+ params := map[string]interface{}{
|
|
|
+ "access_token": accessToken,
|
|
|
+ }
|
|
|
+ data, e := json.Marshal(params)
|
|
|
+ if e != nil {
|
|
|
+ err = fmt.Errorf("data json marshal err: %s", e.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ body := io.NopCloser(strings.NewReader(string(data)))
|
|
|
+ client := &http.Client{}
|
|
|
+ req, e := http.NewRequest("POST", utils.EtaBridgeLogoutUrl, body)
|
|
|
+ if e != nil {
|
|
|
+ err = fmt.Errorf("http create request err: %s", e.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ contentType := "application/json;charset=utf-8"
|
|
|
+ req.Header.Set("Content-Type", contentType)
|
|
|
+ req.Header.Set("Authorization", utils.CrmEtaAuthorization)
|
|
|
+ resp, e := client.Do(req)
|
|
|
+ if e != nil {
|
|
|
+ err = fmt.Errorf("http client do err: %s", e.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ defer func() {
|
|
|
+ _ = resp.Body.Close()
|
|
|
+ }()
|
|
|
+ b, e := io.ReadAll(resp.Body)
|
|
|
+ if e != nil {
|
|
|
+ err = fmt.Errorf("resp body read err: %s", e.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if len(b) == 0 {
|
|
|
+ err = fmt.Errorf("resp body is empty")
|
|
|
+ return
|
|
|
+ }
|
|
|
+ // 生产环境解密, 注意有个坑前后的双引号
|
|
|
+ if utils.RunMode == "release" {
|
|
|
+ str := string(b)
|
|
|
+ str = strings.Trim(str, `"`)
|
|
|
+ b = utils.DesBase64Decrypt([]byte(str), utils.DesKey)
|
|
|
+ }
|
|
|
+
|
|
|
+ result := new(GetCrmTokenDataResp)
|
|
|
+ if e = json.Unmarshal(b, &result); e != nil {
|
|
|
+ err = fmt.Errorf("result unmarshal err: %s\nresult: %s", e.Error(), string(b))
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if result.Code != 200 {
|
|
|
+ err = fmt.Errorf("result: %s", string(b))
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ return
|
|
|
+}
|