rdluck 4 years ago
parent
commit
1168405c49
7 changed files with 349 additions and 198 deletions
  1. 22 0
      controllers/article.go
  2. 1 1
      controllers/resource.go
  3. 26 12
      controllers/user.go
  4. 6 3
      models/seller.go
  5. 85 0
      models/wechat.go
  6. 191 174
      services/wechat_send_msg.go
  7. 18 8
      utils/config.go

+ 22 - 0
controllers/article.go

@@ -3,6 +3,7 @@ package controllers
 import (
 	"encoding/json"
 	"hongze/hongze_cygx/models"
+	"hongze/hongze_cygx/services"
 	"hongze/hongze_cygx/utils"
 	"html"
 	"strconv"
@@ -304,6 +305,17 @@ func (this *ArticleController) InterviewApply() {
 		}
 		br.Msg = "申请成功"
 		resp.Status = 1
+		//发送模板消息
+		if user.CompanyId > 1 {
+			mobile := user.Mobile
+			if mobile == "" {
+				mobile = user.Email
+			}
+			sellerItem, _ := models.GetSellerByCompanyId(user.CompanyId)
+			if sellerItem != nil && sellerItem.AdminId > 0 && user.Mobile != "" && sellerItem.OpenId != "" {
+				go services.SendInterviewApplyTemplateMsg(user.RealName, sellerItem.CompanyName, mobile, article.Title, sellerItem.OpenId)
+			}
+		}
 	} else {
 		err = models.RemoveArticleInterviewApply(uid, req.ArticleId)
 		if err != nil {
@@ -313,6 +325,16 @@ func (this *ArticleController) InterviewApply() {
 		}
 		br.Msg = "已取消申请"
 		resp.Status = 2
+		if user.CompanyId > 1 {
+			mobile := user.Mobile
+			if mobile == "" {
+				mobile = user.Email
+			}
+			sellerItem, _ := models.GetSellerByCompanyId(user.CompanyId)
+			if sellerItem != nil && sellerItem.AdminId > 0 && user.Mobile != "" && sellerItem.OpenId != "" {
+				go services.SendInterviewApplyCancelTemplateMsg(user.RealName, sellerItem.CompanyName, mobile, article.Title, sellerItem.OpenId)
+			}
+		}
 	}
 	br.Ret = 200
 	br.Success = true

+ 1 - 1
controllers/resource.go

@@ -33,7 +33,7 @@ func (this *ResourceController) Upload() {
 	}
 	ext := path.Ext(h.Filename)
 	dateDir := time.Now().Format("20060102")
-	uploadDir := utils.STATIC_DIR + "hongze/" + dateDir
+	uploadDir := "./temp/" + dateDir
 	err = os.MkdirAll(uploadDir, 777)
 	if err != nil {
 		br.Msg = "存储目录创建失败"

+ 26 - 12
controllers/user.go

@@ -484,9 +484,9 @@ func (this *UserController) InterviewApplyList() {
 		list[i].Abstract = article.Abstract
 		list[i].CategoryName = article.CategoryName
 		list[i].SubCategoryName = article.SubCategoryName
-		list[i].ExpertBackground=article.ExpertBackground
-		list[i].ExpertNumber=article.ExpertNumber
-		list[i].InterviewTime=article.InterviewDate
+		list[i].ExpertBackground = article.ExpertBackground
+		list[i].ExpertNumber = article.ExpertNumber
+		list[i].InterviewTime = article.InterviewDate
 	}
 	page := paging.GetPaging(currentIndex, pageSize, total)
 	resp := new(models.ArticleInterviewApplyListResp)
@@ -671,16 +671,29 @@ func (this *UserController) ApplyTryOut() {
 				return
 			}
 		}
-	} else {
-		//获取销售信息
-		sellerItem, err := models.GetSellerByCompanyId(user.CompanyId)
-		if err != nil && err.Error() != utils.ErrNoRow() {
-			br.Msg = "申请失败"
-			br.ErrMsg = "获取销售信息失败,Err:" + err.Error()
-			return
+	}
+	//获取销售信息
+	sellerItem, err := models.GetSellerByCompanyId(user.CompanyId)
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		br.Msg = "申请失败"
+		br.ErrMsg = "获取销售信息失败,Err:" + err.Error()
+		return
+	}
+	if sellerItem != nil {
+		sellerMobile = sellerItem.Mobile
+		//推送模板消息
+		mobile := user.Mobile
+		if mobile == "" {
+			mobile = user.Email
 		}
-		if sellerItem != nil {
-			sellerMobile = sellerItem.Mobile
+		applyMethod := ""
+		if req.ApplyMethod == 1 {
+			applyMethod = "已有客户申请"
+		} else {
+			applyMethod = "潜在客户申请"
+		}
+		if sellerItem != nil && sellerItem.AdminId > 0 && mobile != "" && sellerItem.OpenId != "" {
+			go services.SendPermissionApplyTemplateMsg(user.RealName, sellerItem.CompanyName, mobile, sellerItem.OpenId, applyMethod)
 		}
 	}
 	err = models.AddApplyRecord(&req, user.Mobile, user.CompanyName, user.UserId, user.CompanyId)
@@ -689,6 +702,7 @@ func (this *UserController) ApplyTryOut() {
 		br.ErrMsg = "申请失败,Err:" + err.Error()
 		return
 	}
+
 	br.Msg = "申请成功!"
 	br.Ret = 200
 	br.Success = true

+ 6 - 3
models/seller.go

@@ -15,20 +15,23 @@ type AdminItem struct {
 	GroupId        int    `description:"分组id"`
 	GroupName      string `json:"-" description:"分组名称"`
 	Authority      int    `description:"管理权限,0:无,1:部门负责人,2:小组负责人"`
+	OpenId         string `description:"openId"`
+	CompanyName    string `description:"客户名称"`
 }
 
 func GetSellerByCompanyId(companyId int) (item *AdminItem, err error) {
 	o := orm.NewOrm()
-	sql := ` SELECT b.* FROM company_product AS a
+	sql := ` SELECT b.*,c.open_id FROM company_product AS a
 			INNER JOIN admin AS b ON a.seller_id=b.admin_id
+			LEFT JOIN wx_user AS c ON b.mobile=c.mobile
 			WHERE a.company_id=? AND a.product_id=2 `
 	err = o.Raw(sql, companyId).QueryRow(&item)
 	return
 }
 
-func GetSellerByName(userName string)(item *AdminItem,err error)  {
+func GetSellerByName(userName string) (item *AdminItem, err error) {
 	o := orm.NewOrm()
 	sql := ` SELECT * FROM admin WHERE admin_name=? `
 	err = o.Raw(sql, userName).QueryRow(&item)
 	return
-}
+}

+ 85 - 0
models/wechat.go

@@ -1,5 +1,90 @@
 package models
 
+import (
+	"encoding/json"
+	"fmt"
+	"hongze/hongze_cygx/utils"
+	"rdluck_tools/orm"
+	"time"
+	"rdluck_tools/http"
+)
+
 type WxLoginReq struct {
 	Code string `description:"微信code"`
 }
+
+type WxToken struct {
+	AccessToken string
+	ExpiresIn   int64
+	Id          int64
+}
+
+func GetWxAccessToken() (accessTokenStr string, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM wx_token LIMIT 1`
+	wxToken := new(WxToken)
+	err = o.Raw(sql).QueryRow(&wxToken)
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		utils.FileLog.Info("Get wxToken Err:", err.Error())
+		return
+	}
+	//Token不存在
+	if wxToken == nil {
+		fmt.Println("wxToken is empty")
+		accessToken, err := GetWxToken()
+		if err != nil {
+			return "", err
+		}
+		if accessToken.AccessToken != "" {
+			expiresIn := time.Now().Add(time.Duration(accessToken.ExpiresIn) * time.Second).Unix()
+			addSql := "insert into wx_token (access_token,expires_in) values (?,?)"
+			_, err = o.Raw(addSql, accessToken.AccessToken, expiresIn).Exec()
+			accessTokenStr = accessToken.AccessToken
+		}
+		return accessTokenStr, err
+	} else {
+		//判断token是否过期
+		if time.Now().Unix() > wxToken.ExpiresIn {
+			accessToken, err := GetWxToken()
+			if err != nil {
+				return "", err
+			}
+			if accessToken.AccessToken != "" {
+				expiresIn := time.Now().Add(time.Duration(accessToken.ExpiresIn) * time.Second).Unix()
+				updateSql := "update wx_token set access_token = ?,expires_in = ? "
+				_, err = o.Raw(updateSql, accessToken.AccessToken, expiresIn).Exec()
+				accessTokenStr = accessToken.AccessToken
+				fmt.Println("更新 TOKEN:", err)
+			}
+			return accessTokenStr, err
+		} else {
+			return wxToken.AccessToken, nil
+		}
+	}
+	return
+}
+
+func GetWxToken() (item *WxAccessToken, err error) {
+	getUrl := "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + utils.WxPublicAppId + "&secret=" + utils.WxPublicAppSecret
+	result, err := http.Get(getUrl)
+	if err != nil {
+		utils.FileLog.Info("GetWxToken Err:", err.Error())
+		return
+	}
+	err = json.Unmarshal(result, &item)
+	if err != nil {
+		fmt.Println("GetWxToken Unmarshal Err:%s", err.Error())
+		return
+	}
+	if item.Errmsg != "" {
+		utils.FileLog.Info("GetWxToken fail result:%s", string(result))
+	}
+	return
+}
+
+type WxAccessToken struct {
+	AccessToken string `json:"access_token"`
+	ExpiresIn   int    `json:"expires_in"`
+	Errcode     int
+	Errmsg      string
+}

+ 191 - 174
services/wechat_send_msg.go

@@ -1,178 +1,195 @@
 package services
 
 import (
-
+	"bytes"
+	"encoding/json"
+	"fmt"
+	"hongze/hongze_cygx/models"
+	"hongze/hongze_cygx/utils"
+	"io/ioutil"
+	"net/http"
+	"time"
 )
-//
-//func SendWxTemplateMsg(reportId int) (err error) {
-//	var msg string
-//	defer func() {
-//		if err != nil {
-//			go utils.SendEmail("发送模版消息失败"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
-//			utils.FileLog.Info("发送模版消息失败,Err:%s,%s", err.Error(), msg)
-//		}
-//		if msg != "" {
-//			utils.FileLog.Info("发送模版消息失败,msg:%s", msg)
-//		}
-//	}()
-//	utils.FileLog.Info("%s", "services SendMsg")
-//
-//	report, err := models.GetReportById(reportId)
-//	if err != nil {
-//		msg = "GetReportInfo Err:" + err.Error()
-//		return
-//	}
-//	if report == nil {
-//		utils.FileLog.Info("报告信息不存在")
-//		return
-//	}
-//	accessToken, err := models.GetWxAccessToken()
-//	if err != nil {
-//		msg = "GetWxAccessToken Err:" + err.Error()
-//		return
-//	}
-//	if accessToken == "" {
-//		msg = "accessToken is empty"
-//		return
-//	}
-//	openIdList, err := models.GetOpenIdList()
-//	if err != nil {
-//		msg = "get openIdList err:" + err.Error()
-//		return
-//	}
-//	fmt.Println("openIdListCount:", len(openIdList))
-//
-//	sendUrl := "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken
-//	fmt.Println("send start")
-//	utils.FileLog.Info("send start")
-//	//if report.MsgIsSend == 0 {
-//	sendMap := make(map[string]interface{})
-//	sendData := make(map[string]interface{})
-//
-//	redirectUrl := utils.TemplateRedirectUrl + strconv.Itoa(reportId)
-//	keyword1 := "弘则日度点评"
-//	first := "Hi,最新一期日度点评已上线,欢迎查看"
-//	keyword2 := report.Title
-//	//keyword3 := report.PublishTime.Format(utils.FormatDateTime)
-//	keyword3 := report.PublishTime
-//	keyword4 := report.Abstract
-//
-//	sendData["first"] = map[string]interface{}{"value": first, "color": "#173177"}
-//	sendData["keyword1"] = map[string]interface{}{"value": keyword1, "color": "#173177"}
-//	sendData["keyword2"] = map[string]interface{}{"value": keyword2, "color": "#173177"}
-//	sendData["keyword3"] = map[string]interface{}{"value": keyword3, "color": "#173177"}
-//	sendData["keyword4"] = map[string]interface{}{"value": keyword4, "color": "#173177"}
-//
-//	sendMap["template_id"] = utils.TemplateIdByProduct
-//	sendMap["url"] = redirectUrl
-//	sendMap["data"] = sendData
-//	sendTemplateMsg(sendUrl, sendMap, openIdList)
-//	//}
-//	fmt.Println("send end")
-//	utils.FileLog.Info("send end")
-//	return
-//}
-//
-//func sendTemplateMsg(sendUrl string, sendMap map[string]interface{}, items []*models.OpenIdList) (err error) {
-//	for _, v := range items {
-//		sendMap["touser"] = v.OpenId
-//		data, err := json.Marshal(sendMap)
-//		if err != nil {
-//			fmt.Println("SendTemplateMsgOne Marshal Err:", err.Error())
-//			utils.FileLog.Info("SendTemplateMsgOne Marshal Err:%s", err.Error())
-//			return err
-//		}
-//		err = toSendTemplateMsg(sendUrl, data)
-//		if err != nil {
-//			fmt.Println("send err:", err.Error())
-//			utils.FileLog.Info("ToSendTemplateMsg Err:%s", err.Error())
-//		}
-//	}
-//	return
-//}
-//
-//func toSendTemplateMsg(sendUrl string, data []byte) (err error) {
-//	utils.FileLog.Info("Send:%s", string(data))
-//	client := http.Client{}
-//	resp, err := client.Post(sendUrl, "application/json", bytes.NewBuffer(data))
-//	if err != nil {
-//		return
-//	}
-//	defer resp.Body.Close()
-//
-//	body, _ := ioutil.ReadAll(resp.Body)
-//	utils.FileLog.Info("SendResult:%s", string(body))
-//	var templateResponse SendTemplateResponse
-//	err = json.Unmarshal(body, &templateResponse)
-//	if err != nil {
-//		utils.FileLog.Info("SendResult Unmarshal Err:%s", err.Error())
-//		return err
-//	}
-//	return
-//}
-//
-//type SendTemplateResponse struct {
-//	Errcode int    `json:"errcode"`
-//	Errmsg  string `json:"errmsg"`
-//	MsgID   int    `json:"msgid"`
-//}
-//
-//func SendCompanyApplyWxTemplateMsg(mobile, applyType string) (err error) {
-//	var msg string
-//	defer func() {
-//		if err != nil {
-//			go utils.SendEmail("发送模版消息失败"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
-//			utils.FileLog.Info("发送模版消息失败,Err:%s,%s", err.Error(), msg)
-//		}
-//		if msg != "" {
-//			utils.FileLog.Info("发送模版消息失败,msg:%s", msg)
-//		}
-//	}()
-//	utils.FileLog.Info("%s", "services SendMsg")
-//
-//	accessToken, err := models.GetWxAccessToken()
-//	if err != nil {
-//		msg = "GetWxAccessToken Err:" + err.Error()
-//		return
-//	}
-//	if accessToken == "" {
-//		msg = "accessToken is empty"
-//		return
-//	}
-//	utils.FileLog.Info("mobile:%s", mobile)
-//	openIdList, err := models.GetOpenIdListByMobile(mobile)
-//	if err != nil {
-//		msg = "get openIdList err:" + err.Error()
-//		return
-//	}
-//	utils.FileLog.Info("openIdListCount:%s", len(openIdList))
-//	//fmt.Println("openIdListCount:", len(openIdList))
-//	if len(openIdList) > 0 && utils.TemplateIdByCompanyApply != "" {
-//		utils.FileLog.Info("start send")
-//		sendUrl := "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken
-//		fmt.Println("send start")
-//		utils.FileLog.Info("send start")
-//		sendMap := make(map[string]interface{})
-//		sendData := make(map[string]interface{})
-//
-//		redirectUrl := "" //utils.TemplateRedirectUrl + strconv.Itoa(reportId)
-//		keyword1 := applyType
-//		first := "Hi,有新的订单需要审批"
-//		keyword2 := time.Now().Format(utils.FormatDateTime)
-//		keyword3 := ""
-//		remark := ""
-//
-//		sendData["first"] = map[string]interface{}{"value": first, "color": "#173177"}
-//		sendData["keyword1"] = map[string]interface{}{"value": keyword1, "color": "#173177"}
-//		sendData["keyword2"] = map[string]interface{}{"value": keyword2, "color": "#173177"}
-//		sendData["keyword3"] = map[string]interface{}{"value": keyword3, "color": "#173177"}
-//		sendData["remark"] = map[string]interface{}{"value": remark, "color": "#173177"}
-//
-//		sendMap["template_id"] = utils.TemplateIdByCompanyApply
-//		sendMap["url"] = redirectUrl
-//		sendMap["data"] = sendData
-//		sendTemplateMsg(sendUrl, sendMap, openIdList)
-//	}
-//	utils.FileLog.Info("send end")
-//	return
-//}
+
+func SendInterviewApplyTemplateMsg(realName, companyName, mobile, articleTitle, openId string) (err error) {
+	var msg string
+	defer func() {
+		if err != nil {
+			go utils.SendEmail("发送模版消息失败"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
+			utils.FileLog.Info("发送模版消息失败,Err:%s,%s", err.Error(), msg)
+		}
+		if msg != "" {
+			utils.FileLog.Info("发送模版消息失败,msg:%s", msg)
+		}
+	}()
+	utils.FileLog.Info("%s", "services SendMsg")
+
+	accessToken, err := models.GetWxAccessToken()
+	if err != nil {
+		msg = "GetWxAccessToken Err:" + err.Error()
+		return
+	}
+	if accessToken == "" {
+		msg = "accessToken is empty"
+		return
+	}
+
+	sendUrl := "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken
+
+	sendMap := make(map[string]interface{})
+	sendData := make(map[string]interface{})
+
+	keyword1 := realName + "【" + companyName + "】"
+	first := "您有一条新的访谈申请,请及时处理。"
+	keyword2 := mobile
+	keyword3 := time.Now().Format(utils.FormatDateTime)
+	keyword4 := articleTitle
+	fontColor := "#D9001B"
+	sendData["first"] = map[string]interface{}{"value": first, "color": fontColor}
+	sendData["keyword1"] = map[string]interface{}{"value": keyword1, "color": fontColor}
+	sendData["keyword2"] = map[string]interface{}{"value": keyword2, "color": fontColor}
+	sendData["keyword3"] = map[string]interface{}{"value": keyword3, "color": fontColor}
+	sendData["keyword4"] = map[string]interface{}{"value": keyword4, "color": fontColor}
+
+	sendMap["template_id"] = utils.WxMsgTemplateIdApply
+	sendMap["data"] = sendData
+	sendTemplateMsg(sendUrl, openId, sendMap)
+	fmt.Println("send end")
+	utils.FileLog.Info("send end")
+	return
+}
+
+func SendInterviewApplyCancelTemplateMsg(realName, companyName, mobile, articleTitle, openId string) (err error) {
+	var msg string
+	defer func() {
+		if err != nil {
+			go utils.SendEmail("发送模版消息失败"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
+			utils.FileLog.Info("发送模版消息失败,Err:%s,%s", err.Error(), msg)
+		}
+		if msg != "" {
+			utils.FileLog.Info("发送模版消息失败,msg:%s", msg)
+		}
+	}()
+	utils.FileLog.Info("%s", "services SendMsg")
+
+	accessToken, err := models.GetWxAccessToken()
+	if err != nil {
+		msg = "GetWxAccessToken Err:" + err.Error()
+		return
+	}
+	if accessToken == "" {
+		msg = "accessToken is empty"
+		return
+	}
+
+	sendUrl := "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken
+
+	sendMap := make(map[string]interface{})
+	sendData := make(map[string]interface{})
+
+	first := realName + "-" + mobile + "【" + companyName + "】的访谈申请已取消,请留意。"
+	keyword1 := articleTitle
+	keyword2 := time.Now().Format(utils.FormatDateTime)
+	fontColor := "#D9001B"
+	sendData["first"] = map[string]interface{}{"value": first, "color": fontColor}
+	sendData["keyword1"] = map[string]interface{}{"value": keyword1, "color": fontColor}
+	sendData["keyword2"] = map[string]interface{}{"value": keyword2, "color": fontColor}
+
+	sendMap["template_id"] = utils.WxMsgTemplateIdApplyCancel
+	sendMap["data"] = sendData
+	sendTemplateMsg(sendUrl, openId, sendMap)
+	fmt.Println("send end")
+	utils.FileLog.Info("send end")
+	return
+}
+
+
+func SendPermissionApplyTemplateMsg(realName, companyName, mobile, openId,applyMethod string) (err error) {
+	var msg string
+	defer func() {
+		if err != nil {
+			go utils.SendEmail("发送模版消息失败"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
+			utils.FileLog.Info("发送模版消息失败,Err:%s,%s", err.Error(), msg)
+		}
+		if msg != "" {
+			utils.FileLog.Info("发送模版消息失败,msg:%s", msg)
+		}
+	}()
+	utils.FileLog.Info("%s", "services SendMsg")
+
+	accessToken, err := models.GetWxAccessToken()
+	if err != nil {
+		msg = "GetWxAccessToken Err:" + err.Error()
+		return
+	}
+	if accessToken == "" {
+		msg = "accessToken is empty"
+		return
+	}
+
+	sendUrl := "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken
+
+	sendMap := make(map[string]interface{})
+	sendData := make(map[string]interface{})
+
+	keyword1 := realName + "【" + companyName + "】"
+	first := "查研观向有一条新的权限申请,请及时处理。"
+	keyword2 := mobile
+	keyword3 := time.Now().Format(utils.FormatDateTime)
+	keyword4 := applyMethod
+	fontColor := "#D9001B"
+	sendData["first"] = map[string]interface{}{"value": first, "color": fontColor}
+	sendData["keyword1"] = map[string]interface{}{"value": keyword1, "color": fontColor}
+	sendData["keyword2"] = map[string]interface{}{"value": keyword2, "color": fontColor}
+	sendData["keyword3"] = map[string]interface{}{"value": keyword3, "color": fontColor}
+	sendData["keyword4"] = map[string]interface{}{"value": keyword4, "color": fontColor}
+
+	sendMap["template_id"] = utils.WxMsgTemplateIdApply
+	sendMap["data"] = sendData
+	sendTemplateMsg(sendUrl, openId, sendMap)
+	fmt.Println("send end")
+	utils.FileLog.Info("send end")
+	return
+}
+
+func sendTemplateMsg(sendUrl, openId string, sendMap map[string]interface{}) (err error) {
+	sendMap["touser"] = openId
+	data, err := json.Marshal(sendMap)
+	if err != nil {
+		fmt.Println("SendTemplateMsgOne Marshal Err:", err.Error())
+		utils.FileLog.Info("SendTemplateMsgOne Marshal Err:%s", err.Error())
+		return err
+	}
+	err = toSendTemplateMsg(sendUrl, data)
+	if err != nil {
+		fmt.Println("send err:", err.Error())
+		utils.FileLog.Info("ToSendTemplateMsg Err:%s", err.Error())
+	}
+	return
+}
+
+func toSendTemplateMsg(sendUrl string, data []byte) (err error) {
+	utils.FileLog.Info("Send:%s", string(data))
+	client := http.Client{}
+	resp, err := client.Post(sendUrl, "application/json", bytes.NewBuffer(data))
+	if err != nil {
+		return
+	}
+	defer resp.Body.Close()
+
+	body, _ := ioutil.ReadAll(resp.Body)
+	utils.FileLog.Info("SendResult:%s", string(body))
+	var templateResponse SendTemplateResponse
+	err = json.Unmarshal(body, &templateResponse)
+	if err != nil {
+		utils.FileLog.Info("SendResult Unmarshal Err:%s", err.Error())
+		return err
+	}
+	return
+}
+
+type SendTemplateResponse struct {
+	Errcode int    `json:"errcode"`
+	Errmsg  string `json:"errmsg"`
+	MsgID   int    `json:"msgid"`
+}

+ 18 - 8
utils/config.go

@@ -11,18 +11,22 @@ var (
 	MYSQL_URL_EDB  string
 )
 
-var (
-	STATIC_DIR string
-)
-
 //微信配置信息
 var (
 	WxId        string //微信原始ID
 	WxAppId     string
 	WxAppSecret string
 
-	WxMsgTemplateIdApply       string //申请待处理
-	WxMsgTemplateIdApplyCancel string //预约取消提醒
+	WxMsgTemplateIdApply           string //申请待处理
+	WxMsgTemplateIdApplyCancel     string //预约取消提醒
+	WxMsgTemplateIdPermissionApply string //预约取消提醒
+)
+
+//微信公众号配置信息
+var (
+	WxPublicId        string //微信原始ID
+	WxPublicAppId     string
+	WxPublicAppSecret string
 )
 
 func init() {
@@ -41,15 +45,21 @@ func init() {
 		WxAppSecret = "06894933fafb24dafead7eaae09c08e0"
 		WxId = "gh_a9d3744e1072"
 
-		STATIC_DIR = "/home/static/imgs/"
+		WxPublicAppId = "wx4a844c734d8c8e56"
+		WxPublicAppSecret = "26c586e7ccb3c575433f0f37797b3eeb"
+		WxPublicId = "gh_b67e0049fb8c"
 	} else {
 		WxAppId = "wxcc32b61f96720d2f"
 		WxAppSecret = "06894933fafb24dafead7eaae09c08e0"
 		WxId = "gh_a9d3744e1072"
-		STATIC_DIR = "/home/static/imgs/"
 
 		WxMsgTemplateIdApply = "qfNuops-sKrfIkbA7U97A7gSrX03mUpoEpJksRUdloo"
 		WxMsgTemplateIdApplyCancel = "UU_d7ks0XZBnWg2xFzxL9Heilm4kisX39K7dr4SDdO8"
+		WxMsgTemplateIdPermissionApply = "qfNuops-sKrfIkbA7U97A7gSrX03mUpoEpJksRUdloo"
+
+		WxPublicAppId = "wx9b5d7291e581233a"
+		WxPublicAppSecret = "f4d52e34021eee262dce9682b31f8861"
+		WxPublicId = "gh_5dc508325c6f"
 	}
 }