Bladeren bron

Merge branch 'master' of http://git.hiwavo.com/Fohow/fohow_api

abiao 4 jaren geleden
bovenliggende
commit
23820dc920

+ 52 - 17
go/gopath/src/fohow.com/apps/controllers/permit_controller/permit_controller.go

@@ -2,6 +2,7 @@ package permit_controller
 
 import (
 	"fmt"
+	"fohow.com/libs/lib_redis"
 	"strconv"
 
 	// "math/rand"
@@ -51,6 +52,7 @@ func (self *PermitController) Init(ctx *context.Context, controllerName, actionN
 //小程序授权
 func (self *PermitController) XcxAuthorize() {
 	params := self.GetString("userinfo")
+
 	channel, _ := self.GetInt64("channel", 0)
 	beego.BeeLogger.Warn("XcxAuthorize userinfo: %s", params)
 	inviteId, _ := self.GetInt64("invite_id", 0)
@@ -72,7 +74,9 @@ func (self *PermitController) XcxAuthorize() {
 		Iv            string    `json:"iv"`
 		EncryptedData string    `json:"encryptedData"`
 		UserInfo      *UserInfo `json:"userInfo"`
+		Wxlogincode   string    `json:"wxlogincode"`
 	}
+
 	info := new(Info)
 	err := json.Unmarshal([]byte(params), &info)
 
@@ -80,28 +84,37 @@ func (self *PermitController) XcxAuthorize() {
 		beego.BeeLogger.Error("XcxAuthorize err: %s, info:%s", err, info)
 		self.ReturnError(403, apps.ParamsError, "", nil)
 	}
+	beego.BeeLogger.Warn("XcxAuthorize code: %s", info.Wxlogincode)
 
 	sessionKey, _ := self.GetSession(apps.XcxSessionKey).(string)
-	// beego.BeeLogger.Warn("sessionKey:%s", sessionKey)
+	beego.BeeLogger.Warn("sessionKey:%s", sessionKey)
 	type EncryptedData struct {
-		UnionId string `json:"unionId"`
-		OpenId  string `json:"openId"`
+		UnionId  string `json:"unionId"`
+		OpenId   string `json:"openId"`
+		NickName string `json:"nickName"`
 	}
 
 	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)
+	encryptedData.OpenId, encryptedData.UnionId = GetXcxLoginInfo(info.Wxlogincode)
+	/*
+		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)
+		}
+		beego.BeeLogger.Warn("result:%v", result)
+		encryptedData := &EncryptedData{}
+
+		json.Unmarshal([]byte(result.(string)), encryptedData)*/
+
+	beego.BeeLogger.Warn("encryptedData:%v", encryptedData)
+
 	if encryptedData.UnionId == "" || encryptedData.OpenId == "" {
 		self.ReturnError(403, apps.UserAuthorizeFailed, "", nil)
 	}
@@ -255,6 +268,9 @@ func (self *PermitController) SaveWxuserInfo() {
 //小程序登录
 func (self *PermitController) XcxLogin() {
 	code := self.GetString("code")
+
+	beego.BeeLogger.Warn("XcxLogin code=%s", code)
+
 	if code == "" {
 		self.ReturnError(403, apps.ParamsRequired, "", nil)
 	}
@@ -264,10 +280,12 @@ func (self *PermitController) XcxLogin() {
 	if key == nil {
 		self.ReturnError(403, apps.XcxGetSessionKeyError, "", nil)
 	}
-	// beego.BeeLogger.Warn("XcxLogin key=%s", key)
-	// beego.BeeLogger.Warn("XcxLogin key=%s, key.Openid=%s", key, key.Openid)
+	//beego.BeeLogger.Warn("XcxLogin key=%s", key)
+	beego.BeeLogger.Warn("XcxLogin key=%s, key.Openid=%s", key, key.Openid)
+	beego.BeeLogger.Warn("XcxLogin key=%s, key.Unionid=%s", key, key.Unionid)
+
 	wxUser := user_model.GetByOpenid(key.Openid, false)
-	// beego.BeeLogger.Warn("XcxLogin key=[%s], key.Openid=[%s], wxUser= [%s]", key, key.Openid, wxUser)
+	//beego.BeeLogger.Warn("XcxLogin key=[%s], key.Openid=[%s], wxUser= [%s]", key, key.Openid, wxUser)
 
 	if wxUser != nil {
 		wxUser.FullHead = self.GetFullImgUrl(wxUser.Head)
@@ -280,10 +298,16 @@ func (self *PermitController) XcxLogin() {
 	}
 
 	self.SetSession(apps.XcxSessionKey, key.SessionKey)
-	// beego.BeeLogger.Warn("XcxLogin SessionKey=%s", key.SessionKey)
+	//beego.BeeLogger.Warn("XcxLogin SessionKey=%s", key.SessionKey)
 	if self.CruSession == nil {
 		self.ReturnError(200, apps.NoExist, "", nil)
 	}
+	//设置code对应的 redis openId unionId 值
+	openid_key := lib_redis.GetOpenIdRedisKey(code)
+	unionid_key := lib_redis.GetUnionIdRedisKey(code)
+	lib_redis.SetRedisValue(openid_key, key.Openid, time.Duration(60*60)*time.Second)
+	lib_redis.SetRedisValue(unionid_key, key.Unionid, time.Duration(60*60)*time.Second)
+
 	sId := self.CruSession.SessionID()
 	// beego.BeeLogger.Warn("XcxLogin sId=%s", sId)
 	type Ret struct {
@@ -295,6 +319,17 @@ func (self *PermitController) XcxLogin() {
 	self.ServeJSON()
 }
 
+//小程序登录
+func GetXcxLoginInfo(code string) (openId, unionId string) {
+	openid_key := lib_redis.GetOpenIdRedisKey(code)
+	unionid_key := lib_redis.GetUnionIdRedisKey(code)
+
+	_, openid := lib_redis.GetSimpleValue(openid_key)
+	_, unionid := lib_redis.GetSimpleValue(unionid_key)
+
+	return openid, unionid
+}
+
 //生成订单ID
 func createUnionId(prefix string) string {
 	n := time.Now().Format("20060102150405")

+ 27 - 0
go/gopath/src/fohow.com/libs/lib_redis/redis.go

@@ -62,6 +62,23 @@ func SetRedisValue(key, value string, expiration time.Duration) error {
 }
 
 //获取keyValue
+func GetSimpleValue(key string) (err error, value string) {
+	redisClient := redisInitClient()
+	defer redisClient.Close()
+	_, err = redisClient.Ping().Result()
+	if err != nil {
+		beego.BeeLogger.Error("%s", err)
+		return err, ""
+	}
+	val, err := redisClient.Get(key).Result()
+	if err != nil {
+		return err, ""
+	}
+
+	return nil, val
+}
+
+//获取keyValue
 func GetRedisValue(key string, resp interface{}) (bool, interface{}) {
 	redisClient := redisInitClient()
 	defer redisClient.Close()
@@ -166,3 +183,13 @@ func GetKeyByWxUserId(id int64) string {
 func GetKeyByUserId(id int64) string {
 	return fmt.Sprintf("user_model.GetKeyByUserId:%d", id)
 }
+
+//注册会员 openid rediskey
+func GetOpenIdRedisKey(code string) string {
+	return fmt.Sprintf("user:openid%s", code)
+}
+
+//注册会员 unionid rediskey
+func GetUnionIdRedisKey(code string) string {
+	return fmt.Sprintf("user:unionid%s", code)
+}