set_token_logic.go 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. package fastgpt
  2. import (
  3. "bytes"
  4. "context"
  5. "encoding/json"
  6. "fmt"
  7. "net/http"
  8. "wechat-api/internal/svc"
  9. "wechat-api/internal/types"
  10. "github.com/zeromicro/go-zero/core/logx"
  11. )
  12. type SetTokenLogic struct {
  13. logx.Logger
  14. ctx context.Context
  15. svcCtx *svc.ServiceContext
  16. rw http.ResponseWriter
  17. }
  18. func NewSetTokenLogic(ctx context.Context, svcCtx *svc.ServiceContext, rw http.ResponseWriter) *SetTokenLogic {
  19. return &SetTokenLogic{
  20. Logger: logx.WithContext(ctx),
  21. ctx: ctx,
  22. svcCtx: svcCtx,
  23. rw: rw,
  24. }
  25. }
  26. func (l *SetTokenLogic) SetToken(username string) (resp *types.BaseMsgResp, err error) {
  27. token, err := l.getToken(username)
  28. if err != nil {
  29. return nil, err
  30. }
  31. // 创建一个新的 Cookie
  32. cookie := &http.Cookie{
  33. Name: "fastgpt_token",
  34. Value: token, // 假设 req.Token 是你要设置的 Cookie 值
  35. Domain: ".gkscrm.com",
  36. SameSite: http.SameSiteNoneMode,
  37. Secure: true, // 如果 SameSite 设置为 None,必须设置 Secure 为 true
  38. HttpOnly: false,
  39. Path: "/",
  40. }
  41. // 设置 Cookie 到响应中
  42. http.SetCookie(l.rw, cookie)
  43. // 返回响应消息
  44. resp = &types.BaseMsgResp{
  45. Code: 0,
  46. Msg: "Cookie set successfully",
  47. }
  48. return
  49. }
  50. func (l *SetTokenLogic) getToken(username string) (string, error) {
  51. // 设置请求的 URL 和请求体
  52. url := "https://agent.gkscrm.com/api/support/user/account/loginByPassword"
  53. payload := map[string]string{
  54. "username": username,
  55. "password": "578fd6dfa3f71a8fadf5dc60d0e7115881db4c36504f83c4a0f4422107162c36",
  56. }
  57. // 将请求体编码为 JSON
  58. jsonPayload, err := json.Marshal(payload)
  59. if err != nil {
  60. return "", err
  61. }
  62. // 创建 HTTP 请求
  63. req, err := http.NewRequest("POST", url, bytes.NewBuffer(jsonPayload))
  64. if err != nil {
  65. return "", err
  66. }
  67. req.Header.Set("Content-Type", "application/json")
  68. // 发送请求
  69. client := &http.Client{}
  70. resp, err := client.Do(req)
  71. if err != nil {
  72. return "", err
  73. }
  74. defer resp.Body.Close()
  75. // 检查响应状态码
  76. if resp.StatusCode != http.StatusOK {
  77. return "", fmt.Errorf("failed to login, status code: %d", resp.StatusCode)
  78. }
  79. // 解析响应体
  80. var response map[string]interface{}
  81. err = json.NewDecoder(resp.Body).Decode(&response)
  82. if err != nil {
  83. return "", err
  84. }
  85. // 提取 token
  86. data, ok := response["data"].(map[string]interface{})
  87. if !ok {
  88. return "", fmt.Errorf("invalid response format")
  89. }
  90. token, ok := data["token"].(string)
  91. if !ok {
  92. return "", fmt.Errorf("token not found in response")
  93. }
  94. return token, nil
  95. }