wechat_send_msg.go 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567
  1. package services
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "hongze/hongze_mobile_admin/models"
  6. "hongze/hongze_mobile_admin/models/tables/admin"
  7. "hongze/hongze_mobile_admin/services/alarm_msg"
  8. "hongze/hongze_mobile_admin/utils"
  9. "io/ioutil"
  10. "net/http"
  11. "strings"
  12. "time"
  13. "errors"
  14. )
  15. type SendWxTemplate struct {
  16. WxAppId string `description:"公众号appId"`
  17. First string `description:"模板消息first字段"`
  18. Keyword1 string `description:"模板消息keyword1字段"`
  19. Keyword2 string `description:"模板消息keyword2字段"`
  20. Keyword3 string `description:"模板消息keyword3字段"`
  21. Keyword4 string `description:"模板消息keyword4字段"`
  22. Remark string `description:"模板消息remark字段"`
  23. TemplateId string `description:"模板id"`
  24. RedirectUrl string `description:"跳转地址"`
  25. RedirectTarget int `description:"小程序跳转目标:1:弘则研报小程序,2:随手办公小程序"`
  26. Resource string `description:"资源唯一标识"`
  27. SendType int `description:"发送的消息类型:1:报告,2:指标更新提醒,3:审批通知,4:销售领取客户通知,5:活动取消通知,6活动更改时间通知,7:关注的作者发布报告通知,8:发送日报(周报、双周报、月报)模板消息,9:活动预约/报名时间通知"`
  28. OpenIdArr []string `description:"消息接收者openid"`
  29. }
  30. type BaseResponse struct {
  31. Ret int
  32. Msg string
  33. ErrMsg string
  34. ErrCode string
  35. Data interface{}
  36. Success bool `description:"true 执行成功,false 执行失败"`
  37. IsSendEmail bool `json:"-" description:"true 发送邮件,false 不发送邮件"`
  38. IsAddLog bool `json:"-" description:"true 新增操作日志,false 不新增操作日志" `
  39. }
  40. type SendTemplateResponse struct {
  41. Errcode int `json:"errcode"`
  42. Errmsg string `json:"errmsg"`
  43. MsgID int `json:"msgid"`
  44. }
  45. // SendCompanyApplyWxTemplateMsg 发送待办消息
  46. func SendCompanyApplyWxTemplateMsg(mobile, redirectUrl, wxAppPath string, wxMsgMap map[int]string) (err error) {
  47. var msg string
  48. defer func() {
  49. if err != nil {
  50. go alarm_msg.SendAlarmMsg(fmt.Sprintf("发送模版消息失败,Err:%s,%s", err.Error(), msg), 3)
  51. //go utils.SendEmail("发送模版消息失败"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
  52. utils.FileLog.Info("发送模版消息失败,Err:%s,%s", err.Error(), msg)
  53. }
  54. if msg != "" {
  55. utils.FileLog.Info("发送模版消息失败,msg:%s", msg)
  56. }
  57. }()
  58. utils.FileLog.Info("%s", "services SendMsg")
  59. utils.FileLog.Info("mobile:%s", mobile)
  60. //获取openid列表
  61. openIdStr := WxAdminOpenIdGet()
  62. openIdList, err := admin.GetOpenIdListByMobile(mobile, openIdStr)
  63. if err != nil {
  64. msg = "get openIdList err:" + err.Error()
  65. return
  66. }
  67. utils.FileLog.Info("openIdListCount:%s", len(openIdList))
  68. //fmt.Println("openIdListCount:", len(openIdList))
  69. if len(openIdList) > 0 && utils.TemplateIdByCompanyApply != "" {
  70. utils.FileLog.Info("start send")
  71. //sendUrl := "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken
  72. fmt.Println("send start")
  73. utils.FileLog.Info("send start")
  74. //sendMap := make(map[string]interface{})
  75. //sendData := make(map[string]interface{})
  76. var first, keyword1, keyword2, keyword3, remark string
  77. if tmpStr, ok := wxMsgMap[0]; ok {
  78. first = tmpStr
  79. } else {
  80. first = "Hi,有新的订单需要审批"
  81. }
  82. if tmpStr, ok := wxMsgMap[1]; ok {
  83. keyword1 = tmpStr
  84. }
  85. if tmpStr, ok := wxMsgMap[2]; ok {
  86. keyword2 = tmpStr
  87. }
  88. if tmpStr, ok := wxMsgMap[3]; ok {
  89. keyword3 = tmpStr
  90. }
  91. if tmpStr, ok := wxMsgMap[4]; ok {
  92. remark = tmpStr
  93. }
  94. //sendData["first"] = map[string]interface{}{"value": first, "color": "#173177"}
  95. //sendData["keyword1"] = map[string]interface{}{"value": keyword1, "color": "#173177"}
  96. //sendData["keyword2"] = map[string]interface{}{"value": keyword2, "color": "#173177"}
  97. //sendData["keyword3"] = map[string]interface{}{"value": keyword3, "color": "#173177"}
  98. //sendData["remark"] = map[string]interface{}{"value": remark, "color": "#173177"}
  99. //
  100. //sendMap["template_id"] = utils.TemplateIdByCompanyApply
  101. //sendMap["url"] = redirectUrl
  102. //sendMap["data"] = sendData
  103. ////小程序信息
  104. //if wxAppPath != "" {
  105. // sendMap["miniprogram"] = map[string]interface{}{"appid": utils.WxAppId2, "pagepath": wxAppPath}
  106. //}
  107. //sendTemplateMsg(sendUrl, sendMap, openIdList, mobile, utils.TEMPLATE_MSG_APPLY)
  108. openIdArr := make([]string, len(openIdList))
  109. for i, v := range openIdList {
  110. openIdArr[i] = v.OpenId
  111. }
  112. sendInfo := new(SendWxTemplate)
  113. sendInfo.WxAppId = utils.AdminWxAppId
  114. sendInfo.First = first
  115. sendInfo.Keyword1 = keyword1
  116. sendInfo.Keyword2 = keyword2
  117. sendInfo.Keyword3 = keyword3
  118. sendInfo.Remark = remark
  119. sendInfo.TemplateId = utils.TemplateIdByCompanyApply
  120. sendInfo.RedirectUrl = redirectUrl
  121. sendInfo.RedirectTarget = 2
  122. sendInfo.Resource = mobile
  123. sendInfo.SendType = utils.TEMPLATE_MSG_APPLY
  124. sendInfo.OpenIdArr = openIdArr
  125. if wxAppPath != "" {
  126. sendInfo.RedirectUrl = wxAppPath
  127. }
  128. err = SendTemplateMsg(sendInfo)
  129. }
  130. utils.FileLog.Info("send end")
  131. return
  132. }
  133. // SendWxMsgWithRoadshowDetailResult 路演->销售收到处理结果
  134. func SendWxMsgWithRoadshowDetailResult(first, keyword1, keyword2, remark, mobile, redirectUrl, wxAppPath string) (err error) {
  135. var msg string
  136. defer func() {
  137. if err != nil {
  138. go alarm_msg.SendAlarmMsg(fmt.Sprintf("发送模版消息失败,Err:%s,%s", err.Error(), msg), 3)
  139. //go utils.SendEmail("发送模版消息失败"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
  140. utils.FileLog.Info("发送模版消息失败,Err:%s,%s", err.Error(), msg)
  141. }
  142. if msg != "" {
  143. utils.FileLog.Info("发送模版消息失败,msg:%s", msg)
  144. }
  145. }()
  146. utils.FileLog.Info("%s", "services SendMsg")
  147. utils.FileLog.Info("mobile:%s", mobile)
  148. //获取openid列表
  149. openIdStr := WxAdminOpenIdGet()
  150. openIdList, err := admin.GetOpenIdListByMobile(mobile, openIdStr)
  151. if err != nil {
  152. msg = "get openIdList err:" + err.Error()
  153. return
  154. }
  155. utils.FileLog.Info("openIdListCount:%s", len(openIdList))
  156. //fmt.Println("openIdListCount:", len(openIdList))
  157. if len(openIdList) > 0 && utils.TemplateIdByCompanyApply != "" {
  158. utils.FileLog.Info("start send")
  159. //sendUrl := "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken
  160. //fmt.Println("send start")
  161. //utils.FileLog.Info("send start")
  162. //sendMap := make(map[string]interface{})
  163. //sendData := make(map[string]interface{})
  164. //
  165. //sendData["first"] = map[string]interface{}{"value": first, "color": "#173177"}
  166. //sendData["keyword1"] = map[string]interface{}{"value": keyword1, "color": "#173177"}
  167. //sendData["keyword2"] = map[string]interface{}{"value": keyword2, "color": "#173177"}
  168. //sendData["remark"] = map[string]interface{}{"value": remark, "color": "#173177"}
  169. //
  170. //sendMap["template_id"] = utils.WxMsgTemplateIdWithRoadshowDetailResult
  171. //sendMap["url"] = redirectUrl
  172. //sendMap["data"] = sendData
  173. ////小程序信息
  174. //if wxAppPath != "" {
  175. // sendMap["miniprogram"] = map[string]interface{}{"appid": utils.WxAppId2, "pagepath": wxAppPath}
  176. //}
  177. //sendTemplateMsg(sendUrl, sendMap, openIdList, wxAppPath, utils.TEMPLATE_MSG_ACTIVITY_APPOINTMENT)
  178. openIdArr := make([]string, len(openIdList))
  179. for i, v := range openIdList {
  180. openIdArr[i] = v.OpenId
  181. }
  182. sendInfo := new(SendWxTemplate)
  183. sendInfo.WxAppId = utils.AdminWxAppId
  184. sendInfo.First = first
  185. sendInfo.Keyword1 = keyword1
  186. sendInfo.Keyword2 = keyword2
  187. sendInfo.Remark = remark
  188. sendInfo.TemplateId = utils.WxMsgTemplateIdWithRoadshowDetailResult
  189. if wxAppPath != "" && utils.RunMode == "release" {
  190. sendInfo.RedirectUrl = wxAppPath
  191. }
  192. sendInfo.RedirectTarget = 2
  193. sendInfo.Resource = wxAppPath
  194. sendInfo.SendType = utils.TEMPLATE_MSG_ACTIVITY_APPOINTMENT
  195. sendInfo.OpenIdArr = openIdArr
  196. err = SendTemplateMsg(sendInfo)
  197. }
  198. utils.FileLog.Info("send end")
  199. return
  200. }
  201. // SendWxMsgWithRoadshowPending 路演->研究员收到待处理的申请
  202. func SendWxMsgWithRoadshowPending(first, keyword1, keyword2, keyword3, keyword4, remark, wxAppPath, mobile string) (err error) {
  203. //utils.WxMsgTemplateIdWithRoadshowPending
  204. var msg string
  205. defer func() {
  206. if err != nil {
  207. //go utils.SendEmail("发送模版消息失败"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
  208. go alarm_msg.SendAlarmMsg("发送模版消息失败,Err:"+err.Error()+msg, 3)
  209. utils.FileLog.Info("发送模版消息失败,Err:" + err.Error() + msg)
  210. }
  211. if msg != "" {
  212. utils.FileLog.Info("发送模版消息失败,msg:%s", msg)
  213. }
  214. }()
  215. utils.FileLog.Info("%s", "services SendMsg")
  216. //获取openid列表
  217. openIdStr := WxAdminOpenIdGet()
  218. openIdList, err := admin.GetOpenIdListByMobile(mobile, openIdStr)
  219. if err != nil {
  220. msg = "get openIdList err:" + err.Error()
  221. return
  222. }
  223. utils.FileLog.Info("openIdListCount:%s", len(openIdList))
  224. //fmt.Println("openIdListCount:", len(openIdList))
  225. if len(openIdList) > 0 && utils.TemplateIdByCompanyApply != "" {
  226. utils.FileLog.Info("start send")
  227. //sendUrl := "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken
  228. //fmt.Println("send start")
  229. //utils.FileLog.Info("send start")
  230. //sendMap := make(map[string]interface{})
  231. //sendData := make(map[string]interface{})
  232. //
  233. //sendData["first"] = map[string]interface{}{"value": first, "color": "#173177"}
  234. //sendData["keyword1"] = map[string]interface{}{"value": keyword1, "color": "#173177"}
  235. //sendData["keyword2"] = map[string]interface{}{"value": keyword2, "color": "#173177"}
  236. //sendData["keyword3"] = map[string]interface{}{"value": keyword3, "color": "#173177"}
  237. //sendData["keyword4"] = map[string]interface{}{"value": keyword4, "color": "#173177"}
  238. //sendData["remark"] = map[string]interface{}{"value": remark, "color": "#173177"}
  239. //
  240. //sendMap["template_id"] = utils.WxMsgTemplateIdWithRoadshowPending
  241. //sendMap["data"] = sendData
  242. ////小程序信息
  243. //if wxAppPath != "" {
  244. // sendMap["miniprogram"] = map[string]interface{}{"appid": utils.WxAppId2, "pagepath": wxAppPath}
  245. //}
  246. //sendTemplateMsg(sendUrl, sendMap, openIdList, wxAppPath, utils.TEMPLATE_MSG_ACTIVITY_APPOINTMENT)
  247. openIdArr := make([]string, len(openIdList))
  248. for i, v := range openIdList {
  249. openIdArr[i] = v.OpenId
  250. }
  251. sendInfo := new(SendWxTemplate)
  252. sendInfo.WxAppId = utils.AdminWxAppId
  253. sendInfo.First = first
  254. sendInfo.Keyword1 = keyword1
  255. sendInfo.Keyword2 = keyword2
  256. sendInfo.Keyword3 = keyword3
  257. sendInfo.Keyword4 = keyword4
  258. sendInfo.Remark = remark
  259. sendInfo.TemplateId = utils.WxMsgTemplateIdWithRoadshowPending
  260. if wxAppPath != "" && utils.RunMode == "release" {
  261. sendInfo.RedirectUrl = wxAppPath
  262. }
  263. sendInfo.RedirectTarget = 2
  264. sendInfo.Resource = wxAppPath
  265. sendInfo.SendType = utils.TEMPLATE_MSG_ACTIVITY_APPOINTMENT
  266. sendInfo.OpenIdArr = openIdArr
  267. err = SendTemplateMsg(sendInfo)
  268. }
  269. utils.FileLog.Info("send end")
  270. return
  271. }
  272. // SendWxMsgWithRoadshowDeleteNotice 路演->研究员收到活动删除通知
  273. func SendWxMsgWithRoadshowDeleteNotice(first, keyword1, keyword2, remark, wxAppPath, mobile string) (err error) {
  274. var msg string
  275. defer func() {
  276. if err != nil {
  277. //go utils.SendEmail("发送模版消息失败"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
  278. go alarm_msg.SendAlarmMsg("发送模版消息失败"+time.Now().Format("2006-01-02 15:04:05")+";Msg:"+msg+";Err:"+err.Error(), 3)
  279. utils.FileLog.Info("发送模版消息失败,Err:%s,%s", err.Error(), msg)
  280. }
  281. if msg != "" {
  282. utils.FileLog.Info("发送模版消息失败,msg:%s", msg)
  283. }
  284. }()
  285. utils.FileLog.Info("%s", "services SendMsg")
  286. //获取openid列表
  287. openIdStr := WxAdminOpenIdGet()
  288. openIdList, err := admin.GetOpenIdListByMobile(mobile, openIdStr)
  289. if err != nil {
  290. msg = "get openIdList err:" + err.Error()
  291. return
  292. }
  293. utils.FileLog.Info("openIdListCount:%s", len(openIdList))
  294. //fmt.Println("openIdListCount:", len(openIdList))
  295. if len(openIdList) > 0 && utils.TemplateIdByCompanyApply != "" {
  296. utils.FileLog.Info("start send")
  297. //sendUrl := "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken
  298. //sendMap := make(map[string]interface{})
  299. //sendData := make(map[string]interface{})
  300. //
  301. //sendMap["template_id"] = utils.WxMsgTemplateIdWithRoadshowDeleteNotice
  302. //sendData["first"] = map[string]interface{}{"value": first, "color": "#173177"}
  303. //sendData["keyword1"] = map[string]interface{}{"value": keyword1, "color": "#173177"}
  304. //sendData["keyword2"] = map[string]interface{}{"value": keyword2, "color": "#173177"}
  305. //sendData["remark"] = map[string]interface{}{"value": remark, "color": "#173177"}
  306. ////小程序信息
  307. //if wxAppPath != "" {
  308. // sendMap["miniprogram"] = map[string]interface{}{"appid": utils.WxAppId2, "pagepath": wxAppPath}
  309. //}
  310. //sendMap["data"] = sendData
  311. //sendTemplateMsg(sendUrl, sendMap, openIdList, wxAppPath, utils.TEMPLATE_MSG_ACTIVITY_APPOINTMENT)
  312. openIdArr := make([]string, len(openIdList))
  313. for i, v := range openIdList {
  314. openIdArr[i] = v.OpenId
  315. }
  316. sendInfo := new(SendWxTemplate)
  317. sendInfo.WxAppId = utils.AdminWxAppId
  318. sendInfo.First = first
  319. sendInfo.Keyword1 = keyword1
  320. sendInfo.Keyword2 = keyword2
  321. sendInfo.Remark = remark
  322. sendInfo.TemplateId = utils.WxMsgTemplateIdWithRoadshowDeleteNotice
  323. if wxAppPath != "" && utils.RunMode == "release" {
  324. sendInfo.RedirectUrl = wxAppPath
  325. }
  326. sendInfo.RedirectTarget = 2
  327. sendInfo.Resource = wxAppPath
  328. sendInfo.SendType = utils.TEMPLATE_MSG_ACTIVITY_APPOINTMENT
  329. sendInfo.OpenIdArr = openIdArr
  330. err = SendTemplateMsg(sendInfo)
  331. }
  332. utils.FileLog.Info("send end")
  333. return
  334. }
  335. // SendSealFinishedWxTemplateMsg 给销售发送 用印申请已签回的模版消息
  336. func SendSealFinishedWxTemplateMsg(mobile string, companyName string, sealId int) (err error) {
  337. var msg string
  338. defer func() {
  339. if err != nil {
  340. fmt.Println("err:", err)
  341. go alarm_msg.SendAlarmMsg("发送模版消息失败,Err:"+err.Error()+";msg:"+msg, 3)
  342. utils.FileLog.Info(fmt.Sprintf("发送模版消息失败,Err:%s,%s", err.Error(), msg))
  343. }
  344. if msg != "" {
  345. utils.FileLog.Info("发送模版消息失败,msg:%s", msg)
  346. }
  347. }()
  348. utils.FileLog.Info("%s", "services SendMsg")
  349. utils.FileLog.Info("mobile:%s", mobile)
  350. openIdStr := WxAdminOpenIdGet()
  351. openIdList, err := admin.GetOpenIdListByMobile(mobile, openIdStr)
  352. if err != nil {
  353. msg = "get openIdList err:" + err.Error()
  354. return
  355. }
  356. utils.FileLog.Info("openIdListCount:%s", len(openIdList))
  357. if len(openIdList) > 0 && utils.WxMsgTemplateIdWithSealApplyFinished != "" {
  358. utils.FileLog.Info("start send")
  359. //sendUrl := "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken
  360. //fmt.Println("send start")
  361. //utils.FileLog.Info("send start")
  362. //sendMap := make(map[string]interface{})
  363. //sendData := make(map[string]interface{})
  364. first := "您的用印申请已签回,可前往提交转正/续约申请"
  365. keyword1 := companyName
  366. keyword2 := "已签回"
  367. remark := "点击查看用印详情"
  368. //
  369. //sendData["first"] = map[string]interface{}{"value": first, "color": "#173177"}
  370. //sendData["keyword1"] = map[string]interface{}{"value": keyword1, "color": "#173177"}
  371. //sendData["keyword2"] = map[string]interface{}{"value": keyword2, "color": "#173177"}
  372. //sendData["remark"] = map[string]interface{}{"value": remark, "color": "#173177"}
  373. //
  374. //sendMap["template_id"] = utils.WxMsgTemplateIdWithSealApplyFinished
  375. //sendMap["url"] = "" //跳转地址
  376. //sendMap["data"] = sendData
  377. // TODO 随手办公小程序的跳转地址
  378. wxAppPath := fmt.Sprintf("pages-approve/seal/detail?SealId=%d", sealId)
  379. //sendMap["miniprogram"] = map[string]interface{}{"appid": utils.WxAppId2, "pagepath": wxAppPath}
  380. //err = sendTemplateMsg(sendUrl, sendMap, openIdList, wxAppPath, utils.TEMPLATE_MSG_SEAL_FINISHED)
  381. openIdArr := make([]string, len(openIdList))
  382. for i, v := range openIdList {
  383. openIdArr[i] = v.OpenId
  384. }
  385. sendInfo := new(SendWxTemplate)
  386. sendInfo.WxAppId = utils.AdminWxAppId
  387. sendInfo.First = first
  388. sendInfo.Keyword1 = keyword1
  389. sendInfo.Keyword2 = keyword2
  390. sendInfo.Remark = remark
  391. sendInfo.RedirectUrl = wxAppPath
  392. sendInfo.TemplateId = utils.WxMsgTemplateIdWithSealApplyFinished
  393. sendInfo.RedirectTarget = 2
  394. sendInfo.Resource = wxAppPath
  395. sendInfo.SendType = utils.TEMPLATE_MSG_SEAL_FINISHED
  396. sendInfo.OpenIdArr = openIdArr
  397. err = SendTemplateMsg(sendInfo)
  398. }
  399. utils.FileLog.Info("send end")
  400. return
  401. }
  402. // SendYbQuestionDistributeWxMsg 推送研报小程序模板消息-问答社区分配
  403. func SendYbQuestionDistributeWxMsg(questionId, adminId int, openid, questionTitle string) (err error) {
  404. var errMsg string
  405. defer func() {
  406. if err != nil {
  407. alarmMsg := fmt.Sprintf("SendMiniProgramReportWxMsg-推送问答社区分配模版消息失败; QuestionId: %d; Err: %s; Msg: %s", questionId, err.Error(), errMsg)
  408. utils.FileLog.Error(alarmMsg)
  409. go alarm_msg.SendAlarmMsg(alarmMsg, 3)
  410. }
  411. }()
  412. openIdList := make([]*admin.OpenIdList, 0)
  413. openIdList = append(openIdList, &admin.OpenIdList{
  414. OpenId: openid,
  415. AdminId: adminId,
  416. })
  417. //sendUrl := "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken
  418. //sendMap := make(map[string]interface{})
  419. //sendData := make(map[string]interface{})
  420. first := "您好,有新的提问待回复"
  421. keyword1 := questionTitle
  422. keyword2 := "待回复"
  423. remark := "请点击详情尽快处理"
  424. //sendData["first"] = map[string]interface{}{"value": first, "color": "#173177"}
  425. //sendData["keyword1"] = map[string]interface{}{"value": keyword1, "color": "#173177"}
  426. //sendData["keyword2"] = map[string]interface{}{"value": keyword2, "color": "#173177"}
  427. //sendData["remark"] = map[string]interface{}{"value": remark, "color": "#173177"}
  428. //
  429. //sendMap["template_id"] = utils.WxMsgTemplateIdWithYbCommunityQuestion
  430. //sendMap["data"] = sendData
  431. //
  432. wxAppPath := fmt.Sprintf("pages-question/answerDetail?id=%d", questionId)
  433. //if wxAppPath != "" {
  434. // sendMap["miniprogram"] = map[string]interface{}{"appid": utils.WxYbAppId, "pagepath": wxAppPath}
  435. //}
  436. //err = sendTemplateMsg(sendUrl, sendMap, openIdList, wxAppPath, utils.TEMPLATE_MSG_YB_COMMUNITY_QUESTION)
  437. openIdArr := make([]string, len(openIdList))
  438. for i, v := range openIdList {
  439. openIdArr[i] = v.OpenId
  440. }
  441. sendInfo := new(SendWxTemplate)
  442. sendInfo.WxAppId = utils.AdminWxAppId
  443. sendInfo.First = first
  444. sendInfo.Keyword1 = keyword1
  445. sendInfo.Keyword2 = keyword2
  446. sendInfo.Remark = remark
  447. sendInfo.RedirectUrl = wxAppPath
  448. sendInfo.TemplateId = utils.WxMsgTemplateIdWithYbCommunityQuestion
  449. sendInfo.RedirectTarget = 1
  450. sendInfo.Resource = wxAppPath
  451. sendInfo.SendType = utils.TEMPLATE_MSG_YB_COMMUNITY_QUESTION
  452. sendInfo.OpenIdArr = openIdArr
  453. err = SendTemplateMsg(sendInfo)
  454. utils.FileLog.Info("send end")
  455. return
  456. }
  457. //推送模板消息
  458. func SendTemplateMsg(sendInfo *SendWxTemplate) (err error) {
  459. postData, err := json.Marshal(sendInfo)
  460. if err != nil {
  461. alarm_msg.SendAlarmMsg("SendTemplateMsg json.Marshal Err:"+err.Error(), 1)
  462. return err
  463. }
  464. body := ioutil.NopCloser(strings.NewReader(string(postData)))
  465. client := &http.Client{}
  466. req, err := http.NewRequest("POST", utils.SendWxTemplateMsgUrl, body)
  467. if err != nil {
  468. alarm_msg.SendAlarmMsg("SendTemplateMsg http.NewRequest Err:"+err.Error(), 1)
  469. return err
  470. }
  471. contentType := "application/json;charset=utf-8"
  472. req.Header.Set("Content-Type", contentType)
  473. req.Header.Set("Authorization", utils.SendTemplateMsgAuthorization)
  474. resp, err := client.Do(req)
  475. if err != nil {
  476. fmt.Println("http client.Do Err:" + err.Error())
  477. return err
  478. }
  479. defer resp.Body.Close()
  480. b, err := ioutil.ReadAll(resp.Body)
  481. if err != nil {
  482. return err
  483. }
  484. result := new(BaseResponse)
  485. err = json.Unmarshal(b, &result)
  486. if err != nil {
  487. return err
  488. }
  489. if result.Ret != 200 {
  490. err = errors.New(string(b))
  491. return err
  492. }
  493. return
  494. }
  495. // SendWxMsgWithRaiSell 权益销售客户申请转正后,消息群发给所有销售
  496. func SendWxMsgWithRaiSell(first, keyword1, keyword2, keyword3, keyword4 string, openIdList []*models.OpenIdList) (err error) {
  497. var msg string
  498. defer func() {
  499. if err != nil {
  500. fmt.Println("err:", err)
  501. go alarm_msg.SendAlarmMsg("权益销售客户申请转正后,消息群发给所有销售,Err:"+err.Error()+";msg:"+msg, 3)
  502. }
  503. if msg != "" {
  504. utils.FileLog.Info("发送模版消息失败,msg:%s", msg)
  505. }
  506. }()
  507. openIdArr := make([]string, len(openIdList))
  508. for i, v := range openIdList {
  509. openIdArr[i] = v.OpenId
  510. }
  511. sendInfo := new(SendWxTemplate)
  512. sendInfo.First = first
  513. sendInfo.Keyword1 = keyword1
  514. sendInfo.Keyword2 = keyword2
  515. sendInfo.Keyword3 = keyword3
  516. sendInfo.Keyword4 = keyword4
  517. sendInfo.Remark = ""
  518. sendInfo.TemplateId = utils.WxMsgTemplateIdCompanyApprovalMessageRai
  519. sendInfo.RedirectUrl = ""
  520. sendInfo.RedirectTarget = 3
  521. sendInfo.SendType = utils.TEMPLATE_MSG_APPLY
  522. sendInfo.OpenIdArr = openIdArr
  523. fmt.Println(sendInfo)
  524. err = SendTemplateMsg(sendInfo)
  525. return
  526. }