jlzf.go 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  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,optional" `
  32. Project map[string]interface{} `json:"project,optional" `
  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 = "http://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. // 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.发送请求 验证计量密码接口
  154. if resultByte, err = utils.PullData("GET", j.AuthUrl+"/management/account/valid?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. }