package util import ( "fmt" "net/rpc" qu "app.yhyue.com/moapp/jybase/common" "app.yhyue.com/moapp/jybase/go-logger/logger" "app.yhyue.com/moapp/message/config" qrpc "app.yhyue.com/moapp/message/model" ) var PushPool = make(chan bool, config.PushConfig.PushPoolSize) func StartPush(mess map[string]interface{}, userid string) { //推送微信 if isPushOk := SendWeixin(mess); !isPushOk { logger.Info("推送失败:", userid, mess) } } //推送微信 func SendWeixin(mess map[string]interface{}) bool { if len(mess) == 0 { return false } s_m_openid := qu.ObjToString(mess["openid"]) if config.PushConfig.TestId != "" { s_m_openid = config.PushConfig.TestId } if s_m_openid == "" { return false } PushPool <- true defer func() { <-PushPool }() phone := qu.ObjToString(mess["phone"]) product_type := qu.ObjToString(mess["product_type"]) order_code := qu.ObjToString(mess["order_code"]) buy_time := qu.ObjToString(mess["buy_time"]) end_time := qu.ObjToString(mess["end_time"]) //商品名称 keyword1_color := config.PushConfig.WxMsg.Keyword1.Color keyword1_value := fmt.Sprintf(config.PushConfig.WxMsg.Keyword1.Value, product_type) //订单编号 keyword2_color := config.PushConfig.WxMsg.Keyword2.Color keyword2_value := fmt.Sprintf(config.PushConfig.WxMsg.Keyword2.Value, order_code) //购买时间 keyword3_color := config.PushConfig.WxMsg.Keyword3.Color keyword3_value := fmt.Sprintf(config.PushConfig.WxMsg.Keyword3.Value, buy_time) //到期时间 keyword4_color := config.PushConfig.WxMsg.Keyword4.Color keyword4_value := fmt.Sprintf(config.PushConfig.WxMsg.Keyword4.Value, end_time) first_value := fmt.Sprintf(config.PushConfig.WxMsg.First.Value, phone) first_color := config.PushConfig.WxMsg.First.Color remark_value := config.PushConfig.WxMsg.Remark.Value tmplData := map[string]*qrpc.TmplItem{ "first": &qrpc.TmplItem{ Value: first_value, Color: first_color, }, "keyword1": &qrpc.TmplItem{ Value: keyword1_value, Color: keyword1_color, }, "keyword2": &qrpc.TmplItem{ Value: keyword2_value, Color: keyword2_color, }, "keyword3": &qrpc.TmplItem{ Value: keyword3_value, Color: keyword3_color, }, "keyword4": &qrpc.TmplItem{ Value: keyword4_value, Color: keyword4_color, }, "remark": &qrpc.TmplItem{ Value: remark_value, Color: first_color, }, } ok, _ := WxSendTmplMsg(config.PushConfig.Weixinrpc, &qrpc.WxTmplMsg{ OpenId: s_m_openid, TplId: config.PushConfig.WxMsg.Id, TmplData: tmplData, }) return ok } /*通用的微信发模板消息方法 *成功:repl=="Y" */ func WxSendTmplMsg(address string, p *qrpc.WxTmplMsg) (bool, error) { defer qu.Catch() var repl qrpc.RpcResult client, err := rpc.DialHTTP("tcp", address) if err != nil { logger.Info("tcp err:", p.OpenId, err) return false, err } defer client.Close() err = client.Call("WeiXinRpc.SendTmplMsg", p, &repl) if err != nil { logger.Info("wxRpc err:", p.OpenId, err) return false, err } return repl == "Y", nil }