wangfei 6 years ago
parent
commit
6d38124939
5 changed files with 40 additions and 24 deletions
  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 View File

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

+ 21
- 8
models/wechat.go View File

95
 }
95
 }
96
 
96
 
97
 // UpdateToken 更新微信token
97
 // UpdateToken 更新微信token
98
-func UpdateToken(token map[string]string) {
98
+func UpdateToken(token map[string]interface{}) {
99
 	var conf = model.SysWechatConf{
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 View File

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

+ 1
- 1
service/wechat/wechat.go View File

28
 }
28
 }
29
 
29
 
30
 // UpdateToken 更新微信token
30
 // UpdateToken 更新微信token
31
-func (s *WechatServ) UpdateToken(token map[string]string) {
31
+func (s *WechatServ) UpdateToken(token map[string]interface{}) {
32
 	models.UpdateToken(token)
32
 	models.UpdateToken(token)
33
 }
33
 }
34
 
34
 

+ 2
- 4
utils/wechat.go View File

19
 }
19
 }
20
 
20
 
21
 // WechatInit 微信初始化
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
 		cert,
24
 		cert,
27
 		Component.GetToken,
25
 		Component.GetToken,
28
 		Component.GetCertificate,
26
 		Component.GetCertificate,