浏览代码

Merge branch 'yx_1.1'

zwxi 10 月之前
父节点
当前提交
d3419912ac
共有 7 个文件被更改,包括 71 次插入32 次删除
  1. 1 1
      controllers/base_auth.go
  2. 44 10
      controllers/wechat.go
  3. 5 2
      models/cygx_mfyx_gzh_user_record.go
  4. 7 9
      models/user_record.go
  5. 11 8
      services/user.go
  6. 1 1
      services/user_record.go
  7. 2 1
      services/wechat.go

+ 1 - 1
controllers/base_auth.go

@@ -67,7 +67,7 @@ func (this *BaseAuthController) Prepare() {
 			}
 			wxUser, err := services.GetWxUserItemByOpenId2(session.OpenId)
 			if err != nil && err.Error() != utils.ErrNoRow() {
-				this.JSON(models.BaseResponse{Ret: 408, Msg: "信息已变更,请重新登陆!", ErrMsg: "获取信息失败 " + strconv.Itoa(session.UserId)}, false, false)
+				this.JSON(models.BaseResponse{Ret: 408, Msg: "信息已变更,请重新登陆!", ErrMsg: "获取信息失败 " + strconv.Itoa(session.UserId)+"err: "+err.Error()}, false, false)
 				this.StopRun()
 				return
 			}

+ 44 - 10
controllers/wechat.go

@@ -36,6 +36,7 @@ func (this *WechatCommonController) WechatLoginByGzh() {
 		br.ErrMsg = "Code 为空"
 		return
 	}
+
 	var token string
 	item, err := services.WxGetUserOpenIdByCodeGzh(code)
 	if err != nil {
@@ -45,7 +46,7 @@ func (this *WechatCommonController) WechatLoginByGzh() {
 	}
 	if item.Errcode != 0 {
 		br.Msg = "获取用户信息失败"
-		br.ErrMsg = "获取access_token 失败 errcode:" + strconv.Itoa(item.Errcode) + " ;errmsg:" + item.Errmsg
+		br.ErrMsg = "获取access_token 失败 errcode:" + strconv.Itoa(item.Errcode) + " ;errmsg:" + item.Errmsg+"appid:" + utils.WxPublicAppId+"secret:"+utils.WxPublicAppSecret
 		return
 	}
 	openId := item.Openid
@@ -85,8 +86,8 @@ func (this *WechatCommonController) WechatLoginByGzh() {
 		br.ErrMsg = "获取unionid失败,unionid:" + wxUserInfo.Unionid
 		return
 	}
-	total, err := models.GetCygxUserRecordCount(openId)
-	if err != nil {
+	mfyxUserRecord, err := models.GetCygxUserRecordByOpenid(openId)
+	if err != nil && err.Error() != utils.ErrNoRow() {
 		br.Msg = "获取用户信息失败"
 		br.ErrMsg = "查询数量失败,Err:" + err.Error()
 		return
@@ -107,18 +108,47 @@ func (this *WechatCommonController) WechatLoginByGzh() {
 	items.Country = wxUserInfo.Country
 	items.Headimgurl = wxUserInfo.Headimgurl
 	items.CreateTime = time.Now()
+	items.Subscribe = 1
+	items.SubscribeTime = time.Now()
 	if user != nil {
 		items.CygxUserId = user.UserId
 		items.CygxBindAccount = user.Mobile
+		if mfyxUserRecord != nil && mfyxUserRecord.CygxUserId != user.UserId {
+			err = models.UpdateCygxUserRecordMobile(user.UserId, user.Mobile, unionId)
+			if err != nil {
+				br.Msg = "修复用户信息失败"
+				br.ErrMsg = "修复用户信息失败,Err:" + err.Error()
+				return
+			}
+		}
 	}
-	if total == 0 {
-		_, err = models.AddCygxUserRecord(items)
+	if mfyxUserRecord == nil {
+		_, err = models.AddMfyxGzhUserRecord(items)
 		if err != nil {
 			br.Msg = "获取用户信息失败"
 			br.ErrMsg = "添加openid失败,Err:" + err.Error()
 			return
 		}
 	}
+	userRecord := &models.UserRecord{
+		OpenId:         openId,  //用户open_id
+		UnionId:        unionId, //用户union_id
+		Subscribe:      0,
+		NickName:       wxUserInfo.Nickname,   //用户昵称,最大长度:32
+		RealName:       "",   //用户实际名称,最大长度:32
+		Sex:            wxUserInfo.Sex,        //普通用户性别,1为男性,2为女性
+		Province:       wxUserInfo.Province,   //普通用户个人资料填写的省份,最大长度:30
+		City:           wxUserInfo.City,       //普通用户个人资料填写的城市,最大长度:30
+		Country:        wxUserInfo.Country,    //国家,如中国为CN,最大长度:30
+		Headimgurl:     wxUserInfo.Headimgurl, //用户第三方(微信)头像,最大长度:512
+		CreateTime:     time.Now(), //创建时间,关系添加时间、用户授权时间
+		CreatePlatform: 12,   //注册平台,1:日度点评公众号,2:管理后台,3:pc端网站,4:查研观向小程序;默认:1
+		SessionKey:     wxUserInfo.SessionKey, //微信小程序会话密钥,最大长度:255
+	}
+	_, err = models.AddUserRecord(userRecord)
+	if err != nil {
+		return
+	}
 	timeUnix := time.Now().Unix()
 	timeUnixStr := strconv.FormatInt(timeUnix, 10)
 
@@ -172,6 +202,9 @@ func (this *WechatCommonController) WechatLoginByGzh() {
 		}
 		resp.Headimgurl = user.HeadimgurlRecord
 	}
+	if resp.Headimgurl == "" {
+		resp.Headimgurl = utils.DefaultHeadimgurl
+	}
 	resp.Token = token
 	br.Ret = 200
 	br.Success = true
@@ -351,11 +384,11 @@ func (this *WechatController) UserInfo() {
 		detail.HasPermission = hasPermission
 
 	} else {
-		ur, _ := models.GetUserRecordByOpenId(user.OpenId)
+		ur, _ := models.GetCygxUserRecordByOpenid(user.OpenId)
 		if ur != nil {
 			detail.NickName = ur.NickName
-			detail.Email = ur.BindAccount
-			detail.Mobile = ur.BindAccount
+			detail.Email = ur.CygxBindAccount
+			detail.Mobile = ur.CygxBindAccount
 			detail.NickName = ur.NickName
 			detail.Headimgurl = ur.Headimgurl
 		}
@@ -377,7 +410,7 @@ func (this *WechatController) UserInfo() {
 // @Success 200 {object} models.WechatSign
 // @router /notify [get,post]
 func (this *WechatCommonController) Notify() {
-	echostr := this.GetString("echostr")
+	//echostr := this.GetString("echostr")
 	method := this.Ctx.Input.Method()
 	if method == "POST" {
 		body := this.Ctx.Input.RequestBody
@@ -474,8 +507,9 @@ func (this *WechatCommonController) Notify() {
 		} else {
 			returnResult = xmlTpl
 		}
+		returnResult = "hongze"
 		this.Ctx.WriteString(returnResult)
 	} else {
-		this.Ctx.WriteString(echostr)
+		this.Ctx.WriteString("hongze")
 	}
 }

+ 5 - 2
models/cygx_mfyx_gzh_user_record.go

@@ -10,7 +10,10 @@ type CygxMfyxGzhUserRecord struct {
 	OpenId          string    `description:"用户openid,最大长度:32"`
 	UnionId         string    `description:"用户unionid,最大长度:64"`
 	NickName        string    `descritpion:"用户昵称,最大长度:32"`
+	RealName        string    `descritpion:"用户真实姓名"`
 	Sex             int       `descritpion:"普通用户性别,1为男性,2为女性"`
+	Subscribe       int       `description:"是否关注"`
+	SubscribeTime   time.Time `description:"关注时间"`
 	Province        string    `description:"普通用户个人资料填写的省份,最大长度:30"`
 	City            string    `description:"普通用户个人资料填写的城市,最大长度:30"`
 	Country         string    `description:"国家,如中国为CN,最大长度:30"`
@@ -21,7 +24,7 @@ type CygxMfyxGzhUserRecord struct {
 }
 
 // 添加
-func AddCygxUserRecord(item *CygxMfyxGzhUserRecord) (lastId int64, err error) {
+func AddMfyxGzhUserRecord(item *CygxMfyxGzhUserRecord) (lastId int64, err error) {
 	o := orm.NewOrm()
 	lastId, err = o.Insert(item)
 	return
@@ -78,4 +81,4 @@ func GetUserRecordByUserId(userId, platform int) (item *UserRecord, err error) {
 	sql := `SELECT * FROM user_record WHERE user_id=? AND create_platform = ?`
 	err = o.Raw(sql, userId, platform).QueryRow(&item)
 	return
-}
+}

+ 7 - 9
models/user_record.go

@@ -24,6 +24,13 @@ type UserRecord struct {
 	UserId         int       `description:"用户id"`
 }
 
+// 添加用户关系
+func AddUserRecord(record *UserRecord) (recordId int64, err error) {
+	o := orm.NewOrmUsingDB("weekly_report")
+	recordId, err = o.Insert(record)
+	return
+}
+
 // 根据openid获取用户关系
 // 12是买方研选   create_platform
 func GetUserRecordByUnionId(unionId string) (item *UserRecord, err error) {
@@ -62,15 +69,6 @@ func GetUserRecordList(condition string, pars []interface{}) (items []*UserRecor
 }
 
 
-
-// 根据openid获取用户关系
-func GetUserRecordByOpenId(openId string) (item *UserRecord, err error) {
-	o := orm.NewOrmUsingDB("weekly_report")
-	sql := `SELECT * FROM user_record WHERE open_id=? `
-	err = o.Raw(sql, openId).QueryRow(&item)
-	return
-}
-
 // 根据openid解除绑定用户关系
 func UnBindUserRecordByOpenid(openId string) (err error) {
 	o := orm.NewOrmUsingDB("weekly_report")

+ 11 - 8
services/user.go

@@ -11,14 +11,17 @@ var ERR_NO_USER_RECORD = errors.New("用户关系没有入库")
 var ERR_USER_NOT_BIND = errors.New("用户没有绑定")
 
 //通过用户 关系表记录  和  用户记录  格式化返回 用户数据
-func formatWxUserAndUserRecord(wxUser *models.WxUserItem, userRecord *models.UserRecord) {
+func formatWxUserAndUserRecord(wxUser *models.WxUserItem, userRecord *models.CygxMfyxGzhUserRecord) {
 	wxUser.OpenId = userRecord.OpenId
 	wxUser.UnionId = userRecord.UnionId
 	wxUser.NickName = userRecord.NickName
 	//wxUser.RealName = userRecord.RealName
 	//wxUser.BindAccount = userRecord.BindAccount
 	wxUser.Headimgurl = userRecord.Headimgurl
-	wxUser.SessionKey = userRecord.SessionKey
+	//wxUser.SessionKey = userRecord.SessionKey
+	if wxUser.Headimgurl == "" {
+		wxUser.Headimgurl = utils.HeadimgurlDefault
+	}
 }
 
 func GetWxUserItemByOpenId(unionId string) (item *models.WxUserItem, err error) {
@@ -49,7 +52,7 @@ func GetWxUserItemByOpenId(unionId string) (item *models.WxUserItem, err error)
 // 通过openid获取用户信息
 func GetWxUserItemByOpenId2(openid string) (item *models.WxUserItem, err error) {
 	//通过openid获取用户关联信息
-	userRecord, userRecordErr := models.GetUserRecordByOpenId(openid)
+	userRecord, userRecordErr := models.GetCygxUserRecordByOpenid(openid)
 	fmt.Println(userRecordErr)
 	//fmt.Println("userRecordErr", userRecordErr)
 	if userRecordErr != nil {
@@ -68,17 +71,17 @@ func GetWxUserItemByOpenId2(openid string) (item *models.WxUserItem, err error)
 	}
 
 	//该openid没有绑定用户
-	if userRecord.UserId <= 0 {
-		err = ERR_USER_NOT_BIND
+	if userRecord.CygxUserId <= 0 {
+		//err = ERR_USER_NOT_BIND
 		item = new(models.WxUserItem)
 		//格式化返回用户数据
 		formatWxUserAndUserRecord(item, userRecord)
 		return
 	}
-	fmt.Println("userRecord.UserId ", userRecord.UserId)
+	fmt.Println("userRecord.UserId ", userRecord.CygxUserId)
 
 	//获取用户信息
-	item, wxUserErr := models.GetWxUserItemByUserId(userRecord.UserId)
+	item, wxUserErr := models.GetWxUserItemByUserId(userRecord.CygxUserId)
 	//fmt.Println("wxUserErr", wxUserErr)
 	if wxUserErr != nil {
 		err = wxUserErr
@@ -91,7 +94,7 @@ func GetWxUserItemByOpenId2(openid string) (item *models.WxUserItem, err error)
 				return
 			}
 			//返回状态为 用户未绑定 逻辑代码
-			err = ERR_USER_NOT_BIND
+			//err = ERR_USER_NOT_BIND
 			item = new(models.WxUserItem)
 			//格式化返回用户数据
 			formatWxUserAndUserRecord(item, userRecord)

+ 1 - 1
services/user_record.go

@@ -27,7 +27,7 @@ func AddCygxUserRecord(wxUserInfo *WxUserInfo) {
 		items.CygxUserId = user.UserId
 		items.CygxBindAccount = user.Mobile
 	}
-	_, err = models.AddCygxUserRecord(items)
+	_, err = models.AddMfyxGzhUserRecord(items)
 	if err != nil {
 		go utils.SendAlarmMsg("发送邮件:用户关注买方研选时记录相关信息失败,Openid:"+wxUserInfo.Openid+err.Error(), 2)
 	}

+ 2 - 1
services/wechat.go

@@ -70,7 +70,8 @@ func WxGetUserOpenIdByCodeGzh(code string) (item *WxAccessToken, err error) {
 		err = errors.New("code is empty")
 		return nil, err
 	}
-	requestUrl := `https://api.weixin.qq.com/cgi-bin/token?appid=%s&secret=%s&code=%s&grant_type=authorization_code`
+	//requestUrl := `https://api.weixin.qq.com/cgi-bin/token?appid=%s&secret=%s&code=%s&grant_type=client_credential`
+	requestUrl := `https://api.weixin.qq.com/sns/oauth2/access_token?appid=%s&secret=%s&code=%s&grant_type=authorization_code`
 	requestUrl = fmt.Sprintf(requestUrl, utils.WxPublicAppId, utils.WxPublicAppSecret, code)
 	result, err := http.Get(requestUrl)
 	if err != nil {