jlzf.go 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. /*
  2. * @description:计量支付接口相关操作
  3. * @Author: CP
  4. * @Date: 2020-09-03 16:57:56
  5. * @FilePath: \construction_management\lib\jlzf.go
  6. */
  7. package lib
  8. import (
  9. "encoding/json"
  10. "errors"
  11. "fmt"
  12. "log"
  13. "time"
  14. "github.com/dgrijalva/jwt-go"
  15. "github.com/spf13/viper"
  16. "go.mod/conf"
  17. "go.mod/web/utils"
  18. "go.mod/web/viewmodels"
  19. )
  20. type Jlzf struct {
  21. AuthUrl string
  22. App string
  23. Token string
  24. }
  25. // 计量接口返回
  26. type jlResult struct {
  27. Code int `json:"code" `
  28. Data dataResult `json:"data" `
  29. Msg string `json:"msg" `
  30. }
  31. type dataResult struct {
  32. Account map[string]interface{} `json:"account" `
  33. Project map[string]interface{} `json:"project" `
  34. }
  35. //创建项目用户service
  36. func NewJlzf() *Jlzf {
  37. // 自动识别开发环境和生产环境
  38. debug := getEnvInfo("DEBUG")
  39. AuthUrl := ""
  40. if debug {
  41. AuthUrl = "http://192.168.1.42:7002"
  42. }
  43. return &Jlzf{
  44. AuthUrl: AuthUrl,
  45. }
  46. }
  47. // 生成请求token
  48. func makeTokenString(claimsData jwt.MapClaims) (string, error) {
  49. var (
  50. tokenString string
  51. err error
  52. )
  53. token := jwt.NewWithClaims(jwt.SigningMethodHS256, claimsData)
  54. if tokenString, err = token.SignedString([]byte(conf.JLSecretKey)); err != nil {
  55. return "", err
  56. }
  57. return tokenString, nil
  58. }
  59. // 拉取计量项目信息
  60. func (j *Jlzf) GetProjectAndAccount(code string, account string) (map[string]interface{}, map[string]interface{}, error) {
  61. var (
  62. tokenString string
  63. err error
  64. resultByte []byte
  65. jlResult jlResult
  66. )
  67. // 1.生成请求数据
  68. expirationTime := time.Now().Add(3 * time.Second)
  69. claimsData := jwt.MapClaims{
  70. "data": map[string]string{"code": code, "account": account},
  71. "exp": expirationTime.Unix(),
  72. "iat": time.Now().Unix(),
  73. }
  74. // 1-1.生成token
  75. if tokenString, err = makeTokenString(claimsData); err != nil {
  76. return nil, nil, errors.New("生成请求token错误")
  77. }
  78. fmt.Println(tokenString)
  79. // 1-2.发送请求
  80. if resultByte, err = utils.PullData("GET", j.AuthUrl+"/management/account?auth="+tokenString, ""); err != nil {
  81. return nil, nil, errors.New(fmt.Sprintf("计量错误,err= %s", err))
  82. }
  83. // fmt.Println(string(body))
  84. // result := map[string]interface{}{}
  85. err = json.Unmarshal(resultByte, &jlResult)
  86. if err != nil {
  87. log.Println("请求移除, error=", err)
  88. return nil, nil, errors.New("解析数据错误")
  89. }
  90. if jlResult.Code != 0 {
  91. return nil, nil, errors.New(fmt.Sprintf("%s", jlResult.Msg))
  92. }
  93. return jlResult.Data.Project, jlResult.Data.Account, nil
  94. }
  95. // 验证计量支付项目账号的登陆密码
  96. func (j *Jlzf) LoginValid(loginData viewmodels.Login) error {
  97. var (
  98. tokenString string
  99. err error
  100. resultByte []byte
  101. jlResult jlResult
  102. )
  103. // 1.生成请求数据
  104. expirationTime := time.Now().Add(3 * time.Second)
  105. claimsData := jwt.MapClaims{
  106. "data": map[string]string{"code": loginData.Code, "account": loginData.Account, "password": loginData.Password},
  107. "exp": expirationTime.Unix(),
  108. "iat": time.Now().Unix(),
  109. }
  110. // 1-1.生成token
  111. if tokenString, err = makeTokenString(claimsData); err != nil {
  112. return errors.New("生成请求token错误")
  113. }
  114. fmt.Println(tokenString)
  115. // 1-2.发送请求
  116. if resultByte, err = utils.PullData("GET", j.AuthUrl+"/management/account?auth="+tokenString, ""); err != nil {
  117. return errors.New(fmt.Sprintf("计量错误,err= %s", err))
  118. }
  119. err = json.Unmarshal(resultByte, &jlResult)
  120. if err != nil {
  121. log.Println("请求移除, error=", err)
  122. return errors.New("解析数据错误")
  123. }
  124. if jlResult.Code != 0 {
  125. return errors.New(fmt.Sprintf("%s", jlResult.Msg))
  126. }
  127. return nil
  128. }
  129. func getEnvInfo(env string) bool {
  130. viper.AutomaticEnv()
  131. return viper.GetBool(env)
  132. }