jlzf.go 4.9 KB

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