wechat.go 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  1. package services
  2. import (
  3. "eta/eta_mini_api/models"
  4. "eta/eta_mini_api/services/wechat"
  5. "eta/eta_mini_api/utils"
  6. "fmt"
  7. "time"
  8. )
  9. // WechatSubscribe 关注公众号
  10. func WechatSubscribe(openId string) {
  11. var err error
  12. defer func() {
  13. if err != nil {
  14. tips := fmt.Sprintf("WechatSubscribe, OpenId: %s, ErrMsg: %v", openId, err)
  15. utils.FileLog.Info(tips)
  16. fmt.Println(tips)
  17. }
  18. }()
  19. if openId == "" {
  20. err = fmt.Errorf("OpenId为空")
  21. return
  22. }
  23. // 获取订阅信息
  24. userRecord := new(models.UserRecord)
  25. {
  26. cond := fmt.Sprintf(` AND %s = ?`, userRecord.Cols().OpenId)
  27. pars := make([]interface{}, 0)
  28. pars = append(pars, openId)
  29. record, e := userRecord.GetItemByCondition(cond, pars, "")
  30. if e != nil && e.Error() != utils.ErrNoRow() {
  31. err = fmt.Errorf("获取订阅记录失败, %v", e)
  32. return
  33. }
  34. if record != nil && record.UserRecordId > 0 {
  35. userRecord = record
  36. }
  37. }
  38. // 获取unionId
  39. var unionId string
  40. wechatUser, e := wechat.GetUserInfo(openId)
  41. if e != nil {
  42. err = fmt.Errorf("获取公众号用户信息失败, %v", e)
  43. return
  44. }
  45. if wechatUser.UnionID == "" {
  46. err = fmt.Errorf("UnionId有误")
  47. return
  48. }
  49. unionId = wechatUser.UnionID
  50. // 订阅信息不存在那么新增
  51. if userRecord.UserRecordId == 0 {
  52. userRecord.OpenId = openId
  53. userRecord.UnionId = unionId
  54. userRecord.Subscribe = models.UserSubscribed
  55. userRecord.SubscribeTime = time.Now().Local()
  56. userRecord.NickName = wechatUser.Nickname
  57. userRecord.Gender = int(wechatUser.Sex)
  58. userRecord.Avatar = wechatUser.Headimgurl
  59. //userRecord.Province = wechatUser.Province
  60. //userRecord.City = wechatUser.City
  61. //userRecord.Country = wechatUser.Country
  62. userRecord.CreateTime = time.Now().Local()
  63. userRecord.ModifyTime = time.Now().Local()
  64. if e := userRecord.Create(); e != nil {
  65. err = fmt.Errorf("新增订阅记录失败, %v", e)
  66. return
  67. }
  68. }
  69. // 查询是否有小程序用户
  70. users := new(models.Users)
  71. if userRecord.UserId > 0 {
  72. u, e := users.GetItemById(userRecord.UserId)
  73. if e != nil && e.Error() != utils.ErrNoRow() {
  74. err = fmt.Errorf("获取用户信息失败, %v", e)
  75. return
  76. }
  77. if u != nil && u.UserId > 0 {
  78. users = u
  79. }
  80. } else {
  81. cond := fmt.Sprintf(` AND %s = ?`, users.Cols().UnionId)
  82. pars := make([]interface{}, 0)
  83. pars = append(pars, unionId)
  84. u, e := users.GetItemByCondition(cond, pars, "")
  85. if e != nil && e.Error() != utils.ErrNoRow() {
  86. err = fmt.Errorf("UnionId获取用户信息失败, %s, %v", unionId, e)
  87. return
  88. }
  89. if u != nil && u.UserId > 0 {
  90. users = u
  91. }
  92. }
  93. // 更新订阅记录
  94. var hasUsers bool
  95. updateCols := []string{userRecord.Cols().UnionId, userRecord.Cols().Subscribe, userRecord.Cols().SubscribeTime, userRecord.Cols().ModifyTime}
  96. if users.UserId > 0 {
  97. userRecord.UserId = users.UserId
  98. updateCols = append(updateCols, userRecord.Cols().UserId)
  99. hasUsers = true
  100. }
  101. userRecord.UnionId = unionId
  102. userRecord.Subscribe = models.UserSubscribed
  103. userRecord.SubscribeTime = time.Now().Local()
  104. userRecord.ModifyTime = time.Now().Local()
  105. if e := userRecord.Update(updateCols); e != nil {
  106. err = fmt.Errorf("更新订阅记录失败, %v", e)
  107. return
  108. }
  109. // 更新用户信息
  110. if !hasUsers {
  111. return
  112. }
  113. users.UnionId = unionId
  114. users.Subscribe = userRecord.Subscribe
  115. users.ModifyTime = time.Now().Local()
  116. updateCols = []string{users.Cols().Subscribe, users.Cols().ModifyTime}
  117. if e := users.Update(updateCols); e != nil {
  118. err = fmt.Errorf("UnionId绑定用户失败, %v", e)
  119. return
  120. }
  121. }
  122. // WechatUnsubscribe 取消关注公众号
  123. func WechatUnsubscribe(openId string) {
  124. var err error
  125. defer func() {
  126. if err != nil {
  127. tips := fmt.Sprintf("WechatUnsubscribe, OpenId: %s, ErrMsg: %v", openId, err)
  128. utils.FileLog.Info(tips)
  129. fmt.Println(tips)
  130. }
  131. }()
  132. if openId == "" {
  133. err = fmt.Errorf("OpenId为空")
  134. return
  135. }
  136. userRecord := new(models.UserRecord)
  137. {
  138. cond := fmt.Sprintf(` AND %s = ?`, userRecord.Cols().OpenId)
  139. pars := make([]interface{}, 0)
  140. pars = append(pars, openId)
  141. record, e := userRecord.GetItemByCondition(cond, pars, "")
  142. if e != nil {
  143. if e.Error() == utils.ErrNoRow() {
  144. err = fmt.Errorf("订阅信息不存在")
  145. return
  146. }
  147. err = fmt.Errorf("获取订阅记录失败, %v", e)
  148. return
  149. }
  150. userRecord = record
  151. }
  152. userRecord.Subscribe = models.UserNoSubscribe
  153. userRecord.SubscribeTime = time.Now().Local()
  154. userRecord.ModifyTime = time.Now().Local()
  155. updateCols := []string{userRecord.Cols().Subscribe, userRecord.Cols().SubscribeTime, userRecord.Cols().ModifyTime}
  156. if e := userRecord.Update(updateCols); e != nil {
  157. err = fmt.Errorf("更新订阅记录失败, %v", e)
  158. return
  159. }
  160. // 更新用户表
  161. users := new(models.Users)
  162. if userRecord.UserId > 0 {
  163. u, e := users.GetItemById(userRecord.UserId)
  164. if e != nil && e.Error() != utils.ErrNoRow() {
  165. err = fmt.Errorf("获取用户信息失败, %v", e)
  166. return
  167. }
  168. if u != nil && u.UserId > 0 {
  169. users = u
  170. }
  171. }
  172. if users.UserId == 0 && userRecord.UnionId != "" {
  173. cond := fmt.Sprintf(` AND %s = ?`, users.Cols().UnionId)
  174. pars := make([]interface{}, 0)
  175. pars = append(pars, userRecord.UnionId)
  176. u, e := users.GetItemByCondition(cond, pars, "")
  177. if e != nil && e.Error() != utils.ErrNoRow() {
  178. err = fmt.Errorf("获取用户信息失败, %v", e)
  179. return
  180. }
  181. if u != nil && u.UserId > 0 {
  182. users = u
  183. }
  184. }
  185. if users.UserId == 0 {
  186. err = fmt.Errorf("用户信息不存在")
  187. return
  188. }
  189. users.Subscribe = userRecord.Subscribe
  190. users.ModifyTime = time.Now().Local()
  191. updateCols = []string{users.Cols().Subscribe, users.Cols().ModifyTime}
  192. if e := users.Update(updateCols); e != nil {
  193. err = fmt.Errorf("更新用户关注状态失败, %v", e)
  194. }
  195. return
  196. }