|
|
@@ -106,11 +106,18 @@ func (self *PermitController) XcxAuthorize() {
|
|
|
}
|
|
|
wxUser := user_model.GetWxUserByUnionid(encryptedData.UnionId, false)
|
|
|
ip := self.Ctx.Input.IP()
|
|
|
- //注册会员
|
|
|
- user := user_model.Create("", ip)
|
|
|
+ var user *user_model.User
|
|
|
+ if wxUser != nil && wxUser.UserId > 0 {
|
|
|
+ //查找已注册会员
|
|
|
+ user = user_model.GetUserById(wxUser.UserId, false)
|
|
|
+ } else {
|
|
|
+ //注册会员
|
|
|
+ user = user_model.Create("", ip)
|
|
|
+ }
|
|
|
if user == nil {
|
|
|
self.ReturnError(403, apps.RegisterUserError, "", nil)
|
|
|
}
|
|
|
+
|
|
|
if wxUser != nil {
|
|
|
wxUser.Openid = encryptedData.OpenId
|
|
|
} else {
|
|
|
@@ -149,7 +156,92 @@ func (self *PermitController) XcxAuthorize() {
|
|
|
wxUser.Country = info.UserInfo.Country
|
|
|
// beego.BeeLogger.Warn("XcxAuthorize wxUser before save() Nickname:%s, Sex:%s, City:%s, Province:%s, Country:%s ", wxUser.Nickname, wxUser.Sex, wxUser.City, wxUser.Province, wxUser.Country)
|
|
|
wxUser.Save()
|
|
|
- // beego.BeeLogger.Warn("XcxAuthorize wxUser after save() Nickname:%s, Sex:%s, City:%s, Province:%s, Country:%s ", wxUser.Nickname, wxUser.Sex, wxUser.City, wxUser.Province, wxUser.Country)
|
|
|
+ beego.BeeLogger.Warn("XcxAuthorize wxUser after save() Nickname:%s, Sex:%s, City:%s, Province:%s, Country:%s ", wxUser.Nickname, wxUser.Sex, wxUser.City, wxUser.Province, wxUser.Country)
|
|
|
+ wxUser.UploadHead(info.UserInfo.AvatarUrl)
|
|
|
+
|
|
|
+ if wxUser != nil {
|
|
|
+ self.SetSession(apps.SessionWxUserKey, wxUser.Id)
|
|
|
+ }
|
|
|
+ // 如果微信用户已绑定手机,则找出userId,并且赋值给session[userId]
|
|
|
+ if wxUser != nil && wxUser.UserId > 0 {
|
|
|
+ user := user_model.GetUserById(wxUser.UserId, false)
|
|
|
+ user.CopyWxUserHead(wxUser.Head)
|
|
|
+ self.SetSession(apps.SessionUserKey, wxUser.UserId)
|
|
|
+ }
|
|
|
+ self.Data["json"] = encryptedData
|
|
|
+ self.ServeJSON()
|
|
|
+}
|
|
|
+
|
|
|
+//小程序授权
|
|
|
+func (self *PermitController) SaveWxuserInfo() {
|
|
|
+ params := self.GetString("userinfo")
|
|
|
+ type UserInfo struct {
|
|
|
+ NickName string `json:"nickName"` // 用户的昵称
|
|
|
+ Gender int64 `json:"gender"` // 用户的性别, 值为1时是男性, 值为2时是女性, 值为0时是未知
|
|
|
+ Language string `json:"language"` // 用户的语言, zh_CN, zh_TW, en
|
|
|
+ City string `json:"city"` // 用户所在城市
|
|
|
+ Province string `json:"province"` // 用户所在省份
|
|
|
+ Country string `json:"country"` // 用户所在国家
|
|
|
+ AvatarUrl string `json:"avatarUrl"` // 头像
|
|
|
+ }
|
|
|
+ type Info struct {
|
|
|
+ ErrMsg string `json:"errMsg"`
|
|
|
+ RawData string `json:"rawData"`
|
|
|
+ Signature string `json:"signature"`
|
|
|
+ Iv string `json:"iv"`
|
|
|
+ EncryptedData string `json:"encryptedData"`
|
|
|
+ UserInfo *UserInfo `json:"userInfo"`
|
|
|
+ }
|
|
|
+ info := new(Info)
|
|
|
+ err := json.Unmarshal([]byte(params), &info)
|
|
|
+
|
|
|
+ if err != nil {
|
|
|
+ beego.BeeLogger.Error("XcxAuthorize err: %s, info:%s", err, info)
|
|
|
+ self.ReturnError(403, apps.ParamsError, "", nil)
|
|
|
+ }
|
|
|
+
|
|
|
+ sessionKey, _ := self.GetSession(apps.XcxSessionKey).(string)
|
|
|
+ // beego.BeeLogger.Warn("sessionKey:%s", sessionKey)
|
|
|
+ type EncryptedData struct {
|
|
|
+ UnionId string `json:"unionId"`
|
|
|
+ OpenId string `json:"openId"`
|
|
|
+ }
|
|
|
+
|
|
|
+ if sessionKey == "" {
|
|
|
+ self.ReturnError(403, apps.UserNeedLogin, "", nil)
|
|
|
+ }
|
|
|
+
|
|
|
+ pc := helpers.WxBizDataCrypt{AppID: beego.AppConfig.String("WxFohowXcxAppId"), SessionKey: sessionKey}
|
|
|
+ // beego.BeeLogger.Warn("EncryptedData:%s", info.EncryptedData)
|
|
|
+ // beego.BeeLogger.Warn("Iv:%s", info.Iv)
|
|
|
+ result, err := pc.Decrypt(info.EncryptedData, info.Iv, true) //第三个参数解释: 需要返回 JSON 数据类型时 使用 true, 需要返回 map 数据类型时 使用 false
|
|
|
+ if err != nil {
|
|
|
+ beego.BeeLogger.Error("xcx XcxAuthorize descrypt failed, err:%s", err)
|
|
|
+ self.ReturnError(403, apps.XcxAuthorizeError, "", nil)
|
|
|
+ }
|
|
|
+ encryptedData := &EncryptedData{}
|
|
|
+ json.Unmarshal([]byte(result.(string)), encryptedData)
|
|
|
+ if encryptedData.UnionId == "" || encryptedData.OpenId == "" {
|
|
|
+ self.ReturnError(403, apps.UserAuthorizeFailed, "", nil)
|
|
|
+ }
|
|
|
+ wxUser := user_model.GetWxUserByUnionid(encryptedData.UnionId, false)
|
|
|
+ if wxUser == nil {
|
|
|
+ self.ReturnError(403, apps.WxUserInfoError, "", nil)
|
|
|
+ }
|
|
|
+
|
|
|
+ if wxUser != nil {
|
|
|
+ wxUser.Openid = encryptedData.OpenId
|
|
|
+ }
|
|
|
+
|
|
|
+ //wxUser.UserId = user.Id
|
|
|
+ wxUser.Nickname = info.UserInfo.NickName
|
|
|
+ wxUser.Sex = info.UserInfo.Gender
|
|
|
+ wxUser.City = info.UserInfo.City
|
|
|
+ wxUser.Province = info.UserInfo.Province
|
|
|
+ wxUser.Country = info.UserInfo.Country
|
|
|
+ // beego.BeeLogger.Warn("XcxAuthorize wxUser before save() Nickname:%s, Sex:%s, City:%s, Province:%s, Country:%s ", wxUser.Nickname, wxUser.Sex, wxUser.City, wxUser.Province, wxUser.Country)
|
|
|
+ wxUser.Save()
|
|
|
+ beego.BeeLogger.Warn("XcxAuthorize wxUser after save() Nickname:%s, Sex:%s, City:%s, Province:%s, Country:%s ", wxUser.Nickname, wxUser.Sex, wxUser.City, wxUser.Province, wxUser.Country)
|
|
|
wxUser.UploadHead(info.UserInfo.AvatarUrl)
|
|
|
|
|
|
if wxUser != nil {
|