push.go 2.8 KB

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