user.go 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. package user
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "github.com/yaotian/gowechat/mp/base"
  6. "github.com/yaotian/gowechat/util"
  7. "github.com/yaotian/gowechat/wxcontext"
  8. )
  9. const (
  10. userInfoURL = "https://api.weixin.qq.com/cgi-bin/user/info"
  11. )
  12. //User 用户管理
  13. type User struct {
  14. base.MpBase
  15. }
  16. //NewUser 实例化
  17. func NewUser(context *wxcontext.Context) *User {
  18. user := new(User)
  19. user.Context = context
  20. return user
  21. }
  22. //Info 用户基本信息
  23. type Info struct {
  24. util.CommonError
  25. Subscribe int32 `json:"subscribe"`
  26. OpenID string `json:"openid"`
  27. Nickname string `json:"nickname"`
  28. Sex int32 `json:"sex"`
  29. City string `json:"city"`
  30. Country string `json:"country"`
  31. Province string `json:"province"`
  32. Language string `json:"language"`
  33. Headimgurl string `json:"headimgurl"`
  34. SubscribeTime int32 `json:"subscribe_time"`
  35. UnionID string `json:"unionid"`
  36. Remark string `json:"remark"`
  37. GroupID int32 `json:"groupid"`
  38. TagidList []string `json:"tagid_list"`
  39. }
  40. //GetUserInfo 获取用户基本信息
  41. func (user *User) GetUserInfo(openID string) (userInfo *Info, err error) {
  42. url := fmt.Sprintf("%s?openid=%s&lang=zh_CN", userInfoURL, openID)
  43. var response []byte
  44. response, err = user.HTTPGetWithAccessToken(url)
  45. if err != nil {
  46. return
  47. }
  48. userInfo = new(Info)
  49. err = json.Unmarshal(response, userInfo)
  50. return
  51. }
  52. //IsSubscribed 是否已经关注公众号
  53. func (user *User) IsSubscribed(openID string) (subscribed bool, err error) {
  54. var userInfo *Info
  55. userInfo, err = user.GetUserInfo(openID)
  56. if err != nil {
  57. return
  58. }
  59. subscribed = userInfo.Subscribe == 1
  60. return
  61. }