user.go 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  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?access_token=%s&openid=%s&lang=zh_CN"
  10. updateRemarkURL = "https://api.weixin.qq.com/cgi-bin/user/info/updateremark?access_token=%s"
  11. )
  12. //User 用户管理
  13. type User struct {
  14. *context.Context
  15. }
  16. //NewUser 实例化
  17. func NewUser(context *context.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. var accessToken string
  43. accessToken, err = user.GetAccessToken()
  44. if err != nil {
  45. return
  46. }
  47. uri := fmt.Sprintf(userInfoURL, accessToken, openID)
  48. var response []byte
  49. response, err = util.HTTPGet(uri)
  50. if err != nil {
  51. return
  52. }
  53. userInfo = new(Info)
  54. err = json.Unmarshal(response, userInfo)
  55. if err != nil {
  56. return
  57. }
  58. if userInfo.ErrCode != 0 {
  59. err = fmt.Errorf("GetUserInfo Error , errcode=%d , errmsg=%s", userInfo.ErrCode, userInfo.ErrMsg)
  60. return
  61. }
  62. return
  63. }
  64. // UpdateRemark 设置用户备注名
  65. func (user *User) UpdateRemark(openID, remark string) (err error) {
  66. var accessToken string
  67. accessToken, err = user.GetAccessToken()
  68. if err != nil {
  69. return
  70. }
  71. uri := fmt.Sprintf(updateRemarkURL, accessToken)
  72. var response []byte
  73. response, err = util.PostJSON(uri, map[string]string{"openid": openID, "remark": remark})
  74. if err != nil {
  75. return
  76. }
  77. return util.DecodeWithCommonError(response, "UpdateRemark")
  78. }