Prechádzať zdrojové kódy

实现种 cookie 接口

boweniac 1 týždeň pred
rodič
commit
9b3024449b

+ 2 - 1
desc/all.api

@@ -41,4 +41,5 @@ import "./wechat/credit_balance.api"
 import "./wechat/credit_usage.api"
 import "./wechat/pay_recharge.api"
 import "./wechat/whatsapp.api"
-import "./wechat/whatsapp_channel.api"
+import "./wechat/whatsapp_channel.api"
+import "./wechat/fastgpt.api"

+ 13 - 0
desc/wechat/fastgpt.api

@@ -0,0 +1,13 @@
+import "../base.api"
+
+type (
+)
+
+@server(
+    group: fastgpt
+)
+
+service Wechat {
+    @handler setToken
+    get /api/fastgpt/set_token () returns (BaseMsgResp)
+}

+ 32 - 0
internal/handler/fastgpt/set_token_handler.go

@@ -0,0 +1,32 @@
+package fastgpt
+
+import (
+	"net/http"
+
+	"github.com/zeromicro/go-zero/rest/httpx"
+
+	"wechat-api/internal/logic/fastgpt"
+	"wechat-api/internal/svc"
+)
+
+// swagger:route get /api/fastgpt/set_token fastgpt SetToken
+//
+
+//
+
+//
+// Responses:
+//  200: BaseMsgResp
+
+func SetTokenHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
+	return func(w http.ResponseWriter, r *http.Request) {
+		username := r.URL.Query().Get("username")
+		l := fastgpt.NewSetTokenLogic(r.Context(), svcCtx, w)
+		resp, err := l.SetToken(username)
+		if err != nil {
+			httpx.ErrorCtx(r.Context(), w, err)
+		} else {
+			httpx.OkJsonCtx(r.Context(), w, resp)
+		}
+	}
+}

+ 11 - 0
internal/handler/routes.go

@@ -30,6 +30,7 @@ import (
 	dashboard "wechat-api/internal/handler/dashboard"
 	employee "wechat-api/internal/handler/employee"
 	employee_config "wechat-api/internal/handler/employee_config"
+	fastgpt "wechat-api/internal/handler/fastgpt"
 	label "wechat-api/internal/handler/label"
 	label_relationship "wechat-api/internal/handler/label_relationship"
 	label_tagging "wechat-api/internal/handler/label_tagging"
@@ -2037,4 +2038,14 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) {
 		),
 		rest.WithJwt(serverCtx.Config.Auth.AccessSecret),
 	)
+
+	server.AddRoutes(
+		[]rest.Route{
+			{
+				Method:  http.MethodGet,
+				Path:    "/api/fastgpt/set_token",
+				Handler: fastgpt.SetTokenHandler(serverCtx),
+			},
+		},
+	)
 }

+ 112 - 0
internal/logic/fastgpt/set_token_logic.go

@@ -0,0 +1,112 @@
+package fastgpt
+
+import (
+	"bytes"
+	"context"
+	"encoding/json"
+	"fmt"
+	"net/http"
+
+	"wechat-api/internal/svc"
+	"wechat-api/internal/types"
+
+	"github.com/zeromicro/go-zero/core/logx"
+)
+
+type SetTokenLogic struct {
+	logx.Logger
+	ctx    context.Context
+	svcCtx *svc.ServiceContext
+	rw     http.ResponseWriter
+}
+
+func NewSetTokenLogic(ctx context.Context, svcCtx *svc.ServiceContext, rw http.ResponseWriter) *SetTokenLogic {
+	return &SetTokenLogic{
+		Logger: logx.WithContext(ctx),
+		ctx:    ctx,
+		svcCtx: svcCtx,
+		rw:     rw,
+	}
+}
+
+func (l *SetTokenLogic) SetToken(username string) (resp *types.BaseMsgResp, err error) {
+	token, err := l.getToken(username)
+	if err != nil {
+		return nil, err
+	}
+	// 创建一个新的 Cookie
+	cookie := &http.Cookie{
+		Name:     "fastgpt_token",
+		Value:    token, // 假设 req.Token 是你要设置的 Cookie 值
+		Domain:   ".gkscrm.com",
+		SameSite: http.SameSiteNoneMode,
+		Secure:   true, // 如果 SameSite 设置为 None,必须设置 Secure 为 true
+		HttpOnly: false,
+		Path:     "/",
+	}
+
+	// 设置 Cookie 到响应中
+	http.SetCookie(l.rw, cookie)
+
+	// 返回响应消息
+	resp = &types.BaseMsgResp{
+		Code: 0,
+		Msg:  "Cookie set successfully",
+	}
+
+	return
+}
+
+func (l *SetTokenLogic) getToken(username string) (string, error) {
+	// 设置请求的 URL 和请求体
+	url := "https://agent.gkscrm.com/api/support/user/account/loginByPassword"
+	payload := map[string]string{
+		"username": username,
+		"password": "578fd6dfa3f71a8fadf5dc60d0e7115881db4c36504f83c4a0f4422107162c36",
+	}
+
+	// 将请求体编码为 JSON
+	jsonPayload, err := json.Marshal(payload)
+	if err != nil {
+		return "", err
+	}
+
+	// 创建 HTTP 请求
+	req, err := http.NewRequest("POST", url, bytes.NewBuffer(jsonPayload))
+	if err != nil {
+		return "", err
+	}
+	req.Header.Set("Content-Type", "application/json")
+
+	// 发送请求
+	client := &http.Client{}
+	resp, err := client.Do(req)
+	if err != nil {
+		return "", err
+	}
+	defer resp.Body.Close()
+
+	// 检查响应状态码
+	if resp.StatusCode != http.StatusOK {
+		return "", fmt.Errorf("failed to login, status code: %d", resp.StatusCode)
+	}
+
+	// 解析响应体
+	var response map[string]interface{}
+	err = json.NewDecoder(resp.Body).Decode(&response)
+	if err != nil {
+		return "", err
+	}
+
+	// 提取 token
+	data, ok := response["data"].(map[string]interface{})
+	if !ok {
+		return "", fmt.Errorf("invalid response format")
+	}
+	token, ok := data["token"].(string)
+	if !ok {
+		return "", fmt.Errorf("token not found in response")
+	}
+
+	return token, nil
+}