jlzf.go 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  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. type jlAccountResult struct {
  36. Code int `json:"code" `
  37. Data []map[string]interface{} `json:"Data" `
  38. Msg string `json:"msg" `
  39. }
  40. //创建项目用户service
  41. func NewJlzf() *Jlzf {
  42. // 自动识别开发环境和生产环境
  43. debug := getEnvInfo("DEBUG")
  44. AuthUrl := "https://jl.smartcost.com.cn"
  45. if debug {
  46. AuthUrl = "http://192.168.1.76:7002"
  47. }
  48. return &Jlzf{
  49. AuthUrl: AuthUrl,
  50. }
  51. }
  52. // 生成请求token
  53. func makeTokenString(claimsData jwt.MapClaims) (string, error) {
  54. var (
  55. tokenString string
  56. err error
  57. )
  58. token := jwt.NewWithClaims(jwt.SigningMethodHS256, claimsData)
  59. if tokenString, err = token.SignedString([]byte(conf.JLSecretKey)); err != nil {
  60. return "", err
  61. }
  62. return tokenString, nil
  63. }
  64. // 按项目编号获得计量账号
  65. func (j *Jlzf) GetAccountList(code string) ([]map[string]interface{}, error) {
  66. var (
  67. tokenString string
  68. err error
  69. resultByte []byte
  70. jlAccountResult jlAccountResult
  71. )
  72. // 1.生成请求数据
  73. expirationTime := time.Now().Add(3 * time.Second)
  74. claimsData := jwt.MapClaims{
  75. "data": map[string]string{"code": code},
  76. "exp": expirationTime.Unix(),
  77. "iat": time.Now().Unix(),
  78. }
  79. // 1-1.生成token
  80. if tokenString, err = makeTokenString(claimsData); err != nil {
  81. return nil, errors.New("生成请求token错误")
  82. }
  83. fmt.Println(tokenString)
  84. // 1-2.发送请求
  85. if resultByte, err = utils.PullData("GET", j.AuthUrl+"/management/account/sync?auth="+tokenString, ""); err != nil {
  86. return nil, errors.New(fmt.Sprintf("计量错误,err= %s", err))
  87. }
  88. err = json.Unmarshal(resultByte, &jlAccountResult)
  89. if err != nil {
  90. log.Println("请求解析失败, error=", err)
  91. return nil, errors.New("解析数据错误")
  92. }
  93. if jlAccountResult.Code != 0 {
  94. return nil, errors.New(fmt.Sprintf("%s", jlAccountResult.Msg))
  95. }
  96. return jlAccountResult.Data, nil
  97. }
  98. // 拉取计量项目信息
  99. func (j *Jlzf) GetProjectAndAccount(code string, account string) (map[string]interface{}, map[string]interface{}, error) {
  100. var (
  101. tokenString string
  102. err error
  103. resultByte []byte
  104. jlResult jlResult
  105. )
  106. // 1.生成请求数据
  107. expirationTime := time.Now().Add(3 * time.Second)
  108. claimsData := jwt.MapClaims{
  109. "data": map[string]string{"code": code, "account": account},
  110. "exp": expirationTime.Unix(),
  111. "iat": time.Now().Unix(),
  112. }
  113. // 1-1.生成token
  114. if tokenString, err = makeTokenString(claimsData); err != nil {
  115. return nil, nil, errors.New("生成请求token错误")
  116. }
  117. fmt.Println(tokenString)
  118. // 1-2.发送请求
  119. if resultByte, err = utils.PullData("GET", j.AuthUrl+"/management/account?auth="+tokenString, ""); err != nil {
  120. return nil, nil, errors.New(fmt.Sprintf("计量错误,err= %s", err))
  121. }
  122. // fmt.Println(string(body))
  123. // result := map[string]interface{}{}
  124. err = json.Unmarshal(resultByte, &jlResult)
  125. if err != nil {
  126. log.Println("请求解析失败, error=", err)
  127. return nil, nil, errors.New("解析数据错误")
  128. }
  129. if jlResult.Code != 0 {
  130. return nil, nil, errors.New(fmt.Sprintf("%s", jlResult.Msg))
  131. }
  132. return jlResult.Data.Project, jlResult.Data.Account, nil
  133. }
  134. // 验证计量支付项目账号的登陆密码
  135. func (j *Jlzf) LoginValid(loginData viewmodels.Login) error {
  136. var (
  137. tokenString string
  138. err error
  139. resultByte []byte
  140. jlResult jlResult
  141. )
  142. // 1.生成请求数据
  143. expirationTime := time.Now().Add(3 * time.Second)
  144. claimsData := jwt.MapClaims{
  145. "data": map[string]string{"code": loginData.Code, "account": loginData.Account, "password": loginData.Password},
  146. "exp": expirationTime.Unix(),
  147. "iat": time.Now().Unix(),
  148. }
  149. // 1-1.生成token
  150. if tokenString, err = makeTokenString(claimsData); err != nil {
  151. return errors.New("生成请求token错误")
  152. }
  153. // 1-2.发送请求 TODO 验证计量密码接口
  154. if resultByte, err = utils.PullData("GET", j.AuthUrl+"/management/account?auth="+tokenString, ""); err != nil {
  155. return errors.New(fmt.Sprintf("计量错误,err= %s", err))
  156. }
  157. err = json.Unmarshal(resultByte, &jlResult)
  158. if err != nil {
  159. log.Println("请求解析失败, error=", err)
  160. return errors.New("解析数据错误")
  161. }
  162. if jlResult.Code != 0 {
  163. return errors.New(fmt.Sprintf("%s", jlResult.Msg))
  164. }
  165. return nil
  166. }
  167. func getEnvInfo(env string) bool {
  168. viper.AutomaticEnv()
  169. return viper.GetBool(env)
  170. }