wechat.go 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. package controllers
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "hongze/hongze_cygxzs/models"
  6. "hongze/hongze_cygxzs/services"
  7. "hongze/hongze_cygxzs/utils"
  8. "strconv"
  9. "time"
  10. )
  11. type WechatController struct {
  12. BaseAuthController
  13. }
  14. type WechatCommonController struct {
  15. BaseCommonController
  16. }
  17. // @Title 微信登录小助手接口
  18. // @Description 微信登录小助手接口
  19. // @Param Code query string true "微信唯一编码code"
  20. // @Success 200 {object} models.UserDetailByUserLogin
  21. // @router /loginByxzs [get]
  22. func (this *WechatCommonController) WechatLoginByxzs() {
  23. br := new(models.BaseResponse).Init()
  24. defer func() {
  25. this.Data["json"] = br
  26. this.ServeJSON()
  27. }()
  28. code := this.GetString("Code")
  29. if code == "" {
  30. br.Msg = "参数错误"
  31. br.ErrMsg = "Code 为空"
  32. return
  33. }
  34. item, err := services.WxGetUserOpenIdByCodeXzs(code)
  35. if err != nil {
  36. br.Msg = "获取用户信息失败"
  37. br.ErrMsg = "获取用户信息失败,Err:" + err.Error()
  38. return
  39. }
  40. if item.Errcode != 0 {
  41. br.Msg = "获取用户信息失败"
  42. br.ErrMsg = "获取access_token 失败 errcode:" + strconv.Itoa(item.Errcode) + " ;errmsg:" + item.Errmsg
  43. return
  44. }
  45. openId := item.Openid
  46. if openId == "" {
  47. br.Msg = "获取用户信息失败"
  48. br.ErrMsg = "获取openid失败,openid:" + item.Openid
  49. return
  50. }
  51. resp := new(models.UserDetailByUserLogin)
  52. wxUserInfo, err := services.WxGetUserInfo(openId, item.AccessToken)
  53. if err != nil {
  54. br.Msg = "获取用户信息失败"
  55. br.ErrMsg = "获取微信用户信息失败,Err:" + err.Error()
  56. return
  57. }
  58. if wxUserInfo.Errcode != 0 {
  59. userInfoJson, _ := json.Marshal(wxUserInfo)
  60. br.Msg = "登录失败"
  61. br.ErrMsg = "获取用户信息失败,err:" + string(userInfoJson)
  62. return
  63. }
  64. unionId := wxUserInfo.Unionid
  65. if unionId == "" {
  66. br.Msg = "获取用户信息失败"
  67. br.ErrMsg = "获取unionid失败,unionid:" + item.Openid
  68. return
  69. }
  70. total, err := models.GetCygxUserRecordCount(openId)
  71. if err != nil {
  72. br.Msg = "获取用户信息失败"
  73. br.ErrMsg = "查询数量失败,Err:" + err.Error()
  74. return
  75. }
  76. if total == 0 {
  77. items := new(models.CygxUserRecord)
  78. items.OpenId = openId
  79. items.UnionId = unionId
  80. items.CreateTime = time.Now()
  81. _, err = models.AddCygxUserRecord(items)
  82. if err != nil {
  83. br.Msg = "获取用户信息失败"
  84. br.ErrMsg = "添加openid失败,Err:" + err.Error()
  85. return
  86. }
  87. }
  88. user, err := models.GetWxUserItemByUserUnionId(unionId)
  89. if err != nil && err.Error() != utils.ErrNoRow() {
  90. br.Msg = "获取用户信息失败"
  91. br.ErrMsg = "获取本地用户信息失败,Err:" + err.Error()
  92. return
  93. }
  94. if user == nil {
  95. resp.HasPermission = 3
  96. } else {
  97. permissionStr, err := models.GetCompanyPermission(user.CompanyId)
  98. if err != nil {
  99. br.Msg = "获取信息失败"
  100. br.ErrMsg = "获取客户信息失败,Err:" + err.Error()
  101. return
  102. }
  103. if permissionStr != "" {
  104. resp.Permission = permissionStr
  105. resp.Mobile = user.Mobile
  106. resp.RealName = user.RealName
  107. resp.CompanyName = user.CompanyName
  108. resp.HasPermission = 1
  109. } else {
  110. resp.Mobile = user.Mobile
  111. resp.RealName = user.RealName
  112. resp.HasPermission = 2
  113. }
  114. }
  115. resp.Headimgurl = wxUserInfo.Headimgurl
  116. br.Ret = 200
  117. br.Success = true
  118. br.Msg = "获取成功"
  119. br.Data = resp
  120. }
  121. // @Title 微信获取签名接口
  122. // @Description 微信获取签名接口
  123. // @Param Url query string true "url地址"
  124. // @Success 200 {object} models.WechatSign
  125. // @router /getWxSign [get]
  126. func (this *WechatCommonController) GetWxSign() {
  127. br := new(models.BaseResponse).Init()
  128. defer func() {
  129. this.Data["json"] = br
  130. this.ServeJSON()
  131. }()
  132. getUrl := this.GetString("Url")
  133. accessToken, err := services.GetWxAccessTokenByXzs()
  134. fmt.Println("getUrl:", accessToken)
  135. fmt.Println("getUrl:", getUrl)
  136. if err != nil {
  137. br.Msg = "获取用户信息失败"
  138. br.ErrMsg = "获取access_token失败,err:" + err.Error()
  139. return
  140. }
  141. if accessToken=="" {
  142. br.Msg = "获取用户信息失败"
  143. br.ErrMsg = "access_token 为空,"
  144. return
  145. }
  146. ticket, err := services.GetWxTicket(accessToken)
  147. if err != nil {
  148. br.Msg = "获取Ticket失败,请联系客服"
  149. br.ErrMsg = "获取Ticket失败,Err" + err.Error()
  150. return
  151. }
  152. if ticket == "" {
  153. br.Msg = "获取Ticket失败,请联系客服"
  154. br.ErrMsg = "ticket为空" + ticket
  155. return
  156. }
  157. nonceStr := utils.GetRandStringNoSpecialChar(16)
  158. fmt.Println(ticket)
  159. signature, nonceString, timestamp := services.GetWxSignature(ticket, getUrl, nonceStr)
  160. resp := new(models.WechatSign)
  161. resp.AppId = utils.WxPublicAppId
  162. resp.NonceStr = nonceString
  163. resp.Timestamp = timestamp
  164. resp.Url = getUrl
  165. resp.Signature = signature
  166. br.Ret = 200
  167. br.Success = true
  168. br.Msg = "获取签名成功"
  169. br.Data = resp
  170. }