package services import ( "encoding/json" "errors" "eta/eta_task/models" "eta/eta_task/services/alarm_msg" "eta/eta_task/utils" "fmt" "io/ioutil" "net/http" "strings" "time" ) func SendWxMsgWithFrequency(first, keyword1, keyword2, remark string, openIdList []*models.OpenIdList) (err error) { var msg string defer func() { if err != nil { go utils.SendEmail("发送模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers) utils.FileLog.Info("发送模版消息失败,Err:%s", err.Error()) } fmt.Println("line 21", err, msg) }() utils.FileLog.Info("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 templateId := utils.TemplateId //if true{ sendMap := make(map[string]interface{}) sendData := make(map[string]interface{}) sendMap["template_id"] = templateId //redirectUrl:="report.hzinsights.com/#/allindex/"+strconv.Itoa(v.ResearchReportId)+"/"+v.ReportType; //sendMap["url"]=redirectUrl 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["remark"] = map[string]interface{}{"value": remark, "color": "#173177"} sendMap["data"] = sendData WxSendTemplateMsg(sendUrl, sendMap, openIdList)*/ wxAppPath := "" openIdArr := make([]string, len(openIdList)) for i, v := range openIdList { openIdArr[i] = v.OpenId } sendInfo := new(SendWxTemplate) sendInfo.WxAppId = utils.AdminWxAppId sendInfo.First = first sendInfo.Keyword1 = keyword1 sendInfo.Keyword2 = keyword2 sendInfo.RedirectUrl = wxAppPath sendInfo.RedirectTarget = 0 sendInfo.TemplateId = utils.TemplateId sendInfo.Resource = wxAppPath sendInfo.OpenIdArr = openIdArr sendInfo.Remark = remark err = SendTemplateMsgV2(sendInfo) return } type SendWxTemplate struct { WxAppId string `description:"公众号appId"` First string `description:"模板消息first字段"` Keyword1 string `description:"模板消息keyword1字段"` Keyword2 string `description:"模板消息keyword2字段"` Keyword3 string `description:"模板消息keyword3字段"` Keyword4 string `description:"模板消息keyword4字段"` Productname string `description:"模板消息productname字段"` Date string `description:"模板消息date字段"` Remark string `description:"模板消息remark字段"` TemplateId string `description:"模板id"` RedirectUrl string `description:"跳转地址"` RedirectTarget int `description:"小程序跳转目标:1:弘则研报小程序,2:随手办公小程序"` Resource string `description:"资源唯一标识"` SendType int `description:"发送的消息类型:1:报告,2:指标更新提醒,3:审批通知,4:销售领取客户通知,5:活动取消通知,6活动更改时间通知,7:关注的作者发布报告通知,8:发送日报(周报、双周报、月报)模板消息,9:活动预约/报名时间通知"` OpenIdArr []string `description:"消息接收者openid"` } // 推送模板消息 func SendTemplateMsgV2(sendInfo *SendWxTemplate) (err error) { postData, err := json.Marshal(sendInfo) if err != nil { alarm_msg.SendAlarmMsg("SendTemplateMsg json.Marshal Err:"+err.Error(), 1) return err } body := ioutil.NopCloser(strings.NewReader(string(postData))) client := &http.Client{} req, err := http.NewRequest("POST", utils.SendWxTemplateMsgUrl, body) if err != nil { alarm_msg.SendAlarmMsg("SendTemplateMsg http.NewRequest Err:"+err.Error(), 1) return err } contentType := "application/json;charset=utf-8" req.Header.Set("Content-Type", contentType) req.Header.Set("Authorization", utils.SendTemplateMsgAuthorization) resp, err := client.Do(req) if err != nil { fmt.Println("http client.Do Err:" + err.Error()) return err } defer resp.Body.Close() b, err := ioutil.ReadAll(resp.Body) if err != nil { return err } result := new(models.BaseResponse) err = json.Unmarshal(b, &result) if err != nil { return err } if result.Ret != 200 { err = errors.New(string(b)) return err } return }