Browse Source

获取access_token

xyxie 1 year ago
parent
commit
8f8882c217
4 changed files with 116 additions and 69 deletions
  1. 42 0
      controllers/wechat.go
  2. 9 0
      models/wechat_send_msg.go
  3. 44 35
      routers/commentsRouter.go
  4. 21 34
      services/wechat_send_msg.go

+ 42 - 0
controllers/wechat.go

@@ -59,3 +59,45 @@ func (this *WechatController) SendTemplateMsg() {
 	br.Msg = "推送成功"
 	return
 }
+
+// GetAccessToken
+// @Title 获取微信token
+// @Description 获取微信token
+// @Success 200
+// @router /access_token [post]
+func (this *WechatController) GetAccessToken() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	body := this.Ctx.Input.RequestBody
+	req := new(models.WxTokenReq)
+	err := json.Unmarshal(body, &req)
+	if err != nil {
+		br.Msg = "参数解析失败"
+		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+		return
+	}
+
+	if req.WxAppId == "" {
+		br.Msg = "参数错误,微信AppId为空"
+		return
+	}
+
+	if req.WxAppSecret == "" {
+		br.Msg = "参数错误,微信AppSecret为空"
+		return
+	}
+	token, err, errMsg := services.GetWxAccessToken(req.WxAppId, req.WxAppSecret)
+	if err != nil {
+		br.Msg = errMsg
+		br.ErrMsg = err.Error()
+		return
+	}
+	data := models.WxTokenResp{AccessToken: token}
+	br.Ret = 200
+	br.Msg = "推送成功"
+	br.Data = data
+	return
+}

+ 9 - 0
models/wechat_send_msg.go

@@ -223,3 +223,12 @@ type SendWxTemplate struct {
 	SendType       int      `description:"发送的消息类型:1:报告,2:指标更新提醒,3:审批通知,4:销售领取客户通知,5:活动取消通知,6活动更改时间通知,7:关注的作者发布报告通知,8:发送日报(周报、双周报、月报)模板消息,9:活动预约/报名时间通知"`
 	OpenIdArr      []string `description:"消息接收者openid"`
 }
+
+type WxTokenReq struct {
+	WxAppId     string `description:"公众号appId"`
+	WxAppSecret string `description:"公众号appSecret"`
+}
+
+type WxTokenResp struct {
+	AccessToken string `description:"微信token"`
+}

+ 44 - 35
routers/commentsRouter.go

@@ -7,40 +7,49 @@ import (
 
 func init() {
 
-	beego.GlobalControllerRouter["eta/eta_pub/controllers:ImageController"] = append(beego.GlobalControllerRouter["eta/eta_pub/controllers:ImageController"],
-		beego.ControllerComments{
-			Method:           "Ppt2Image",
-			Router:           `/ppt2img`,
-			AllowHTTPMethods: []string{"post"},
-			MethodParams:     param.Make(),
-			Filters:          nil,
-			Params:           nil})
-
-	beego.GlobalControllerRouter["eta/eta_pub/controllers:ImageController"] = append(beego.GlobalControllerRouter["eta/eta_pub/controllers:ImageController"],
-		beego.ControllerComments{
-			Method:           "Base64Upload",
-			Router:           `/svg_to_png`,
-			AllowHTTPMethods: []string{"post"},
-			MethodParams:     param.Make(),
-			Filters:          nil,
-			Params:           nil})
-
-	beego.GlobalControllerRouter["eta/eta_pub/controllers:ReportController"] = append(beego.GlobalControllerRouter["eta/eta_pub/controllers:ReportController"],
-		beego.ControllerComments{
-			Method:           "HandleVideoDecibel",
-			Router:           `/handle_video_decibel`,
-			AllowHTTPMethods: []string{"post"},
-			MethodParams:     param.Make(),
-			Filters:          nil,
-			Params:           nil})
-
-	beego.GlobalControllerRouter["eta/eta_pub/controllers:WechatController"] = append(beego.GlobalControllerRouter["eta/eta_pub/controllers:WechatController"],
-		beego.ControllerComments{
-			Method:           "SendTemplateMsg",
-			Router:           `/send_template_msg`,
-			AllowHTTPMethods: []string{"post"},
-			MethodParams:     param.Make(),
-			Filters:          nil,
-			Params:           nil})
+    beego.GlobalControllerRouter["eta/eta_pub/controllers:ImageController"] = append(beego.GlobalControllerRouter["eta/eta_pub/controllers:ImageController"],
+        beego.ControllerComments{
+            Method: "Ppt2Image",
+            Router: `/ppt2img`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["eta/eta_pub/controllers:ImageController"] = append(beego.GlobalControllerRouter["eta/eta_pub/controllers:ImageController"],
+        beego.ControllerComments{
+            Method: "Base64Upload",
+            Router: `/svg_to_png`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["eta/eta_pub/controllers:ReportController"] = append(beego.GlobalControllerRouter["eta/eta_pub/controllers:ReportController"],
+        beego.ControllerComments{
+            Method: "HandleVideoDecibel",
+            Router: `/handle_video_decibel`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["eta/eta_pub/controllers:WechatController"] = append(beego.GlobalControllerRouter["eta/eta_pub/controllers:WechatController"],
+        beego.ControllerComments{
+            Method: "GetAccessToken",
+            Router: `/access_token`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["eta/eta_pub/controllers:WechatController"] = append(beego.GlobalControllerRouter["eta/eta_pub/controllers:WechatController"],
+        beego.ControllerComments{
+            Method: "SendTemplateMsg",
+            Router: `/send_template_msg`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
 
 }

+ 21 - 34
services/wechat_send_msg.go

@@ -181,7 +181,7 @@ func toSendTemplateMsg(wxAppId string, data []byte, resource string, sendType in
 	var accessToken string
 	var errMsg string
 
-	accessToken, err, errMsg = getWxAccessToken(wxAppId)
+	accessToken, err, errMsg = getWxAccessToken(wxAppId, "")
 	if err != nil {
 		utils.FileLog.Info(fmt.Sprintf("获取Token失败,err:%s,errMsg:%s", err.Error(), errMsg))
 		return
@@ -232,7 +232,7 @@ func toSendTemplateMsg(wxAppId string, data []byte, resource string, sendType in
 	//accessToken过期
 	if templateResponse.Errcode == 40001 {
 		//强刷token并重新推送
-		accessToken, err, errMsg = refreshWxAccessToken(wxAppId)
+		accessToken, err, errMsg = refreshWxAccessToken(wxAppId, "")
 		if err != nil {
 			utils.FileLog.Info(fmt.Sprintf("refreshWxAccessToken Err:%s", err.Error()))
 			return err
@@ -288,8 +288,18 @@ func toSendTemplateMsg(wxAppId string, data []byte, resource string, sendType in
 	return
 }
 
+// GetWxAccessToken 获取微信token
+func GetWxAccessToken(wxAppId, wxAppSecret string) (accessToken string, err error, errMsg string) {
+	accessToken, err, errMsg = getWxAccessToken(wxAppId, wxAppSecret)
+	if err != nil {
+		utils.FileLog.Info(fmt.Sprintf("获取Token失败,err:%s,errMsg:%s", err.Error(), errMsg))
+		return
+	}
+	return
+}
+
 // getWxAccessToken 获取微信token
-func getWxAccessToken(wxAppId string) (accessToken string, err error, errMsg string) {
+func getWxAccessToken(wxAppId, wxAppSecret string) (accessToken string, err error, errMsg string) {
 	redisKey := getRedisKeyByAppid(wxAppId)
 	if redisKey == `` {
 		errMsg = "未配置缓存key"
@@ -311,11 +321,11 @@ func getWxAccessToken(wxAppId string) (accessToken string, err error, errMsg str
 	}
 
 	//缓存中没有取到数据,那么需要去强制刷新新的accessToken
-	return refreshWxAccessToken(wxAppId)
+	return refreshWxAccessToken(wxAppId, wxAppSecret)
 }
 
 // refreshWxAccessToken 强制刷新微信token
-func refreshWxAccessToken(wxAppId string) (accessToken string, err error, errMsg string) {
+func refreshWxAccessToken(wxAppId, wxAppSecret string) (accessToken string, err error, errMsg string) {
 	fmt.Println("强制刷新" + wxAppId + "微信token")
 	defer func() {
 		if errMsg != `` {
@@ -329,8 +339,10 @@ func refreshWxAccessToken(wxAppId string) (accessToken string, err error, errMsg
 		return
 	}
 
-	wxAppSecret, ok := utils.WxAppList[wxAppId]
-	if !ok {
+	if wxAppSecret == "" {
+		wxAppSecret, _ = utils.WxAppList[wxAppId]
+	}
+	if wxAppSecret == "" {
 		err = errors.New("缺少密钥信息")
 		utils.FileLog.Info(fmt.Sprintf("获取Token失败, errMsg:%s", err.Error()))
 		return
@@ -373,33 +385,6 @@ func refreshWxAccessToken(wxAppId string) (accessToken string, err error, errMsg
 	return
 }
 
-// WxGetRedisAccessToken 从redis中获取token
-func WxGetRedisAccessToken(wxAppId, wxAppSecret string) (accessToken string, err error) {
-	//从redis中获取token校验验证码
-	accessToken, err = utils.Rc.RedisString(utils.HZ_ADMIN_WX_ACCESS_TOEKN + wxAppId)
-	if err != nil {
-		err = nil
-		token, tErr := models.GetWxToken(wxAppId, wxAppSecret)
-		if tErr != nil {
-			return "", tErr
-		}
-		if token.Errmsg != "" {
-			err = errors.New("获取access_token 失败 errcode:" + token.Errmsg + " ;errmsg:" + token.Errmsg)
-			return "", err
-		}
-		//更新redis的accessToken(过期时间提前十分钟)
-		redisTimeExpire := time.Duration(token.ExpiresIn-600) * time.Second
-		err = utils.Rc.Put(utils.HZ_ADMIN_WX_ACCESS_TOEKN+wxAppId, token.AccessToken, redisTimeExpire)
-		if err != nil {
-			err = errors.New("保存access_token失败 " + err.Error())
-			return accessToken, err
-		}
-		accessToken = token.AccessToken
-		return
-	}
-	return
-}
-
 // 根据微信appid获取对应的缓存key
 func getRedisKeyByAppid(wxAppId string) (redisKey string) {
 	switch wxAppId {
@@ -407,6 +392,8 @@ func getRedisKeyByAppid(wxAppId string) (redisKey string) {
 		redisKey = utils.CACHE_WX_ACCESS_TOKEN_HZ
 	case utils.AdminWxAppId:
 		redisKey = utils.HZ_ADMIN_WX_ACCESS_TOEKN + wxAppId
+	default:
+		redisKey = utils.HZ_ADMIN_WX_ACCESS_TOEKN + wxAppId
 	}
 	return redisKey
 }