瀏覽代碼

增加获取用户信息接口

wenzl 8 年之前
父節點
當前提交
bba2e26a01
共有 3 個文件被更改,包括 85 次插入1 次删除
  1. 1 1
      js/js.go
  2. 71 0
      user/user.go
  3. 13 0
      wechat.go

+ 1 - 1
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
 	}
 

+ 71 - 0
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
+}

+ 13 - 0
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)
+}