push.go 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. package util
  2. import (
  3. "fmt"
  4. "net/rpc"
  5. qu "app.yhyue.com/moapp/jybase/common"
  6. "app.yhyue.com/moapp/jybase/go-logger/logger"
  7. "app.yhyue.com/moapp/message/config"
  8. qrpc "app.yhyue.com/moapp/message/model"
  9. )
  10. var PushPool = make(chan bool, config.PushConfig.PushPoolSize)
  11. func StartPush(mess map[string]interface{}, userid string) {
  12. //推送微信
  13. if isPushOk := SendWeixin(mess); !isPushOk {
  14. logger.Info("推送失败:", userid, mess)
  15. }
  16. }
  17. //推送微信
  18. func SendWeixin(mess map[string]interface{}) bool {
  19. if len(mess) == 0 {
  20. return false
  21. }
  22. s_m_openid := qu.ObjToString(mess["openid"])
  23. if config.PushConfig.TestId != "" {
  24. s_m_openid = config.PushConfig.TestId
  25. }
  26. if s_m_openid == "" {
  27. return false
  28. }
  29. PushPool <- true
  30. defer func() {
  31. <-PushPool
  32. }()
  33. phone := qu.ObjToString(mess["phone"])
  34. product_type := qu.ObjToString(mess["product_type"])
  35. order_code := qu.ObjToString(mess["order_code"])
  36. buy_time := qu.ObjToString(mess["buy_time"])
  37. end_time := qu.ObjToString(mess["end_time"])
  38. //商品名称
  39. keyword1_color := config.PushConfig.WxMsg.Keyword1.Color
  40. keyword1_value := fmt.Sprintf(config.PushConfig.WxMsg.Keyword1.Value, product_type)
  41. //订单编号
  42. keyword2_color := config.PushConfig.WxMsg.Keyword2.Color
  43. keyword2_value := fmt.Sprintf(config.PushConfig.WxMsg.Keyword2.Value, order_code)
  44. //购买时间
  45. keyword3_color := config.PushConfig.WxMsg.Keyword3.Color
  46. keyword3_value := fmt.Sprintf(config.PushConfig.WxMsg.Keyword3.Value, buy_time)
  47. //到期时间
  48. keyword4_color := config.PushConfig.WxMsg.Keyword4.Color
  49. keyword4_value := fmt.Sprintf(config.PushConfig.WxMsg.Keyword4.Value, end_time)
  50. first_value := fmt.Sprintf(config.PushConfig.WxMsg.First.Value, phone)
  51. first_color := config.PushConfig.WxMsg.First.Color
  52. remark_value := config.PushConfig.WxMsg.Remark.Value
  53. tmplData := map[string]*qrpc.TmplItem{
  54. "first": &qrpc.TmplItem{
  55. Value: first_value,
  56. Color: first_color,
  57. },
  58. "keyword1": &qrpc.TmplItem{
  59. Value: keyword1_value,
  60. Color: keyword1_color,
  61. },
  62. "keyword2": &qrpc.TmplItem{
  63. Value: keyword2_value,
  64. Color: keyword2_color,
  65. },
  66. "keyword3": &qrpc.TmplItem{
  67. Value: keyword3_value,
  68. Color: keyword3_color,
  69. },
  70. "keyword4": &qrpc.TmplItem{
  71. Value: keyword4_value,
  72. Color: keyword4_color,
  73. },
  74. "remark": &qrpc.TmplItem{
  75. Value: remark_value,
  76. Color: first_color,
  77. },
  78. }
  79. ok, _ := WxSendTmplMsg(config.PushConfig.Weixinrpc, &qrpc.WxTmplMsg{
  80. OpenId: s_m_openid,
  81. TplId: config.PushConfig.WxMsg.Id,
  82. TmplData: tmplData,
  83. })
  84. return ok
  85. }
  86. /*通用的微信发模板消息方法
  87. *成功:repl=="Y"
  88. */
  89. func WxSendTmplMsg(address string, p *qrpc.WxTmplMsg) (bool, error) {
  90. defer qu.Catch()
  91. var repl qrpc.RpcResult
  92. client, err := rpc.DialHTTP("tcp", address)
  93. if err != nil {
  94. logger.Info("tcp err:", p.OpenId, err)
  95. return false, err
  96. }
  97. defer client.Close()
  98. err = client.Call("WeiXinRpc.SendTmplMsg", p, &repl)
  99. if err != nil {
  100. logger.Info("wxRpc err:", p.OpenId, err)
  101. return false, err
  102. }
  103. return repl == "Y", nil
  104. }