浏览代码

fix:关注后,需要判断是否已经入库了,没有的话,需要入库并绑定

Roc 2 年之前
父节点
当前提交
8357eba478
共有 3 个文件被更改,包括 111 次插入3 次删除
  1. 96 1
      controllers/wechat.go
  2. 0 1
      go.sum
  3. 15 1
      models/user_record.go

+ 96 - 1
controllers/wechat.go

@@ -400,7 +400,8 @@ func (this *WechatCommonController) Notify() {
 			switch item.Event {
 			case "subscribe":
 				fmt.Println("关注")
-				go models.UserSubscribe(1, openId)
+				go subscribe(openId)
+
 				break
 			case "unsubscribe":
 				fmt.Println("取消关注")
@@ -479,3 +480,97 @@ type Notify struct {
 	EventKey     string `xml:"EventKey"`
 	Content      string `xml:"Content"`
 }
+
+// subscribe 关注后的处理逻辑
+func subscribe(openId string) {
+	accessToken, err := services.WxGetAccessToken()
+	if err != nil {
+		fmt.Println("获取access_token失败,err:" + err.Error())
+		return
+	}
+	userRecord, err := models.GetUserRecordByOpenId(openId)
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		fmt.Println("通过openid获取user_record记录失败,err:" + err.Error())
+		return
+	}
+	err = nil
+
+	// openId已存在
+	if userRecord != nil {
+		if userRecord.UserId > 0 { //已经绑定了的话,那么就去修改用户状态
+			models.UserSubscribe(1, openId)
+		} else {
+			// 没有绑定的话,那么校验下unionid,然后再去修改
+			unionId := userRecord.UnionId
+			if unionId == `` {
+				wxUserItem, err := services.WxGetUserInfo(openId, accessToken)
+				if err != nil {
+					fmt.Println("获取用户信息失败,err:" + err.Error())
+					return
+				}
+				if wxUserItem.Unionid != `` {
+					unionId = wxUserItem.Unionid
+				}
+			}
+
+			updateCol := make([]string, 0)
+			userRecord.Subscribe = 1
+			userRecord.SubscribeTime = time.Now()
+			updateCol = append(updateCol, "Subscribe")
+			if unionId != `` {
+				userRecord.UnionId = unionId
+				// 通过unionid获取已绑定用户的user_record信息
+				bindUserRecord, _ := models.GetBindUserRecordByUnionId(unionId)
+				if bindUserRecord != nil {
+					userRecord.UserId = bindUserRecord.UserId
+					userRecord.RealName = bindUserRecord.RealName
+					userRecord.BindAccount = bindUserRecord.BindAccount
+					updateCol = append(updateCol, "UserId", "RealName", "BindAccount")
+				}
+			}
+			err = userRecord.Update(updateCol)
+			if err != nil {
+				fmt.Println("关注后,通过openid更新user_record异常,ERR:", err)
+			}
+		}
+
+		return
+	}
+
+	// 没有记录,那么需要获取下unionid
+	wxUserItem, err := services.WxGetUserInfo(openId, accessToken)
+	if err != nil {
+		fmt.Println("获取用户信息失败,err:" + err.Error())
+		return
+	}
+	newUserRecord := &models.UserRecord{
+		UserRecordId:   0,
+		OpenId:         openId,
+		UnionId:        wxUserItem.Unionid,
+		Subscribe:      1,
+		SubscribeTime:  time.Now(),
+		NickName:       wxUserItem.Nickname,
+		Sex:            wxUserItem.Sex,
+		Province:       wxUserItem.Province,
+		City:           wxUserItem.City,
+		Country:        wxUserItem.Country,
+		Headimgurl:     wxUserItem.Headimgurl,
+		CreateTime:     time.Now(),
+		CreatePlatform: 1,
+		SessionKey:     "",
+	}
+	if wxUserItem.Unionid != `` {
+		// 通过unionid获取已绑定用户的user_record信息
+		bindUserRecord, _ := models.GetBindUserRecordByUnionId(wxUserItem.Unionid)
+		if bindUserRecord != nil {
+			newUserRecord.UserId = bindUserRecord.UserId
+			newUserRecord.RealName = bindUserRecord.RealName
+			newUserRecord.BindAccount = bindUserRecord.BindAccount
+		}
+	}
+	_, err = models.AddUserRecord(newUserRecord)
+	if err != nil {
+		fmt.Println("关注后,添加user_record信息失败,err:" + err.Error())
+		return
+	}
+}

+ 0 - 1
go.sum

@@ -55,7 +55,6 @@ github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7
 github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
 github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4=
 github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
-github.com/garyburd/redigo v1.6.3 h1:HCeeRluvAgMusMomi1+6Y5dmFOdYV/JzoRrrbFlkGIc=
 github.com/garyburd/redigo v1.6.3/go.mod h1:rTb6epsqigu3kYKBnaF028A7Tf/Aw5s0cqA47doKKqw=
 github.com/glendc/gopher-json v0.0.0-20170414221815-dc4743023d0c/go.mod h1:Gja1A+xZ9BoviGJNA2E9vFkPjjsl+CoJxSXiQM1UXtw=
 github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=

+ 15 - 1
models/user_record.go

@@ -10,6 +10,7 @@ type UserRecord struct {
 	OpenId         string    `description:"用户openid,最大长度:32"`
 	UnionId        string    `description:"用户unionid,最大长度:64"`
 	Subscribe      int       `description:"是否关注"`
+	SubscribeTime     time.Time `description:""`
 	NickName       string    `descritpion:"用户昵称,最大长度:32"`
 	RealName       string    `descritpion:"用户实际名称,最大长度:32"`
 	BindAccount    string    `descritpion:"绑定时的账号,最大长度:128"`
@@ -38,10 +39,11 @@ func GetUserRecordByUserId(userId, platform int) (item *UserRecord, err error) {
 	return
 }
 
-//添加用户关系
+// AddUserRecord 添加用户关系
 func AddUserRecord(record *UserRecord) (recordId int64, err error) {
 	o := orm.NewOrm()
 	recordId, err = o.Insert(record)
+	record.UserRecordId = int(recordId)
 	return
 }
 
@@ -75,3 +77,15 @@ func GetUserThirdRecordByUserId(userId int) (item *UserRecord, err error) {
 	err = orm.NewOrm().Raw(sql, userId).QueryRow(&item)
 	return
 }
+
+// GetBindUserRecordByUnionId 通过unionid获取已绑定用户的user_record信息
+func GetBindUserRecordByUnionId(unionId string) (item *UserRecord, err error) {
+	sql := `SELECT * FROM user_record WHERE union_id=? AND user_id >0`
+	err = orm.NewOrm().Raw(sql, unionId).QueryRow(&item)
+	return
+}
+func (item *UserRecord) Update(cols []string) (err error) {
+	o := orm.NewOrm()
+	_, err = o.Update(item, cols...)
+	return
+}