user.go 1.6 KB

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