wechat.go 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355
  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. item, err := services.WxGetUserOpenIdByCodeXzs(code)
  34. if err != nil {
  35. br.Msg = "获取用户信息失败"
  36. br.ErrMsg = "获取用户信息失败,Err:" + err.Error()
  37. return
  38. }
  39. if item.Errcode != 0 {
  40. br.Msg = "获取用户信息失败"
  41. br.ErrMsg = "获取access_token 失败 errcode:" + strconv.Itoa(item.Errcode) + " ;errmsg:" + item.Errmsg
  42. return
  43. }
  44. openId := item.Openid
  45. if openId == "" {
  46. br.Msg = "获取用户信息失败"
  47. br.ErrMsg = "获取openid失败,openid:" + item.Openid
  48. return
  49. }
  50. resp := new(models.UserDetailByUserLogin)
  51. accessToken, err := services.GetWxAccessTokenByXzs()
  52. if err != nil {
  53. br.Msg = "获取用户信息失败"
  54. br.ErrMsg = "获取access_token失败,err:" + err.Error()
  55. return
  56. }
  57. if accessToken == "" {
  58. br.Msg = "获取用户信息失败"
  59. br.ErrMsg = "access_token 为空,"
  60. return
  61. }
  62. wxUserInfo, err := services.WxGetUserInfo(openId, accessToken)
  63. if err != nil {
  64. br.Msg = "获取用户信息失败"
  65. br.ErrMsg = "获取微信用户信息失败,Err:" + err.Error()
  66. return
  67. }
  68. if wxUserInfo.Errcode != 0 {
  69. userInfoJson, _ := json.Marshal(wxUserInfo)
  70. br.Msg = "登录失败"
  71. br.ErrMsg = "获取用户信息失败,err:" + string(userInfoJson)
  72. return
  73. }
  74. unionId := wxUserInfo.Unionid
  75. if unionId == "" {
  76. br.Msg = "获取用户信息失败"
  77. br.ErrMsg = "获取unionid失败,unionid:" + item.Openid
  78. return
  79. }
  80. total, err := models.GetCygxUserRecordCount(openId)
  81. if err != nil {
  82. br.Msg = "获取用户信息失败"
  83. br.ErrMsg = "查询数量失败,Err:" + err.Error()
  84. return
  85. }
  86. items := new(models.CygxUserRecord)
  87. items.OpenId = openId
  88. items.UnionId = unionId
  89. items.NickName = wxUserInfo.Nickname
  90. items.Sex = wxUserInfo.Sex
  91. items.Province = wxUserInfo.Province
  92. items.City = wxUserInfo.City
  93. items.Country = wxUserInfo.Country
  94. items.Headimgurl = wxUserInfo.Headimgurl
  95. items.CreateTime = time.Now()
  96. if total == 0 {
  97. _, err = models.AddCygxUserRecord(items)
  98. if err != nil {
  99. br.Msg = "获取用户信息失败"
  100. br.ErrMsg = "添加openid失败,Err:" + err.Error()
  101. return
  102. }
  103. }
  104. //else {
  105. // err = models.UpdateCygxUserRecord(items)
  106. // if err != nil {
  107. // br.Msg = "获取用户信息失败"
  108. // br.ErrMsg = "添加openid失败,Err:" + err.Error()
  109. // return
  110. // }
  111. //}
  112. token := utils.MD5(unionId)
  113. user, err := models.GetWxUserItemByUserUnionId(unionId)
  114. if err != nil && err.Error() != utils.ErrNoRow() {
  115. br.Msg = "获取用户信息失败"
  116. br.ErrMsg = "获取本地用户信息失败,Err:" + err.Error()
  117. return
  118. }
  119. totalToken, err := models.GetXzsSessionCountByToken(token)
  120. if err != nil {
  121. br.Msg = "获取用户信息失败"
  122. br.ErrMsg = "查询数量失败,Err:" + err.Error()
  123. return
  124. }
  125. if totalToken == 0 {
  126. itemsSession := new(models.CygxXzsSession)
  127. itemsSession.UnionId = unionId
  128. itemsSession.AccessToken = token
  129. itemsSession.CreatedTime = time.Now()
  130. if user != nil {
  131. itemsSession.UserId = user.UserId
  132. }
  133. err = models.AddCygxXzsSession(itemsSession)
  134. if err != nil {
  135. br.Msg = "获取用户信息失败"
  136. br.ErrMsg = "添加Token失败,Err:" + err.Error()
  137. return
  138. }
  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. if resp.Headimgurl == "" {
  161. resp.Headimgurl = user.HeadimgurlRecord
  162. }
  163. }
  164. if resp.Headimgurl == "" {
  165. resp.Headimgurl = utils.HeadimgurlDefault
  166. }
  167. resp.Token = token
  168. br.Ret = 200
  169. br.Success = true
  170. br.Msg = "获取成功"
  171. br.Data = resp
  172. }
  173. // @Title 微信获取签名接口
  174. // @Description 微信获取签名接口
  175. // @Param Url query string true "url地址"
  176. // @Success 200 {object} models.WechatSign
  177. // @router /getWxSign [get]
  178. func (this *WechatCommonController) GetWxSign() {
  179. br := new(models.BaseResponse).Init()
  180. defer func() {
  181. this.Data["json"] = br
  182. this.ServeJSON()
  183. }()
  184. getUrl := this.GetString("Url")
  185. accessToken, err := services.GetWxAccessTokenByXzs()
  186. if err != nil {
  187. br.Msg = "获取用户信息失败"
  188. br.ErrMsg = "获取access_token失败,err:" + err.Error()
  189. return
  190. }
  191. if accessToken == "" {
  192. br.Msg = "获取用户信息失败"
  193. br.ErrMsg = "access_token 为空,"
  194. return
  195. }
  196. ticket, err := services.GetWxTicket(accessToken)
  197. if err != nil {
  198. br.Msg = "获取Ticket失败,请联系客服"
  199. br.ErrMsg = "获取Ticket失败,Err" + err.Error()
  200. return
  201. }
  202. if ticket == "" {
  203. br.Msg = "获取Ticket失败,请联系客服"
  204. br.ErrMsg = "ticket为空" + ticket
  205. return
  206. }
  207. nonceStr := utils.GetRandStringNoSpecialChar(16)
  208. signature, nonceString, timestamp := services.GetWxSignature(ticket, getUrl, nonceStr)
  209. resp := new(models.WechatSign)
  210. resp.AppId = utils.WxPublicAppId
  211. resp.NonceStr = nonceString
  212. resp.Timestamp = timestamp
  213. resp.Url = getUrl
  214. resp.Signature = signature
  215. br.Ret = 200
  216. br.Success = true
  217. br.Msg = "获取签名成功"
  218. br.Data = resp
  219. }
  220. // @Title 获取用户详情
  221. // @Description 获取用户详情接口
  222. // @Param Token query string true "Token"
  223. // @Success 200 {object} models.UserDetailByUserLogin
  224. // @router /user/detail [get]
  225. func (this *WechatCommonController) UserInfo() {
  226. br := new(models.BaseResponse).Init()
  227. defer func() {
  228. this.Data["json"] = br
  229. this.ServeJSON()
  230. }()
  231. token := this.GetString("Token")
  232. if token == "" {
  233. br.Msg = "参数错误"
  234. br.ErrMsg = "Token 为空"
  235. return
  236. }
  237. resp := new(models.UserDetailByUserLogin)
  238. session, err := models.GetUnionidByToken(token)
  239. if err != nil {
  240. br.Msg = "获取用户信息失败"
  241. br.ErrMsg = "查询session失败,Err:" + err.Error()
  242. return
  243. }
  244. unionId := session.UnionId
  245. user, err := models.GetWxUserItemByUserUnionId(unionId)
  246. if err != nil && err.Error() != utils.ErrNoRow() {
  247. br.Msg = "获取用户信息失败"
  248. br.ErrMsg = "获取本地用户信息失败,Err:" + err.Error()
  249. return
  250. }
  251. if user == nil {
  252. resp.HasPermission = 3
  253. } else {
  254. permissionStr, err := models.GetCompanyPermission(user.CompanyId)
  255. if err != nil {
  256. br.Msg = "获取信息失败"
  257. br.ErrMsg = "获取客户信息失败,Err:" + err.Error()
  258. return
  259. }
  260. if permissionStr != "" {
  261. resp.Permission = permissionStr
  262. resp.Mobile = user.Mobile
  263. resp.RealName = user.RealName
  264. resp.CompanyName = user.CompanyName
  265. resp.HasPermission = 1
  266. } else {
  267. resp.Mobile = user.Mobile
  268. resp.RealName = user.RealName
  269. resp.HasPermission = 2
  270. }
  271. resp.Headimgurl = user.HeadimgurlRecord
  272. }
  273. if resp.Headimgurl == "" {
  274. resp.Headimgurl = utils.HeadimgurlDefault
  275. }
  276. resp.Token = utils.MD5(unionId)
  277. br.Ret = 200
  278. br.Success = true
  279. br.Msg = "获取成功"
  280. br.Data = resp
  281. }
  282. // @Title 获取用户详情
  283. // @Description 获取用户详情接口
  284. // @Param Token query string true "Token"
  285. // @Success 200 {object} models.UserDetailByUserLogin
  286. // @router /test [get]
  287. func (this *WechatCommonController) Test() {
  288. br := new(models.BaseResponse).Init()
  289. defer func() {
  290. this.Data["json"] = br
  291. this.ServeJSON()
  292. }()
  293. //测试路由
  294. token := this.GetString("Token")
  295. if token == "" {
  296. br.Msg = "参数错误"
  297. br.ErrMsg = "Token 为空"
  298. return
  299. }
  300. resp := new(models.UserDetailByUserLogin)
  301. session, err := models.GetUnionidByToken(token)
  302. if err != nil {
  303. br.Msg = "获取用户信息失败"
  304. br.ErrMsg = "查询session失败,Err:" + err.Error()
  305. return
  306. }
  307. unionId := session.UnionId
  308. user, err := models.GetWxUserItemByUserUnionId(unionId)
  309. if err != nil && err.Error() != utils.ErrNoRow() {
  310. br.Msg = "获取用户信息失败"
  311. br.ErrMsg = "获取本地用户信息失败,Err:" + err.Error()
  312. return
  313. }
  314. if user == nil {
  315. resp.HasPermission = 3
  316. } else {
  317. permissionStr, err := models.GetCompanyPermission(user.CompanyId)
  318. if err != nil {
  319. br.Msg = "获取信息失败"
  320. br.ErrMsg = "获取客户信息失败,Err:" + err.Error()
  321. return
  322. }
  323. if permissionStr != "" {
  324. resp.Permission = permissionStr
  325. resp.Mobile = user.Mobile
  326. resp.RealName = user.RealName
  327. resp.CompanyName = user.CompanyName
  328. resp.HasPermission = 1
  329. } else {
  330. resp.Mobile = user.Mobile
  331. resp.RealName = user.RealName
  332. resp.HasPermission = 2
  333. }
  334. resp.Headimgurl = user.HeadimgurlRecord
  335. }
  336. if resp.Headimgurl == "" {
  337. resp.Headimgurl = utils.HeadimgurlDefault
  338. }
  339. resp.Token = utils.MD5(unionId)
  340. br.Ret = 200
  341. br.Success = true
  342. br.Msg = "获取成功"
  343. br.Data = resp
  344. }