wangfei 6 年前
父节点
当前提交
6d38124939
共有 5 个文件被更改,包括 40 次插入24 次删除
  1. 11
    9
      controllers/component.go
  2. 21
    8
      models/wechat.go
  3. 5
    2
      models/wechat/wechat.go
  4. 1
    1
      service/wechat/wechat.go
  5. 2
    4
      utils/wechat.go

+ 11
- 9
controllers/component.go 查看文件

@@ -46,7 +46,7 @@ func (c *WechatController) ComponentPush() {
46 46
 	r := c.Ctx.Request
47 47
 	defer r.Body.Close()
48 48
 	con, _ := ioutil.ReadAll(r.Body)
49
-	beego.Error(string(con))
49
+	utils.LogError("推送消息:", string(con))
50 50
 	// 解析xml
51 51
 	xp := &core.XMLParse{}
52 52
 	resMsg, err := xp.Parse(string(con))
@@ -54,15 +54,12 @@ func (c *WechatController) ComponentPush() {
54 54
 		utils.LogError("xml解析失败:", err)
55 55
 		c.ResponseRaw([]byte("success"))
56 56
 	}
57
-	utils.LogError("解析xml成功:", resMsg)
58 57
 	encrypt := resMsg["Encrypt"]
59
-	beego.Error(encrypt)
60 58
 	conf, err := c.wechatServ.GetComponentInfo()
61 59
 	if err != nil || conf == nil || conf.Appid == "" {
62 60
 		utils.LogError("读取微信配置文件失败")
63 61
 		c.ResponseRaw([]byte("success"))
64 62
 	}
65
-	beego.Error(conf.Aeskey)
66 63
 	EncodingAESKey := conf.Aeskey
67 64
 
68 65
 	AESKey, err := base64.StdEncoding.DecodeString(EncodingAESKey + "=")
@@ -70,10 +67,9 @@ func (c *WechatController) ComponentPush() {
70 67
 		utils.LogError("DecodeString失败:", err)
71 68
 		c.ResponseRaw([]byte("success"))
72 69
 	}
73
-	beego.Error(AESKey)
74 70
 	EncryptVal, err := base64.StdEncoding.DecodeString(encrypt)
75 71
 	if err != nil {
76
-		utils.LogError("密文解析失败:", err)
72
+		utils.LogError("密文base64解析", err)
77 73
 		c.ResponseRaw([]byte("success"))
78 74
 	}
79 75
 	msgbyte, err := utils.AesDecrypt(EncryptVal, AESKey)
@@ -81,15 +77,14 @@ func (c *WechatController) ComponentPush() {
81 77
 		utils.LogError("解密失败:", err)
82 78
 		c.ResponseRaw([]byte("success"))
83 79
 	}
84
-	beego.Error("解密数据:", string(msgbyte))
85
-	beego.Error("解密成功")
80
+	utils.LogError("解密成功")
86 81
 	// 解析xml
87 82
 	msg, err := xp.Parse(string(msgbyte))
88 83
 	if err != nil {
89 84
 		utils.LogError("xml解析失败:", err)
90 85
 		c.ResponseRaw([]byte("success"))
91 86
 	}
92
-	beego.Error("解析xml成功:", msg)
87
+	utils.LogError("xml解析成功:", msg)
93 88
 	switch msg["InfoType"] {
94 89
 	case INFOTYPE_TICKET:
95 90
 		// 更新ticket
@@ -106,7 +101,13 @@ func (c *WechatController) ComponentPush() {
106 101
 			"appid":              msg["AuthorizerAppid"],
107 102
 			"authorization_code": msg["AuthorizationCode"],
108 103
 		}
104
+		beego.Error("授权成功参数:", cert)
109 105
 		wxclient := utils.WechatInit(cert, c.wechatServ.UpdateToken)
106
+		if wxclient == nil {
107
+			utils.LogError("获取wxclient失败")
108
+			c.ResponseRaw([]byte("success"))
109
+		}
110
+		beego.Error(wxclient)
110 111
 		utils.AppendWxClient(wxclient)
111 112
 		// 插入数据库
112 113
 		mjson, _ := json.Marshal(msg)
@@ -115,6 +116,7 @@ func (c *WechatController) ComponentPush() {
115 116
 			AuthorizationCode: msg["AuthorizationCode"],
116 117
 			AuthorizationInfo: string(mjson),
117 118
 		}
119
+
118 120
 		err := c.wechatServ.SaveWechatConf(conf)
119 121
 		if err != nil {
120 122
 			utils.LogError("保存微信授权信息失败:", err)

+ 21
- 8
models/wechat.go 查看文件

@@ -95,15 +95,28 @@ func InitWechat() {
95 95
 }
96 96
 
97 97
 // UpdateToken 更新微信token
98
-func UpdateToken(token map[string]string) {
98
+func UpdateToken(token map[string]interface{}) {
99 99
 	var conf = model.SysWechatConf{
100
-		Token:        token["token"],
101
-		RefreshToken: token["refreshToken"],
102
-		Appid:        token["appid"],
100
+		Token:        token["token"].(string),
101
+		RefreshToken: token["refreshToken"].(string),
102
+		Appid:        token["appid"].(string),
103 103
 	}
104
-	sql := `update sys_wechat_conf set token=?,refresh_token=? where appid=?`
105
-	_, err := DBEngine.Exec(sql, conf.Token, conf.RefreshToken, conf.Appid)
106
-	if err != nil {
107
-		utils.LogError("更新微信token失败:", err)
104
+	expire := token["expire_in"].(int64)
105
+	if expire > 0 {
106
+		beego.Error(time.Now())
107
+		expriesTime := time.Now().Local().Add(time.Duration(expire) * time.Second)
108
+		beego.Error(expriesTime)
109
+		conf.ExpiresDate = expriesTime
110
+		sql := `update sys_wechat_conf set token=?,refresh_token=?,expires_date=? where appid=?`
111
+		_, err := DBEngine.Exec(sql, conf.Token, conf.RefreshToken, expriesTime, conf.Appid)
112
+		if err != nil {
113
+			utils.LogError("更新微信token失败:", err)
114
+		}
115
+	} else {
116
+		sql := `update sys_wechat_conf set token=?,refresh_token=? where appid=?`
117
+		_, err := DBEngine.Exec(sql, conf.Token, conf.RefreshToken, conf.Appid)
118
+		if err != nil {
119
+			utils.LogError("更新微信token失败:", err)
120
+		}
108 121
 	}
109 122
 }

+ 5
- 2
models/wechat/wechat.go 查看文件

@@ -5,6 +5,8 @@ import (
5 5
 	"wechat-conf/models/model"
6 6
 	"wechat-conf/utils"
7 7
 
8
+	"github.com/astaxie/beego"
9
+
8 10
 	"github.com/go-xorm/xorm"
9 11
 )
10 12
 
@@ -30,7 +32,7 @@ func (m *WechatDAO) GetWechatConfByAppID(appid string) (*model.SysWechatConf, er
30 32
 }
31 33
 
32 34
 // AddWechatConf 保存微信配置信息
33
-func (m *WechatDAO) AddWechatConf(conf *model.SysWechatConf) error {
35
+func (m *WechatDAO) AddWechatConf(conf model.SysWechatConf) error {
34 36
 	conf.ConfId = utils.GetGUID()
35 37
 	conf.Status = models.STATUS_READY
36 38
 	_, err := m.db.Insert(conf)
@@ -67,7 +69,8 @@ func (m *WechatDAO) SaveWechatConf(conf model.SysWechatConf) error {
67 69
 		}
68 70
 	} else {
69 71
 		// 新增
70
-		err := m.AddWechatConf(&conf)
72
+		beego.Error("开始新增:", conf)
73
+		err := m.AddWechatConf(conf)
71 74
 		if err != nil {
72 75
 			utils.LogError("新增微信配置失败:", err)
73 76
 			return err

+ 1
- 1
service/wechat/wechat.go 查看文件

@@ -28,7 +28,7 @@ func (s *WechatServ) SaveWechatConf(conf model.SysWechatConf) error {
28 28
 }
29 29
 
30 30
 // UpdateToken 更新微信token
31
-func (s *WechatServ) UpdateToken(token map[string]string) {
31
+func (s *WechatServ) UpdateToken(token map[string]interface{}) {
32 32
 	models.UpdateToken(token)
33 33
 }
34 34
 

+ 2
- 4
utils/wechat.go 查看文件

@@ -19,10 +19,8 @@ func RefreshComponentTicket(ticket string) {
19 19
 }
20 20
 
21 21
 // WechatInit 微信初始化
22
-func WechatInit(cert map[string]string, reflashToken func(map[string]string)) *component.WxClient {
23
-	var wechatClient *component.WxClient
24
-
25
-	wechatClient = component.NewWxClient(
22
+func WechatInit(cert map[string]string, reflashToken func(map[string]interface{})) *component.WxClient {
23
+	wechatClient := component.NewWxClient(
26 24
 		cert,
27 25
 		Component.GetToken,
28 26
 		Component.GetCertificate,