wechat.go 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269
  1. package controllers
  2. import (
  3. "encoding/json"
  4. "hongze/hongze_cygxzs/models"
  5. "hongze/hongze_cygxzs/services"
  6. "hongze/hongze_cygxzs/utils"
  7. "strconv"
  8. "time"
  9. )
  10. type WechatController struct {
  11. BaseAuthController
  12. }
  13. type WechatCommonController struct {
  14. BaseCommonController
  15. }
  16. // @Title 微信登录小助手接口
  17. // @Description 微信登录小助手接口
  18. // @Param Code query string true "微信唯一编码code"
  19. // @Success 200 {object} models.UserDetailByUserLogin
  20. // @router /loginByxzs [get]
  21. func (this *WechatCommonController) WechatLoginByxzs() {
  22. br := new(models.BaseResponse).Init()
  23. defer func() {
  24. this.Data["json"] = br
  25. this.ServeJSON()
  26. }()
  27. code := this.GetString("Code")
  28. if code == "" {
  29. br.Msg = "参数错误"
  30. br.ErrMsg = "Code 为空"
  31. return
  32. }
  33. var token string
  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. accessToken, err := services.GetWxAccessTokenByXzs()
  53. if err != nil {
  54. br.Msg = "获取用户信息失败"
  55. br.ErrMsg = "获取access_token失败,err:" + err.Error()
  56. return
  57. }
  58. if accessToken == "" {
  59. br.Msg = "获取用户信息失败"
  60. br.ErrMsg = "access_token 为空,"
  61. return
  62. }
  63. wxUserInfo, err := services.WxGetUserInfo(openId, accessToken)
  64. if err != nil {
  65. br.Msg = "获取用户信息失败"
  66. br.ErrMsg = "获取微信用户信息失败,Err:" + err.Error()
  67. return
  68. }
  69. if wxUserInfo.Errcode != 0 {
  70. userInfoJson, _ := json.Marshal(wxUserInfo)
  71. br.Msg = "登录失败"
  72. br.ErrMsg = "获取用户信息失败,err:" + string(userInfoJson)
  73. return
  74. }
  75. unionId := wxUserInfo.Unionid
  76. if unionId == "" {
  77. br.Msg = "获取用户信息失败"
  78. br.ErrMsg = "获取unionid失败,unionid:" + wxUserInfo.Unionid
  79. return
  80. }
  81. total, err := models.GetCygxUserRecordCount(openId)
  82. if err != nil {
  83. br.Msg = "获取用户信息失败"
  84. br.ErrMsg = "查询数量失败,Err:" + err.Error()
  85. return
  86. }
  87. items := new(models.CygxUserRecord)
  88. items.OpenId = openId
  89. items.UnionId = unionId
  90. items.NickName = wxUserInfo.Nickname
  91. items.Sex = wxUserInfo.Sex
  92. items.Province = wxUserInfo.Province
  93. items.City = wxUserInfo.City
  94. items.Country = wxUserInfo.Country
  95. items.Headimgurl = wxUserInfo.Headimgurl
  96. items.CreateTime = time.Now()
  97. if total == 0 {
  98. _, err = models.AddCygxUserRecord(items)
  99. if err != nil {
  100. br.Msg = "获取用户信息失败"
  101. br.ErrMsg = "添加openid失败,Err:" + err.Error()
  102. return
  103. }
  104. }
  105. timeUnix := time.Now().Unix()
  106. timeUnixStr := strconv.FormatInt(timeUnix, 10)
  107. user, err := models.GetWxUserItemByUserUnionId(unionId)
  108. if err != nil && err.Error() != utils.ErrNoRow() {
  109. br.Msg = "获取用户信息失败"
  110. br.ErrMsg = "获取本地用户信息失败,Err:" + err.Error()
  111. return
  112. }
  113. totalItem, err := models.GetTokenByOpenId(openId)
  114. if err != nil && err.Error() != utils.ErrNoRow() {
  115. br.Msg = "获取用户信息失败"
  116. br.ErrMsg = "查询数量失败,Err:" + err.Error()
  117. return
  118. }
  119. if totalItem == nil {
  120. token := utils.MD5(unionId) + utils.MD5(timeUnixStr)
  121. itemsSession := new(models.CygxXzsSession)
  122. itemsSession.UnionId = unionId
  123. itemsSession.OpenId = openId
  124. itemsSession.AccessToken = token
  125. itemsSession.CreatedTime = time.Now()
  126. itemsSession.LastUpdatedTime = time.Now()
  127. itemsSession.ExpireTime = time.Now().AddDate(0, 3, 0)
  128. if user != nil {
  129. itemsSession.UserId = user.UserId
  130. }
  131. err = models.AddCygxXzsSession(itemsSession)
  132. if err != nil {
  133. br.Msg = "获取用户信息失败"
  134. br.ErrMsg = "添加Token失败,Err:" + err.Error()
  135. return
  136. }
  137. } else {
  138. token = totalItem.AccessToken
  139. }
  140. if user == nil {
  141. resp.HasPermission = 3
  142. } else {
  143. permissionStr, err := models.GetCompanyPermission(user.CompanyId)
  144. if err != nil {
  145. br.Msg = "获取信息失败"
  146. br.ErrMsg = "获取客户信息失败,Err:" + err.Error()
  147. return
  148. }
  149. if permissionStr != "" {
  150. resp.Permission = permissionStr
  151. resp.Mobile = user.Mobile
  152. resp.RealName = user.RealName
  153. resp.CompanyName = user.CompanyName
  154. resp.HasPermission = 1
  155. } else {
  156. resp.Mobile = user.Mobile
  157. resp.RealName = user.RealName
  158. resp.HasPermission = 2
  159. }
  160. resp.Headimgurl = user.HeadimgurlRecord
  161. }
  162. resp.Token = token
  163. br.Ret = 200
  164. br.Success = true
  165. br.Msg = "获取成功"
  166. br.Data = resp
  167. }
  168. // @Title 微信获取签名接口
  169. // @Description 微信获取签名接口
  170. // @Param Url query string true "url地址"
  171. // @Success 200 {object} models.WechatSign
  172. // @router /getWxSign [get]
  173. func (this *WechatCommonController) GetWxSign() {
  174. br := new(models.BaseResponse).Init()
  175. defer func() {
  176. this.Data["json"] = br
  177. this.ServeJSON()
  178. }()
  179. getUrl := this.GetString("Url")
  180. accessToken, err := services.GetWxAccessTokenByXzs()
  181. if err != nil {
  182. br.Msg = "获取用户信息失败"
  183. br.ErrMsg = "获取access_token失败,err:" + err.Error()
  184. return
  185. }
  186. if accessToken == "" {
  187. br.Msg = "获取用户信息失败"
  188. br.ErrMsg = "access_token 为空,"
  189. return
  190. }
  191. ticket, err := services.GetWxTicket(accessToken)
  192. if err != nil {
  193. br.Msg = "获取Ticket失败,请联系客服"
  194. br.ErrMsg = "获取Ticket失败,Err" + err.Error()
  195. return
  196. }
  197. if ticket == "" {
  198. br.Msg = "获取Ticket失败,请联系客服"
  199. br.ErrMsg = "ticket为空" + ticket
  200. return
  201. }
  202. nonceStr := utils.GetRandStringNoSpecialChar(16)
  203. signature, nonceString, timestamp := services.GetWxSignature(ticket, getUrl, nonceStr)
  204. resp := new(models.WechatSign)
  205. resp.AppId = utils.WxPublicAppId
  206. resp.NonceStr = nonceString
  207. resp.Timestamp = timestamp
  208. resp.Url = getUrl
  209. resp.Signature = signature
  210. br.Ret = 200
  211. br.Success = true
  212. br.Msg = "获取签名成功"
  213. br.Data = resp
  214. }
  215. // @Title 获取用户详情
  216. // @Description 获取用户详情接口
  217. // @Success 200 {object} models.UserDetailByUserLogin
  218. // @router /user/detail [get]
  219. func (this *WechatController) UserInfo() {
  220. br := new(models.BaseResponse).Init()
  221. defer func() {
  222. this.Data["json"] = br
  223. this.ServeJSON()
  224. }()
  225. user := this.User
  226. if user == nil {
  227. br.Msg = "请登录"
  228. br.ErrMsg = "请登录,用户信息为空"
  229. br.Ret = 408
  230. return
  231. }
  232. resp := new(models.UserDetailByUserLogin)
  233. if user.Mobile == "" {
  234. resp.HasPermission = 3
  235. } else {
  236. permissionStr, err := models.GetCompanyPermission(user.CompanyId)
  237. if err != nil {
  238. br.Msg = "获取信息失败"
  239. br.ErrMsg = "获取客户信息失败,Err:" + err.Error()
  240. return
  241. }
  242. if permissionStr != "" {
  243. resp.Permission = permissionStr
  244. resp.Mobile = user.Mobile
  245. resp.RealName = user.RealName
  246. resp.CompanyName = user.CompanyName
  247. resp.HasPermission = 1
  248. } else {
  249. resp.Mobile = user.Mobile
  250. resp.RealName = user.RealName
  251. resp.HasPermission = 2
  252. }
  253. resp.Headimgurl = user.Headimgurl
  254. }
  255. br.Ret = 200
  256. br.Success = true
  257. br.Msg = "获取成功"
  258. br.Data = resp
  259. }