wx_template_msg.go 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695
  1. package services
  2. import (
  3. "bytes"
  4. "encoding/json"
  5. "fmt"
  6. "hongze/hongze_cygx/models"
  7. "hongze/hongze_cygx/utils"
  8. "io/ioutil"
  9. "net/http"
  10. "strconv"
  11. "time"
  12. )
  13. func SendWxMsgWithFrequency(first, activityName, reserveResults, activityTime, activityAddress, remark string, openIdList []*models.OpenIdList, activityId int) (err error) {
  14. var msg string
  15. defer func() {
  16. if err != nil {
  17. go utils.SendEmail("发送模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
  18. utils.FileLog.Info("发送模版消息失败,Err:%s", err.Error())
  19. }
  20. fmt.Println("line 21", err, msg)
  21. }()
  22. utils.FileLog.Info("%s", "services SendMsg")
  23. accessToken, err := models.GetWxAccessTokenByXzs()
  24. if err != nil {
  25. msg = "GetWxAccessToken Err:" + err.Error()
  26. return
  27. }
  28. if accessToken == "" {
  29. msg = "accessToken is empty"
  30. return
  31. }
  32. sendUrl := "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken
  33. templateId := utils.WxMsgTemplateIdActivityApplyXzs
  34. sendMap := make(map[string]interface{})
  35. sendData := make(map[string]interface{})
  36. sendMap["template_id"] = templateId
  37. sendMap["miniprogram"] = map[string]interface{}{"appid": utils.WxAppId, "pagepath": "activityPages/activityDetail/activityDetail?id=" + strconv.Itoa(activityId)}
  38. //sendMap["miniprogram"] = map[string]interface{}{"appid": "wx4a844c734d8c8e56", "path": "pages/index/index"}
  39. sendData["first"] = map[string]interface{}{"value": first, "color": "#173177"}
  40. sendData["activity_name"] = map[string]interface{}{"value": activityName, "color": "#173177"}
  41. sendData["reserve_results"] = map[string]interface{}{"value": reserveResults, "color": "#173177"}
  42. sendData["activity_time"] = map[string]interface{}{"value": activityTime, "color": "#173177"}
  43. sendData["activity_address"] = map[string]interface{}{"value": activityAddress, "color": "#173177"}
  44. sendData["remark"] = map[string]interface{}{"value": remark, "color": "#173177"}
  45. sendMap["data"] = sendData
  46. WxSendTemplateMsg(sendUrl, sendMap, openIdList, strconv.Itoa(activityId), utils.TEMPLATE_MSG_CYGX_ACTIVITY_ADD)
  47. return
  48. }
  49. //发送报告提问消息提醒
  50. func SendWxMsgWithAsk(name, askTime, askMsg, title string, openIdList []*models.OpenIdList, articleId int) (err error) {
  51. var msg string
  52. defer func() {
  53. if err != nil {
  54. go utils.SendEmail("发送模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
  55. go utils.SendAlarmMsg(fmt.Sprint("发送报告提问消息提醒模版消息失败,用户名", name, "文章ID:", articleId), 2)
  56. utils.FileLog.Info("发送模版消息失败,Err:%s", err.Error())
  57. }
  58. fmt.Println("line 21", err, msg)
  59. }()
  60. //utils.FileLog.Info("%s", "services SendMsg")
  61. ////accessToken, err := models.GetWxAccessToken()
  62. //accessToken, err := models.GetWxAccessTokenByXzs()
  63. //if err != nil {
  64. // msg = "GetWxAccessToken Err:" + err.Error()
  65. // return
  66. //}
  67. //if accessToken == "" {
  68. // msg = "accessToken is empty"
  69. // return
  70. //}
  71. var first string
  72. var keyword1 string
  73. var keyword2 string
  74. var keyword3 string
  75. var keyword4 string
  76. var remark string
  77. first = "研选报告有新的提问,请及时处理"
  78. keyword1 = name
  79. keyword3 = askTime
  80. keyword2 = ""
  81. keyword4 = askMsg
  82. remark = title
  83. //sendUrl := "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken
  84. ////templateId := utils.WxMsgTemplateIdAskMsg
  85. //templateId := utils.WxMsgTemplateIdAskMsgXzs
  86. //sendMap := make(map[string]interface{})
  87. //sendData := make(map[string]interface{})
  88. //sendMap["template_id"] = templateId
  89. //sendMap["miniprogram"] = map[string]interface{}{"appid": utils.WxAppId, "pagepath": "pageMy/reportDetail/reportDetail?id=" + strconv.Itoa(articleId)}
  90. ////sendMap["miniprogram"] = map[string]interface{}{"appid": utils.WxAppId, "path": "article/detail?ArticleId=1000001"}
  91. //sendData["first"] = map[string]interface{}{"value": first, "color": "#173177"}
  92. //sendData["keyword1"] = map[string]interface{}{"value": keyword1, "color": "#173177"}
  93. //sendData["keyword2"] = map[string]interface{}{"value": "", "color": "#173177"}
  94. //sendData["keyword3"] = map[string]interface{}{"value": keyword3, "color": "#173177"}
  95. //sendData["keyword4"] = map[string]interface{}{"value": keyword4, "color": "#173177"}
  96. //sendData["remark"] = map[string]interface{}{"value": remark, "color": "#173177"}
  97. //sendMap["data"] = sendData
  98. //WxSendTemplateMsg(sendUrl, sendMap, openIdList, strconv.Itoa(articleId), utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD)
  99. openIdArr := make([]string, 0)
  100. for _, v := range openIdList {
  101. openIdArr = append(openIdArr, v.OpenId)
  102. }
  103. redirectUrl := utils.WX_MSG_PATH_ARTICLE_DETAIL + strconv.Itoa(articleId)
  104. sendInfo := new(SendWxTemplate)
  105. sendInfo.First = first
  106. sendInfo.Keyword1 = keyword1
  107. sendInfo.Keyword2 = keyword2
  108. sendInfo.Keyword3 = keyword3
  109. sendInfo.Keyword4 = keyword4
  110. sendInfo.Remark = remark
  111. sendInfo.TemplateId = utils.WxMsgTemplateIdAskMsgXzs
  112. sendInfo.RedirectUrl = redirectUrl
  113. sendInfo.RedirectTarget = 3
  114. sendInfo.Resource = strconv.Itoa(articleId)
  115. sendInfo.SendType = utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD
  116. sendInfo.OpenIdArr = openIdArr
  117. err = PublicSendTemplateMsg(sendInfo)
  118. if err != nil {
  119. return
  120. }
  121. return
  122. }
  123. //到期提醒模板消息
  124. func SendWxMsgWithCompanyRemind(first, keyword1, keyword2, remark string, openIdList []*models.OpenIdList) (err error) {
  125. var msg string
  126. defer func() {
  127. if err != nil {
  128. fmt.Println(err)
  129. go utils.SendEmail("发送模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
  130. utils.FileLog.Info("发送模版消息失败,Err:%s", err.Error())
  131. }
  132. }()
  133. utils.FileLog.Info("%s", "services SendMsg")
  134. accessToken, err := models.GetWxAccessToken()
  135. if err != nil {
  136. msg = "GetWxAccessToken Err:" + err.Error()
  137. return
  138. }
  139. if accessToken == "" {
  140. msg = "accessToken is empty"
  141. return
  142. }
  143. sendUrl := "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken
  144. sendMap := make(map[string]interface{})
  145. sendData := make(map[string]interface{})
  146. sendMap["template_id"] = utils.WxMsgTemplateIdActivityChange
  147. sendData["first"] = map[string]interface{}{"value": first, "color": "#173177"}
  148. sendData["productname"] = map[string]interface{}{"value": keyword1, "color": "#173177"}
  149. sendData["date"] = map[string]interface{}{"value": keyword2, "color": "#173177"}
  150. sendData["remark"] = map[string]interface{}{"value": remark, "color": "#173177"}
  151. sendMap["data"] = sendData
  152. fmt.Println(accessToken)
  153. fmt.Println(sendUrl)
  154. //WxSendTemplateMsg(sendUrl, sendMap, openIdList)
  155. return
  156. }
  157. //发送报告提问消息提醒
  158. func SendWxMsgWithArticleClassToAdmin(keyWord1, keyWord2, keyWord3, keyWord4 string, openIdList []*models.OpenIdList, articleId int) (err error) {
  159. var msg string
  160. defer func() {
  161. if err != nil {
  162. go utils.SendEmail("发送模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
  163. go utils.SendAlarmMsg(fmt.Sprint("发送报告提问消息提醒模版消息失败,文章ID:", articleId), 2)
  164. utils.FileLog.Info("发送模版消息失败,Err:%s", err.Error())
  165. }
  166. }()
  167. accessToken, err := models.GetWxAccessTokenByXzs()
  168. if err != nil {
  169. msg = "GetWxAccessToken Err:" + err.Error()
  170. return
  171. }
  172. if accessToken == "" {
  173. msg = "accessToken is empty"
  174. return
  175. }
  176. var first string
  177. first = keyWord1
  178. keyword1 := keyWord2
  179. keyword2 := keyWord3
  180. keyword3 := keyWord4
  181. keyword4 := ""
  182. sendUrl := "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken
  183. templateId := utils.TemplateIdByProductXzs
  184. sendMap := make(map[string]interface{})
  185. sendData := make(map[string]interface{})
  186. sendMap["template_id"] = templateId
  187. sendMap["miniprogram"] = map[string]interface{}{"appid": utils.WxAppId, "pagepath": "pageMy/reportDetail/reportDetail?id=" + strconv.Itoa(articleId)}
  188. sendData["first"] = map[string]interface{}{"value": first, "color": "#173177"}
  189. sendData["keyword1"] = map[string]interface{}{"value": keyword1, "color": "#173177"}
  190. sendData["keyword2"] = map[string]interface{}{"value": keyword2, "color": "#173177"}
  191. sendData["keyword3"] = map[string]interface{}{"value": keyword3, "color": "#173177"}
  192. sendData["keyword4"] = map[string]interface{}{"value": keyword4, "color": "#173177"}
  193. sendMap["data"] = sendData
  194. WxSendTemplateMsg(sendUrl, sendMap, openIdList, strconv.Itoa(articleId), utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD)
  195. return
  196. }
  197. //发送用户阅读报告消息提醒
  198. func SendWxMsgWithArticleUserRemind(keyWord1, keyWord2 string, openIdList []*models.OpenIdList, articleId int) (err error) {
  199. var msg string
  200. defer func() {
  201. if err != nil {
  202. go utils.SendEmail("发送模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
  203. go utils.SendAlarmMsg(fmt.Sprint("发送报告提问消息提醒模版消息失败,文章ID:", articleId), 2)
  204. utils.FileLog.Info("发送模版消息失败,Err:%s", err.Error())
  205. }
  206. }()
  207. accessToken, err := models.GetWxAccessTokenByXzs()
  208. if err != nil {
  209. msg = "GetWxAccessToken Err:" + err.Error()
  210. return
  211. }
  212. if accessToken == "" {
  213. msg = "accessToken is empty"
  214. return
  215. }
  216. var first string
  217. first = keyWord1
  218. keyword1 := keyWord2
  219. sendUrl := "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken
  220. templateId := utils.WxMsgTemplateIdArticleUserRemind
  221. sendMap := make(map[string]interface{})
  222. sendData := make(map[string]interface{})
  223. sendMap["template_id"] = templateId
  224. sendMap["miniprogram"] = map[string]interface{}{"appid": utils.WxAppId, "pagepath": "pageMy/reportDetail/reportDetail?id=" + strconv.Itoa(articleId)}
  225. sendData["first"] = map[string]interface{}{"value": first, "color": "#173177"}
  226. sendData["keyword1"] = map[string]interface{}{"value": keyword1, "color": "#173177"}
  227. sendMap["data"] = sendData
  228. WxSendTemplateMsg(sendUrl, sendMap, openIdList, strconv.Itoa(articleId), utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD)
  229. return
  230. }
  231. //发送用户操作活动消息提醒
  232. func SendWxMsgWithActivityUserRemind(keyWord1, keyWord2 string, openIdList []*models.OpenIdList, activityId int) (err error) {
  233. var msg string
  234. defer func() {
  235. if err != nil {
  236. go utils.SendEmail("发送模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
  237. go utils.SendAlarmMsg(fmt.Sprint("发送用户操作活动消息提醒,文章ID:", activityId), 2)
  238. utils.FileLog.Info("发送模版消息失败,Err:%s", err.Error())
  239. }
  240. }()
  241. accessToken, err := models.GetWxAccessTokenByXzs()
  242. if err != nil {
  243. msg = "GetWxAccessToken Err:" + err.Error()
  244. return
  245. }
  246. if accessToken == "" {
  247. msg = "accessToken is empty"
  248. return
  249. }
  250. var first string
  251. first = keyWord1
  252. keyword1 := keyWord2
  253. sendUrl := "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken
  254. templateId := utils.WxMsgTemplateIdArticleUserRemind
  255. sendMap := make(map[string]interface{})
  256. sendData := make(map[string]interface{})
  257. sendMap["template_id"] = templateId
  258. sendMap["miniprogram"] = map[string]interface{}{"appid": utils.WxAppId, "pagepath": "activityPages/activityDetail/activityDetail?id=" + strconv.Itoa(activityId)}
  259. sendData["first"] = map[string]interface{}{"value": first, "color": "#173177"}
  260. sendData["keyword1"] = map[string]interface{}{"value": keyword1, "color": "#173177"}
  261. sendMap["data"] = sendData
  262. WxSendTemplateMsg(sendUrl, sendMap, openIdList, strconv.Itoa(activityId), utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD)
  263. return
  264. }
  265. //发送用户操作专项调研活动消息提醒
  266. func SendWxMsgWithSpecialActivityUserRemind(keyWord1, keyWord2 string, openIdList []*models.OpenIdList, activityId int) (err error) {
  267. var msg string
  268. defer func() {
  269. if err != nil {
  270. go utils.SendEmail("发送模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
  271. go utils.SendAlarmMsg(fmt.Sprint("发送用户操作活动消息提醒,文章ID:", activityId), 2)
  272. utils.FileLog.Info("发送模版消息失败,Err:%s", err.Error())
  273. }
  274. }()
  275. accessToken, err := models.GetWxAccessTokenByXzs()
  276. if err != nil {
  277. msg = "GetWxAccessToken Err:" + err.Error()
  278. return
  279. }
  280. if accessToken == "" {
  281. msg = "accessToken is empty"
  282. return
  283. }
  284. var first string
  285. first = keyWord1
  286. keyword1 := keyWord2
  287. sendUrl := "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken
  288. templateId := utils.WxMsgTemplateIdArticleUserRemind
  289. sendMap := make(map[string]interface{})
  290. sendData := make(map[string]interface{})
  291. sendMap["template_id"] = templateId
  292. sendMap["miniprogram"] = map[string]interface{}{"appid": utils.WxAppId, "pagepath": "activityPages/specialDetail/specialDetail?id=" + strconv.Itoa(activityId)}
  293. sendData["first"] = map[string]interface{}{"value": first, "color": "#173177"}
  294. sendData["keyword1"] = map[string]interface{}{"value": keyword1, "color": "#173177"}
  295. sendMap["data"] = sendData
  296. WxSendTemplateMsg(sendUrl, sendMap, openIdList, strconv.Itoa(activityId), utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD)
  297. return
  298. }
  299. //活动带问提醒
  300. func SendActivityAskApplyTemplateMsg(applyName, applyTime, askContent, activityName string, activityId int, itemOpenid *models.OpenIdList) (err error) {
  301. var msg string
  302. defer func() {
  303. if err != nil {
  304. go utils.SendEmail("发送模版消息失败"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
  305. go utils.SendAlarmMsg("活动带问提醒发送模版消息失败"+activityName, 2)
  306. }
  307. if msg != "" {
  308. utils.FileLog.Info("发送模版消息失败,msg:%s", msg)
  309. }
  310. }()
  311. var accessToken string
  312. if utils.RunMode == "release" {
  313. accessToken, err = models.GetWxAccessTokenByXzs()
  314. if err != nil {
  315. msg = "GetWxAccessToken Err:" + err.Error()
  316. return
  317. }
  318. if accessToken == "" {
  319. msg = "accessToken is empty"
  320. return
  321. }
  322. } else {
  323. accessToken, err = models.GetWxAccessToken()
  324. if err != nil {
  325. msg = "GetWxAccessToken Err:" + err.Error()
  326. return
  327. }
  328. if accessToken == "" {
  329. msg = "accessToken is empty"
  330. return
  331. }
  332. }
  333. sendUrl := "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken
  334. sendMap := make(map[string]interface{})
  335. sendData := make(map[string]interface{})
  336. first := "有新的客户提问"
  337. keyword1 := applyName
  338. keyword2 := "-"
  339. keyword3 := applyTime
  340. keyword4 := askContent
  341. remark := activityName
  342. fontColor := "#D9001B"
  343. sendData["first"] = map[string]interface{}{"value": first, "color": fontColor}
  344. sendData["keyword1"] = map[string]interface{}{"value": keyword1, "color": fontColor}
  345. sendData["keyword2"] = map[string]interface{}{"value": keyword2, "color": fontColor}
  346. sendData["keyword3"] = map[string]interface{}{"value": keyword3, "color": fontColor}
  347. sendData["keyword4"] = map[string]interface{}{"value": keyword4, "color": fontColor}
  348. sendData["remark"] = map[string]interface{}{"value": remark, "color": fontColor}
  349. if utils.RunMode == "release" {
  350. sendMap["template_id"] = utils.WxMsgTemplateIdApplyXzs
  351. } else {
  352. sendMap["template_id"] = utils.WxMsgTemplateIdApply
  353. }
  354. sendMap["miniprogram"] = map[string]interface{}{"appid": utils.WxAppId, "pagepath": "activityPages/activityDetail/activityDetail?id=" + strconv.Itoa(activityId)}
  355. sendMap["data"] = sendData
  356. sendTemplateMsg(sendUrl, sendMap, itemOpenid, strconv.Itoa(activityId), utils.TEMPLATE_MSG_CYGX_ACTIVITY_ADD)
  357. fmt.Println("send end")
  358. return
  359. }
  360. //活动带问提醒
  361. func SendActivityAskApplyTemplateMsgV2(keyword1, keyword2, keyword3, keyword4, remark string, itemOpenid *models.OpenIdList, itemAct *models.ActivityDetail) (err error) {
  362. var msg string
  363. defer func() {
  364. if err != nil {
  365. go utils.SendEmail("发送模版消息失败"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
  366. go utils.SendAlarmMsg("活动带问提醒发送模版消息失败"+remark, 2)
  367. }
  368. if msg != "" {
  369. utils.FileLog.Info("发送模版消息失败,msg:%s", msg)
  370. }
  371. }()
  372. var accessToken string
  373. if utils.RunMode == "release" {
  374. accessToken, err = models.GetWxAccessTokenByXzs()
  375. if err != nil {
  376. msg = "GetWxAccessToken Err:" + err.Error()
  377. return
  378. }
  379. if accessToken == "" {
  380. msg = "accessToken is empty"
  381. return
  382. }
  383. } else {
  384. accessToken, err = models.GetWxAccessToken()
  385. if err != nil {
  386. msg = "GetWxAccessToken Err:" + err.Error()
  387. return
  388. }
  389. if accessToken == "" {
  390. msg = "accessToken is empty"
  391. return
  392. }
  393. }
  394. activityId := itemAct.ArticleId
  395. //fmt.Println("itemAct.Host", itemAct.Host)
  396. if itemAct.ChartPermissionId != utils.CHART_PERMISSION_ID_YANXUAN && itemAct.Host != "" {
  397. keyword2 += ",会议主持人:" + itemAct.Host
  398. }
  399. sendUrl := "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken
  400. sendMap := make(map[string]interface{})
  401. sendData := make(map[string]interface{})
  402. first := "有新的客户提问"
  403. //keyword1 := applyName
  404. //keyword2 := "-"
  405. //keyword3 := applyTime
  406. //keyword4 := askContent
  407. //remark := activityName
  408. fontColor := "#D9001B"
  409. sendData["first"] = map[string]interface{}{"value": first, "color": fontColor}
  410. sendData["keyword1"] = map[string]interface{}{"value": keyword1, "color": fontColor}
  411. sendData["keyword2"] = map[string]interface{}{"value": keyword2, "color": fontColor}
  412. sendData["keyword3"] = map[string]interface{}{"value": keyword3, "color": fontColor}
  413. sendData["keyword4"] = map[string]interface{}{"value": keyword4, "color": fontColor}
  414. sendData["remark"] = map[string]interface{}{"value": remark, "color": fontColor}
  415. if utils.RunMode == "release" {
  416. sendMap["template_id"] = utils.WxMsgTemplateIdApplyXzs
  417. } else {
  418. sendMap["template_id"] = utils.WxMsgTemplateIdApply
  419. }
  420. sendMap["miniprogram"] = map[string]interface{}{"appid": utils.WxAppId, "pagepath": "activityPages/activityDetail/activityDetail?id=" + strconv.Itoa(activityId)}
  421. sendMap["data"] = sendData
  422. sendTemplateMsg(sendUrl, sendMap, itemOpenid, strconv.Itoa(activityId), utils.TEMPLATE_MSG_CYGX_ACTIVITY_ADD)
  423. fmt.Println("send end")
  424. return
  425. }
  426. //专项产业调研模板消息推送
  427. func SendSpecialTemplateMsg(applyName, applyTime, mobile, activityName, resource string, itemOpenid *models.OpenIdList) (err error) {
  428. var msg string
  429. defer func() {
  430. if err != nil {
  431. go utils.SendEmail("发送模版消息失败"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
  432. go utils.SendAlarmMsg("专项产业调研模板消息推送消息失败"+activityName, 2)
  433. }
  434. if msg != "" {
  435. utils.FileLog.Info("发送模版消息失败,msg:%s", msg)
  436. }
  437. }()
  438. var accessToken string
  439. if utils.RunMode == "release" {
  440. accessToken, err = models.GetWxAccessTokenByXzs()
  441. if err != nil {
  442. msg = "GetWxAccessToken Err:" + err.Error()
  443. return
  444. }
  445. if accessToken == "" {
  446. msg = "accessToken is empty"
  447. return
  448. }
  449. } else {
  450. accessToken, err = models.GetWxAccessToken()
  451. if err != nil {
  452. msg = "GetWxAccessToken Err:" + err.Error()
  453. return
  454. }
  455. if accessToken == "" {
  456. msg = "accessToken is empty"
  457. return
  458. }
  459. }
  460. sendUrl := "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken
  461. sendMap := make(map[string]interface{})
  462. sendData := make(map[string]interface{})
  463. var first string
  464. if resource == "sale" {
  465. first = "有客户对专项调研感兴趣"
  466. } else {
  467. first = "有5家公司预报名专项调研"
  468. }
  469. keyword1 := applyName
  470. keyword2 := mobile
  471. keyword3 := applyTime
  472. keyword4 := activityName
  473. fontColor := "#D9001B"
  474. sendData["first"] = map[string]interface{}{"value": first, "color": fontColor}
  475. sendData["keyword1"] = map[string]interface{}{"value": keyword1, "color": fontColor}
  476. sendData["keyword2"] = map[string]interface{}{"value": keyword2, "color": fontColor}
  477. sendData["keyword3"] = map[string]interface{}{"value": keyword3, "color": fontColor}
  478. sendData["keyword4"] = map[string]interface{}{"value": keyword4, "color": fontColor}
  479. if utils.RunMode == "release" {
  480. sendMap["template_id"] = utils.WxMsgTemplateIdApplyXzs
  481. } else {
  482. sendMap["template_id"] = utils.WxMsgTemplateIdApply
  483. }
  484. sendMap["data"] = sendData
  485. sendTemplateMsg(sendUrl, sendMap, itemOpenid, mobile, utils.TEMPLATE_MSG_CYGX_ACTIVITY_ADD)
  486. return
  487. }
  488. //弘则投资:
  489. //Y59n_AHg-RLCKaz293geW76KDHpGL1qOnE7eF_lxelY 活动预约通知
  490. //CB7bOl7f3viMG4s1uhRo7WM0Jbx3WvodKuIZ8A_z8fM 项目状态变更通知
  491. //
  492. //
  493. //弘则研究:
  494. //MwZ5wxfd0O1Yt0Pkf6OkfWP4USQzZbiEo5SkZ26735s 活动预约通知
  495. //dYg6iHooRq74PyCXmw_Ns7qdJZmbtLoKS2p2FKeaXl0 项目状态变更通知
  496. func WxSendTemplateMsg(sendUrl string, sendMap map[string]interface{}, items []*models.OpenIdList, resource string, sendType int) (err error) {
  497. for _, v := range items {
  498. sendMap["touser"] = v.OpenId
  499. data, err := json.Marshal(sendMap)
  500. if err != nil {
  501. fmt.Println("SendTemplateMsgOne Marshal Err:", err.Error())
  502. return err
  503. }
  504. utils.FileLog.Info("One SendData:%s", string(data))
  505. fmt.Println(string(data))
  506. err = SendTemplateMsg(sendUrl, data, resource, sendType, v)
  507. if err != nil {
  508. fmt.Println("send err:", err.Error())
  509. return err
  510. }
  511. }
  512. return
  513. }
  514. func SendTemplateMsg(sendUrl string, data []byte, resource string, sendType int, dataItem *models.OpenIdList) (err error) {
  515. client := http.Client{}
  516. resp, err := client.Post(sendUrl, "application/json", bytes.NewBuffer(data))
  517. if err != nil {
  518. return
  519. }
  520. defer resp.Body.Close()
  521. body, _ := ioutil.ReadAll(resp.Body)
  522. utils.FileLog.Info("SendResult:%s", string(body))
  523. var templateResponse models.SendTemplateResponse
  524. err = json.Unmarshal(body, &templateResponse)
  525. fmt.Println(templateResponse.Errcode)
  526. fmt.Println(templateResponse.Errmsg)
  527. if err != nil {
  528. return err
  529. }
  530. //新增模板消息推送记录
  531. {
  532. tr := new(models.UserTemplateRecord)
  533. tr.UserId = dataItem.UserId
  534. tr.OpenId = dataItem.OpenId
  535. tr.Resource = resource
  536. tr.SendData = string(data)
  537. tr.Result = string(body)
  538. tr.CreateDate = time.Now().Format(utils.FormatDate)
  539. tr.CreateTime = time.Now().Format(utils.FormatDateTime)
  540. if templateResponse.Errcode == 0 {
  541. tr.SendStatus = 1
  542. } else {
  543. tr.SendStatus = 0
  544. }
  545. tr.SendType = sendType
  546. go func() {
  547. err = models.AddUserTemplateRecord(tr)
  548. if err != nil {
  549. utils.FileLog.Info(fmt.Sprintf("AddUserTemplateRecord Err:%s", err.Error()))
  550. }
  551. }()
  552. }
  553. return
  554. }
  555. //发送报告更新的消息给预约的用户
  556. func SendWxMsgWithArticleUpdate(first, keyWord1, keyWord2, keyWord3, keyWord4 string, item *models.OpenIdList, articleId int) (err error) {
  557. var msg string
  558. defer func() {
  559. if err != nil {
  560. go utils.SendEmail("发送模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
  561. go utils.SendAlarmMsg(fmt.Sprint("发送报告提问消息提醒模版消息失败,文章ID:", articleId), 2)
  562. utils.FileLog.Info("发送模版消息失败,Err:%s", err.Error())
  563. }
  564. }()
  565. accessToken, err := models.GetWxAccessTokenByXzs()
  566. if err != nil {
  567. msg = "GetWxAccessToken Err:" + err.Error()
  568. return
  569. }
  570. if accessToken == "" {
  571. msg = "accessToken is empty"
  572. return
  573. }
  574. var openIdList []*models.OpenIdList
  575. openIdList = append(openIdList, item)
  576. sendUrl := "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken
  577. templateId := utils.TemplateIdByProductXzs
  578. sendMap := make(map[string]interface{})
  579. sendData := make(map[string]interface{})
  580. sendMap["template_id"] = templateId
  581. sendMap["miniprogram"] = map[string]interface{}{"appid": utils.WxAppId, "pagepath": "pageMy/reportDetail/reportDetail?id=" + strconv.Itoa(articleId)}
  582. sendData["first"] = map[string]interface{}{"value": first, "color": "#173177"}
  583. sendData["keyword1"] = map[string]interface{}{"value": keyWord1, "color": "#173177"}
  584. sendData["keyword2"] = map[string]interface{}{"value": keyWord2, "color": "#173177"}
  585. sendData["keyword3"] = map[string]interface{}{"value": keyWord3, "color": "#173177"}
  586. sendData["keyword4"] = map[string]interface{}{"value": keyWord4, "color": "#173177"}
  587. sendData["remark"] = map[string]interface{}{"value": "点击查看活动详情", "color": "#173177"}
  588. sendMap["data"] = sendData
  589. WxSendTemplateMsg(sendUrl, sendMap, openIdList, strconv.Itoa(articleId), utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD)
  590. return
  591. }
  592. //周日下午4点半,推送全部活动
  593. func SendActivityOnenIdWxTemplateMsg(first, keyWord1, keyWord2, keyWord3, keyWord4 string, openIdList []*models.OpenIdList) (err error) {
  594. var msg string
  595. defer func() {
  596. if err != nil {
  597. go utils.SendEmail("周日下午4点半,推送全部活"+"【"+utils.APPNAME+"】"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
  598. go utils.SendAlarmMsg(fmt.Sprint("发送周日下午4点半,推送全部活模版消息失败,"), 2)
  599. utils.FileLog.Info("发送模版消息失败,Err:%s", err.Error())
  600. }
  601. }()
  602. accessToken, err := models.GetWxAccessTokenByXzs()
  603. if err != nil {
  604. msg = "GetWxAccessToken Err:" + err.Error()
  605. return
  606. }
  607. if accessToken == "" {
  608. msg = "accessToken is empty"
  609. return
  610. }
  611. //var openIdList []*models.OpenIdList
  612. //openIdList = append(openIdList, item)
  613. sendUrl := "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken
  614. templateId := utils.WxMsgTemplateIdArticleUserRemind
  615. sendMap := make(map[string]interface{})
  616. sendData := make(map[string]interface{})
  617. sendMap["template_id"] = templateId
  618. sendMap["miniprogram"] = map[string]interface{}{"appid": utils.WxAppId, "pagepath": "pages/activity/activity"}
  619. //sendMap["miniprogram"] = map[string]interface{}{"appid": utils.WxAppId}
  620. sendData["first"] = map[string]interface{}{"value": first, "color": "#173177"}
  621. sendData["keyword1"] = map[string]interface{}{"value": keyWord1, "color": "#173177"}
  622. sendData["keyword2"] = map[string]interface{}{"value": keyWord2, "color": "#173177"}
  623. sendData["keyword3"] = map[string]interface{}{"value": keyWord3, "color": "#173177"}
  624. sendData["keyword4"] = map[string]interface{}{"value": keyWord4, "color": "#173177"}
  625. sendData["remark"] = map[string]interface{}{"value": "点击查看下周活动列表", "color": "#173177"}
  626. sendMap["data"] = sendData
  627. WxSendTemplateMsg(sendUrl, sendMap, openIdList, "", utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD)
  628. return
  629. }
  630. //发送用户留言提醒
  631. func SendCommentWxTemplateMsg(keyWord1, keyWord2 string, openIdList []*models.OpenIdList, articleId int) (err error) {
  632. var msg string
  633. defer func() {
  634. if err != nil {
  635. go utils.SendEmail("发送模版消息失败"+"【"+utils.APPNAME+"】"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
  636. go utils.SendAlarmMsg(fmt.Sprint("发送用户用户留言提醒,文章ID:", articleId), 2)
  637. utils.FileLog.Info("发送模版消息失败,Err:%s", err.Error())
  638. }
  639. }()
  640. accessToken, err := models.GetWxAccessTokenByXzs()
  641. if err != nil {
  642. msg = "GetWxAccessToken Err:" + err.Error()
  643. return
  644. }
  645. if accessToken == "" {
  646. msg = "accessToken is empty"
  647. return
  648. }
  649. var first string
  650. first = keyWord1
  651. keyword1 := keyWord2
  652. sendUrl := "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken
  653. templateId := utils.WxMsgTemplateIdArticleUserRemind
  654. sendMap := make(map[string]interface{})
  655. sendData := make(map[string]interface{})
  656. sendMap["template_id"] = templateId
  657. sendMap["miniprogram"] = map[string]interface{}{"appid": utils.WxAppId, "pagepath": "activityPages/specialDetail/specialDetail?id=" + strconv.Itoa(articleId)}
  658. sendData["first"] = map[string]interface{}{"value": first, "color": "#173177"}
  659. sendData["keyword1"] = map[string]interface{}{"value": keyword1, "color": "#173177"}
  660. sendMap["data"] = sendData
  661. WxSendTemplateMsg(sendUrl, sendMap, openIdList, strconv.Itoa(articleId), utils.TEMPLATE_MSG_CYGX_ARTICLE_ADD)
  662. return
  663. }