|
|
@@ -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")
|