wechat_send_msg.go 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  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. "time"
  11. )
  12. func SendInterviewApplyTemplateMsg(realName, companyName, mobile, articleTitle, openId string) (err error) {
  13. var msg string
  14. defer func() {
  15. if err != nil {
  16. go utils.SendEmail("发送模版消息失败"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
  17. utils.FileLog.Info("发送模版消息失败,Err:%s,%s", err.Error(), msg)
  18. }
  19. if msg != "" {
  20. utils.FileLog.Info("发送模版消息失败,msg:%s", msg)
  21. }
  22. }()
  23. utils.FileLog.Info("%s", "services SendMsg")
  24. accessToken, err := models.GetWxAccessToken()
  25. if err != nil {
  26. msg = "GetWxAccessToken Err:" + err.Error()
  27. return
  28. }
  29. if accessToken == "" {
  30. msg = "accessToken is empty"
  31. return
  32. }
  33. sendUrl := "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken
  34. sendMap := make(map[string]interface{})
  35. sendData := make(map[string]interface{})
  36. keyword1 := realName + "【" + companyName + "】"
  37. first := "您有一条新的访谈申请,请及时处理。"
  38. keyword2 := mobile
  39. keyword3 := time.Now().Format(utils.FormatDateTime)
  40. keyword4 := articleTitle
  41. fontColor := "#D9001B"
  42. sendData["first"] = map[string]interface{}{"value": first, "color": fontColor}
  43. sendData["keyword1"] = map[string]interface{}{"value": keyword1, "color": fontColor}
  44. sendData["keyword2"] = map[string]interface{}{"value": keyword2, "color": fontColor}
  45. sendData["keyword3"] = map[string]interface{}{"value": keyword3, "color": fontColor}
  46. sendData["keyword4"] = map[string]interface{}{"value": keyword4, "color": fontColor}
  47. sendMap["template_id"] = utils.WxMsgTemplateIdApply
  48. sendMap["data"] = sendData
  49. sendTemplateMsg(sendUrl, openId, sendMap)
  50. fmt.Println("send end")
  51. utils.FileLog.Info("send end")
  52. return
  53. }
  54. func SendInterviewApplyCancelTemplateMsg(realName, companyName, mobile, articleTitle, openId string) (err error) {
  55. var msg string
  56. defer func() {
  57. if err != nil {
  58. go utils.SendEmail("发送模版消息失败"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
  59. utils.FileLog.Info("发送模版消息失败,Err:%s,%s", err.Error(), msg)
  60. }
  61. if msg != "" {
  62. utils.FileLog.Info("发送模版消息失败,msg:%s", msg)
  63. }
  64. }()
  65. utils.FileLog.Info("%s", "services SendMsg")
  66. accessToken, err := models.GetWxAccessToken()
  67. if err != nil {
  68. msg = "GetWxAccessToken Err:" + err.Error()
  69. return
  70. }
  71. if accessToken == "" {
  72. msg = "accessToken is empty"
  73. return
  74. }
  75. sendUrl := "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken
  76. sendMap := make(map[string]interface{})
  77. sendData := make(map[string]interface{})
  78. first := realName + "-" + mobile + "【" + companyName + "】的访谈申请已取消,请留意。"
  79. keyword1 := articleTitle
  80. keyword2 := time.Now().Format(utils.FormatDateTime)
  81. fontColor := "#D9001B"
  82. sendData["first"] = map[string]interface{}{"value": first, "color": fontColor}
  83. sendData["keyword1"] = map[string]interface{}{"value": keyword1, "color": fontColor}
  84. sendData["keyword2"] = map[string]interface{}{"value": keyword2, "color": fontColor}
  85. sendMap["template_id"] = utils.WxMsgTemplateIdApplyCancel
  86. sendMap["data"] = sendData
  87. sendTemplateMsg(sendUrl, openId, sendMap)
  88. fmt.Println("send end")
  89. utils.FileLog.Info("send end")
  90. return
  91. }
  92. func SendPermissionApplyTemplateMsg(realName, companyName, mobile, openId,applyMethod string) (err error) {
  93. var msg string
  94. defer func() {
  95. if err != nil {
  96. go utils.SendEmail("发送模版消息失败"+time.Now().Format("2006-01-02 15:04:05"), msg+";Err:"+err.Error(), utils.EmailSendToUsers)
  97. utils.FileLog.Info("发送模版消息失败,Err:%s,%s", err.Error(), msg)
  98. }
  99. if msg != "" {
  100. utils.FileLog.Info("发送模版消息失败,msg:%s", msg)
  101. }
  102. }()
  103. utils.FileLog.Info("%s", "services SendMsg")
  104. accessToken, err := models.GetWxAccessToken()
  105. if err != nil {
  106. msg = "GetWxAccessToken Err:" + err.Error()
  107. return
  108. }
  109. if accessToken == "" {
  110. msg = "accessToken is empty"
  111. return
  112. }
  113. sendUrl := "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken
  114. sendMap := make(map[string]interface{})
  115. sendData := make(map[string]interface{})
  116. keyword1 := realName + "【" + companyName + "】"
  117. first := "查研观向有一条新的权限申请,请及时处理。"
  118. keyword2 := mobile
  119. keyword3 := time.Now().Format(utils.FormatDateTime)
  120. keyword4 := applyMethod
  121. fontColor := "#D9001B"
  122. sendData["first"] = map[string]interface{}{"value": first, "color": fontColor}
  123. sendData["keyword1"] = map[string]interface{}{"value": keyword1, "color": fontColor}
  124. sendData["keyword2"] = map[string]interface{}{"value": keyword2, "color": fontColor}
  125. sendData["keyword3"] = map[string]interface{}{"value": keyword3, "color": fontColor}
  126. sendData["keyword4"] = map[string]interface{}{"value": keyword4, "color": fontColor}
  127. sendMap["template_id"] = utils.WxMsgTemplateIdApply
  128. sendMap["data"] = sendData
  129. sendTemplateMsg(sendUrl, openId, sendMap)
  130. fmt.Println("send end")
  131. utils.FileLog.Info("send end")
  132. return
  133. }
  134. func sendTemplateMsg(sendUrl, openId string, sendMap map[string]interface{}) (err error) {
  135. sendMap["touser"] = openId
  136. data, err := json.Marshal(sendMap)
  137. if err != nil {
  138. fmt.Println("SendTemplateMsgOne Marshal Err:", err.Error())
  139. utils.FileLog.Info("SendTemplateMsgOne Marshal Err:%s", err.Error())
  140. return err
  141. }
  142. err = toSendTemplateMsg(sendUrl, data)
  143. if err != nil {
  144. fmt.Println("send err:", err.Error())
  145. utils.FileLog.Info("ToSendTemplateMsg Err:%s", err.Error())
  146. }
  147. return
  148. }
  149. func toSendTemplateMsg(sendUrl string, data []byte) (err error) {
  150. utils.FileLog.Info("Send:%s", string(data))
  151. client := http.Client{}
  152. resp, err := client.Post(sendUrl, "application/json", bytes.NewBuffer(data))
  153. if err != nil {
  154. return
  155. }
  156. defer resp.Body.Close()
  157. body, _ := ioutil.ReadAll(resp.Body)
  158. utils.FileLog.Info("SendResult:%s", string(body))
  159. var templateResponse SendTemplateResponse
  160. err = json.Unmarshal(body, &templateResponse)
  161. if err != nil {
  162. utils.FileLog.Info("SendResult Unmarshal Err:%s", err.Error())
  163. return err
  164. }
  165. return
  166. }
  167. type SendTemplateResponse struct {
  168. Errcode int `json:"errcode"`
  169. Errmsg string `json:"errmsg"`
  170. MsgID int `json:"msgid"`
  171. }