goProject/trunk/center/usercenter/internal/wxuser/wechatsdkservice.go

83 lines
2.4 KiB
Go

package wxuser
import (
configYaml "common/configsYaml"
"common/resultStatus"
"encoding/json"
"fmt"
"goutil/logUtilPlus"
"goutil/webUtil"
)
const (
Url = "https://api.weixin.qq.com/sns/"
)
type WechatsdkService struct {
}
// 通过code来换取assesstoken
func (w *WechatsdkService) GetAccessToken(code string, severId int32) (resultStatus.ResultStatus, int64) {
weburl := fmt.Sprintf("%s%s", Url, "oauth2/access_token") //"https://api.weixin.qq.com/sns/oauth2/access_token"
data := make(map[string]string)
data["appid"] = configYaml.GetWxconfig().AppId
data["secret"] = configYaml.GetWxconfig().AppSecret
data["code"] = code
data["grant_type"] = "authorization_code"
status, resp, err := webUtil.GetWebData2(weburl, data, nil, nil)
if status != 200 || err != nil {
return resultStatus.RequestError, 0
}
if len(resp) == 0 {
logUtilPlus.ErrorLog("The result is empty, but we expect not empty")
return resultStatus.EmptyResp, 0
}
logUtilPlus.ErrorLog("resp=%s", string(resp))
tokens := &WechatTokens{}
if err := json.Unmarshal(resp, tokens); err != nil {
logUtilPlus.ErrorLog("Unmarshal is error, err:%s", err)
return resultStatus.UnmarshalError, 0
}
if tokens.Errcode != 0 || tokens.Errmsg != "" {
logUtilPlus.ErrorLog("errcode:%d, msg:%s,", tokens.Errcode, tokens.Errmsg)
return resultStatus.RequestError, 0
}
Uid := CreatUid(tokens.OpenId, 1)
go func() {
if userInfo, _ := GetUserByOpenId(tokens.OpenId); userInfo == nil {
w.GetUserInfo(tokens.AccessToken, tokens.OpenId)
}
}()
go RecordLoginIn(Uid, severId)
return resultStatus.Success, Uid
}
// 换取用户信息
func (w *WechatsdkService) GetUserInfo(accessToken, openid string) {
weburl := fmt.Sprintf("%s%s", Url, "userinfo") //"https://api.weixin.qq.com/sns/userinfo"
data := make(map[string]string)
data["appid"] = configYaml.GetWxconfig().AppId
data["access_token"] = accessToken
data["openid"] = openid
status, resp, err := webUtil.GetWebData2(weburl, data, nil, nil)
if status != 200 || err != nil {
logUtilPlus.ErrorLog("Wrongstatus. status:%d, err:%s", status, err)
}
if len(resp) == 0 {
logUtilPlus.ErrorLog("The result is empty, but we expect not empty")
}
var userInfo *WxUserInfo
if err := json.Unmarshal(resp, userInfo); err != nil {
logUtilPlus.ErrorLog("Unmarshal is error, err:%s", err)
return
}
AddUser(userInfo)
}
var wechatsdkservice *WechatsdkService
func GetWechatsdkService() *WechatsdkService {
return wechatsdkservice
}