diff --git a/js/js.go b/js/js.go index c720178..a8bdaa9 100644 --- a/js/js.go +++ b/js/js.go @@ -98,7 +98,7 @@ func (js *Js) getTicketFromServer() (ticket resTicket, err error) { return } if ticket.ErrCode != 0 { - err = fmt.Errorf("getTicket Error : errcode=%s , errmsg=%s", ticket.ErrCode, ticket.ErrMsg) + err = fmt.Errorf("getTicket Error : errcode=%d , errmsg=%s", ticket.ErrCode, ticket.ErrMsg) return } diff --git a/user/user.go b/user/user.go new file mode 100644 index 0000000..4b00ed3 --- /dev/null +++ b/user/user.go @@ -0,0 +1,71 @@ +package user + +import ( + "encoding/json" + "fmt" + + "github.com/silenceper/wechat/context" + "github.com/silenceper/wechat/util" +) + +const ( + userInfoURL = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=%s&openid=%s&lang=zh_CN" +) + +//User 用户管理 +type User struct { + *context.Context +} + +//NewUser 实例化 +func NewUser(context *context.Context) *User { + user := new(User) + user.Context = context + return user +} + +//Info 用户基本信息 +type Info struct { + util.CommonError + + Subscribe int32 `json:"subscribe"` + OpenID string `json:"openid"` + Nickname string `json:"nickname"` + Sex int32 `json:"sex"` + City string `json:"city"` + Country string `json:"country"` + Province string `json:"province"` + Language string `json:"language"` + Headimgurl string `json:"headimgurl"` + SubscribeTime int32 `json:"subscribe_time"` + UnionID string `json:"unionid"` + Remark string `json:"remark"` + GroupID int32 `json:"groupid"` + TagidList []string `json:"tagid_list"` +} + +//GetUserInfo 获取用户基本信息 +func (user *User) GetUserInfo(openID string) (userInfo *Info, err error) { + var accessToken string + accessToken, err = user.GetAccessToken() + if err != nil { + return + } + + uri := fmt.Sprintf(userInfoURL, accessToken, openID) + var response []byte + response, err = util.HTTPGet(uri) + if err != nil { + return + } + userInfo = new(Info) + err = json.Unmarshal(response, userInfo) + if err != nil { + return + } + if userInfo.ErrCode != 0 { + err = fmt.Errorf("GetUserInfo Error , errcode=%d , errmsg=%s", userInfo.ErrCode, userInfo.ErrMsg) + return + } + return +} diff --git a/wechat.go b/wechat.go index bd5adf9..c856072 100644 --- a/wechat.go +++ b/wechat.go @@ -11,6 +11,7 @@ import ( "github.com/silenceper/wechat/menu" "github.com/silenceper/wechat/oauth" "github.com/silenceper/wechat/server" + "github.com/silenceper/wechat/user" ) // Wechat struct @@ -44,6 +45,11 @@ func copyConfigToContext(cfg *Config, context *context.Context) { context.SetJsAPITicketLock(new(sync.RWMutex)) } +//GetAccessToken 获取access_token +func (wc *Wechat) GetAccessToken() (string, error) { + return wc.Context.GetAccessToken() +} + // GetServer 消息管理 func (wc *Wechat) GetServer(req *http.Request, writer http.ResponseWriter) *server.Server { wc.Context.Request = req @@ -76,3 +82,10 @@ func (wc *Wechat) GetMenu(req *http.Request, writer http.ResponseWriter) *menu.M wc.Context.Writer = writer return menu.NewMenu(wc.Context) } + +// GetUser 菜单管理接口 +func (wc *Wechat) GetUser(req *http.Request, writer http.ResponseWriter) *user.User { + wc.Context.Request = req + wc.Context.Writer = writer + return user.NewUser(wc.Context) +}