eta_bridge.go 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. package eta_bridge
  2. import (
  3. "encoding/json"
  4. "errors"
  5. "eta/eta_task/utils"
  6. "fmt"
  7. "io"
  8. "net/http"
  9. "strings"
  10. )
  11. // BaseEtaBridgeDataResp 基础返回参数
  12. type BaseEtaBridgeDataResp struct {
  13. Code int `json:"code" description:"状态码"`
  14. Msg string `json:"msg" description:"提示信息"`
  15. //Data GetCrmTokenData `json:"data" description:"返回数据"`
  16. }
  17. // HttpEtaBridgePost
  18. // @Description: eta-bridge的post请求
  19. // @author: Roc
  20. // @datetime 2024-02-28 16:55:02
  21. // @param urlStr string
  22. // @param postData string
  23. // @param param interface{}
  24. // @return bResult []byte
  25. // @return err error
  26. // @return errMsg string
  27. func HttpEtaBridgePost(urlStr string, param interface{}) (bResult []byte, err error, errMsg string) {
  28. if utils.EtaBridgeUrl == "" {
  29. errMsg = `未配置第三方的桥接服务地址`
  30. err = errors.New(errMsg)
  31. return
  32. }
  33. data, e := json.Marshal(param)
  34. if e != nil {
  35. err = fmt.Errorf("data json marshal err: %s", e.Error())
  36. return
  37. }
  38. postUrl := utils.EtaBridgeUrl + "/api" + urlStr
  39. body := io.NopCloser(strings.NewReader(string(data)))
  40. client := &http.Client{}
  41. req, e := http.NewRequest("POST", postUrl, body)
  42. if e != nil {
  43. err = fmt.Errorf("http create request err: %s", e.Error())
  44. return
  45. }
  46. contentType := "application/json;charset=utf-8"
  47. req.Header.Set("Content-Type", contentType)
  48. checkToken := utils.MD5(utils.EtaBridgeAppNameEn + utils.EtaBridgeMd5Key)
  49. req.Header.Set("Authorization", checkToken)
  50. resp, e := client.Do(req)
  51. if e != nil {
  52. err = fmt.Errorf("http client do err: %s", e.Error())
  53. return
  54. }
  55. defer func() {
  56. _ = resp.Body.Close()
  57. }()
  58. bResult, e = io.ReadAll(resp.Body)
  59. if e != nil {
  60. err = fmt.Errorf("resp body read err: %s", e.Error())
  61. return
  62. }
  63. if len(bResult) == 0 {
  64. err = fmt.Errorf("resp body is empty")
  65. return
  66. }
  67. // 生产环境解密, 注意有个坑前后的双引号
  68. if utils.RunMode == "release" {
  69. str := string(bResult)
  70. str = strings.Trim(str, `"`)
  71. bResult = utils.DesBase64Decrypt([]byte(str), utils.EtaBridgeDesKey)
  72. }
  73. result := new(BaseEtaBridgeDataResp)
  74. if e = json.Unmarshal(bResult, &result); e != nil {
  75. err = fmt.Errorf("result unmarshal err: %s\nresult: %s", e.Error(), string(bResult))
  76. utils.FileLog.Info("第三方登录(向桥接服务换取token):\n" + string(bResult))
  77. return
  78. }
  79. if result.Code != 200 {
  80. errMsg = result.Msg
  81. err = fmt.Errorf("result: %s", string(bResult))
  82. return
  83. }
  84. return
  85. }