package services import ( "bytes" "encoding/json" "fmt" "hongze/hongze_cygx/models" "hongze/hongze_cygx/utils" "io/ioutil" "net/http" "time" ) //访谈申请 func SendInterviewApplyTemplateMsg(realName, companyName, mobile, articleTitle string, itemOpenid *models.OpenIdList) (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) go utils.SendAlarmMsg(fmt.Sprint("访谈申请模板消息推送消息失败,手机号", mobile, "公司:", companyName, "手机号:", mobile), 2) } if msg != "" { utils.FileLog.Info("发送模版消息失败,msg:%s", msg) } }() accessToken, err := models.GetWxAccessTokenByXzs() 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.WxMsgTemplateIdApplyXzs sendMap["data"] = sendData sendTemplateMsg(sendUrl, sendMap, itemOpenid, mobile, utils.TEMPLATE_MSG_CYGX_APPLY) fmt.Println("send end") return } //访谈申请取消 func SendInterviewApplyCancelTemplateMsg(realName, companyName, mobile, articleTitle string, itemOpenid *models.OpenIdList) (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) go utils.SendAlarmMsg(fmt.Sprint("访谈申请取消模板消息推送消息失败,手机号", mobile, "公司:", companyName, "手机号:", mobile), 2) } if msg != "" { utils.FileLog.Info("发送模版消息失败,msg:%s", msg) } }() accessToken, err := models.GetWxAccessTokenByXzs() 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.WxMsgTemplateIdApplyCancelXzs sendMap["data"] = sendData sendTemplateMsg(sendUrl, sendMap, itemOpenid, mobile, utils.TEMPLATE_MSG_CYGX_APPLY) fmt.Println("send end") return } //权限申请 func SendPermissionApplyTemplateMsg(realName, companyName, mobile, applyMethod string, itemOpenid *models.OpenIdList) (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) go utils.SendAlarmMsg(fmt.Sprint("权限申请模板消息推送消息失败,手机号", mobile, "公司:", companyName, "手机号:", mobile), 2) } if msg != "" { utils.FileLog.Info("发送模版消息失败,msg:%s", msg) } }() var accessToken string if utils.RunMode == "release" { accessToken, err = models.GetWxAccessTokenByXzs() if err != nil { msg = "GetWxAccessToken Err:" + err.Error() return } if accessToken == "" { msg = "accessToken is empty" return } } else { 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} if utils.RunMode == "release" { sendMap["template_id"] = utils.WxMsgTemplateIdApplyXzs } else { sendMap["template_id"] = utils.WxMsgTemplateIdApply } sendMap["data"] = sendData sendTemplateMsg(sendUrl, sendMap, itemOpenid, mobile, utils.TEMPLATE_MSG_CYGX_APPLY) fmt.Println("send end") return } func sendTemplateMsg(sendUrl string, sendMap map[string]interface{}, itemOpenid *models.OpenIdList, resource string, sendType int) (err error) { sendMap["touser"] = itemOpenid.OpenId data, err := json.Marshal(sendMap) if err != nil { fmt.Println("SendTemplateMsgOne Marshal Err:", err.Error()) return err } err = toSendTemplateMsg(sendUrl, data, resource, sendType, itemOpenid) if err != nil { fmt.Println("send err:", err.Error()) } return } func toSendTemplateMsg(sendUrl string, data []byte, resource string, sendType int, dataItem *models.OpenIdList) (err error) { 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) var templateResponse SendTemplateResponse err = json.Unmarshal(body, &templateResponse) fmt.Println(templateResponse) utils.FileLog.Info("SendResult %s:", string(body)) if err != nil { utils.FileLog.Info("SendResult Unmarshal Err:%s", err.Error()) return err } //新增模板消息推送记录 { tr := new(models.UserTemplateRecord) tr.UserId = dataItem.UserId tr.OpenId = dataItem.OpenId tr.Resource = resource tr.SendData = string(data) tr.Result = string(body) tr.CreateDate = time.Now().Format(utils.FormatDate) tr.CreateTime = time.Now().Format(utils.FormatDateTime) if templateResponse.Errcode == 0 { tr.SendStatus = 1 } else { tr.SendStatus = 0 } tr.SendType = sendType go func() { err = models.AddUserTemplateRecord(tr) if err != nil { utils.FileLog.Info(fmt.Sprintf("AddUserTemplateRecord Err:%s", err.Error())) } }() } return } type SendTemplateResponse struct { Errcode int `json:"errcode"` Errmsg string `json:"errmsg"` MsgID int `json:"msgid"` }