passport.go 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. package feishu
  2. import (
  3. "bytes"
  4. "io"
  5. "net/http"
  6. "crazy-fox-backend-api/global"
  7. "crazy-fox-backend-api/model"
  8. jsoniter "github.com/json-iterator/go"
  9. "github.com/pkg/errors"
  10. )
  11. func FsUserInfo(code string, uri string) (userInfo model.TFsUserInfo, err error) {
  12. info := make(map[string]string)
  13. info["grant_type"] = "authorization_code"
  14. info["client_id"] = global.Config.FsLogin.AppID
  15. info["client_secret"] = global.Config.FsLogin.AppSecret
  16. info["code"] = code
  17. info["redirect_uri"] = global.Config.FsLogin.RedirectUri + uri
  18. bytesData, _ := jsoniter.Marshal(info)
  19. url := "https://passport.feishu.cn/suite/passport/oauth/token"
  20. reader := bytes.NewReader(bytesData)
  21. req, err := http.NewRequest("POST", url, reader)
  22. defer req.Body.Close()
  23. if err != nil {
  24. err = errors.WithStack(err)
  25. return
  26. }
  27. req.Header.Set("Content-Type", "application/json;charset=UTF-8")
  28. client := http.Client{}
  29. resp, err := client.Do(req)
  30. if err != nil {
  31. err = errors.WithStack(err)
  32. return
  33. }
  34. defer resp.Body.Close()
  35. reqsBytes, err := io.ReadAll(resp.Body)
  36. var acReq model.AccessReq
  37. err = jsoniter.Unmarshal(reqsBytes, &acReq)
  38. if err != nil {
  39. err = errors.WithStack(err)
  40. return
  41. }
  42. return getUserInfo(acReq.AccessToken)
  43. }
  44. func getUserInfo(accessToken string) (fsUserInfo model.TFsUserInfo, err error) {
  45. url := "https://passport.feishu.cn/suite/passport/oauth/userinfo"
  46. req, err := http.NewRequest("GET", url, nil)
  47. client := http.Client{}
  48. req.Header.Set("Authorization", "Bearer "+accessToken)
  49. req.Header.Set("Content-Type", "application/json;charset=UTF-8")
  50. resp, err := client.Do(req)
  51. if err != nil {
  52. err = errors.WithStack(err)
  53. return
  54. }
  55. defer resp.Body.Close()
  56. reqsBytes, err := io.ReadAll(resp.Body)
  57. if err != nil {
  58. err = errors.WithStack(err)
  59. return
  60. }
  61. if err = jsoniter.Unmarshal(reqsBytes, &fsUserInfo.FsUserBaseInfo); err != nil {
  62. return fsUserInfo, errors.WithStack(err)
  63. }
  64. return fsUserInfo, err
  65. }