package service import ( "encoding/json" "strconv" "strings" "time" "github.com/fastwego/offiaccount/type/type_event" "github.com/fastwego/offiaccount/type/type_message" "kpt.notice/middleware/notice" "kpt.notice/pkg/http" "kpt.notice/pkg/log" "kpt.notice/pkg/util" ) // 获取公众号临时二维码 func CreateQRCode(sceneID string) (body []byte, err error) { resp, e := notice.CreateQRCode(sceneID) if err != nil { log.Errorf("service.CreateQRCode. %v", e) return } m := make(map[string]string) json.Unmarshal(resp, &m) m = map[string]string{ "ticket": m["ticket"], } url := "https://mp.weixin.qq.com/cgi-bin/showqrcode" body, err = http.HttpGet(url, m) if err != nil { log.Errorf("service.CreateQRCode. %v", err) } return } func ReceiveMessage(body []byte) (output *type_message.ReplyMessageText) { log.Error("ReceiveMessage=====================enter") msg, err := notice.ServerAcc.Server.ParseXML(body) if err != nil { log.Errorf("ReceiveMessage==parse xml error: %v", err) output = nil } switch msg.(type) { case type_message.MessageText: p := msg.(type_message.MessageText) output = ReceiveText(&p) case type_event.EventSubscribe: p := msg.(type_event.EventSubscribe) output = ReceiveEvent(&p) default: output = nil } return } /* 接收微信服务器推送的事件 */ func ReceiveEvent(msg *type_event.EventSubscribe) (output *type_message.ReplyMessageText) { log.Errorf("ReceiveEvent======\n") switch msg.Event.Event { case "subscribe": key := string(type_message.CDATA(msg.EventKey)) scene_id := strings.Split(key, "qrscene_") m := map[string]interface{}{ "userinfo": scene_id[1], "openid": msg.FromUserName, } json.Marshal(m) url := "http://kpttest.kptyun.com/userwxopenid/binding" resp := http.HttpPost(url, "application/json", util.MapToString(m)) respContent := "公众号绑定系统成功" if resp == nil { respContent = "公众号绑定系统失败,请联系管理员" } output = WxResponse(type_message.CDATA(msg.FromUserName), type_message.CDATA(msg.ToUserName)) output.Content = type_message.CDATA(respContent) return default: return nil } } /* 接收微信服务器推送的文本消息 */ func ReceiveText(msg *type_message.MessageText) (resp *type_message.ReplyMessageText) { log.Errorf("ReceiveText: %+v", msg) conText := string(type_message.CDATA(msg.Content)) openid := string(type_message.CDATA(msg.FromUserName)) //update openid of message in db err := svc.InsertUser(conText, openid) var respText string = "手机号绑定成功,欢迎使用" if err != nil { respText = "手机号绑定失败,请重新输入" } resp = WxResponse(type_message.CDATA(msg.FromUserName), type_message.CDATA(msg.ToUserName)) resp.Content = type_message.CDATA(respText) return } func WxResponse(from, to type_message.CDATA) *type_message.ReplyMessageText { return &type_message.ReplyMessageText{ ReplyMessage: type_message.ReplyMessage{ ToUserName: from, FromUserName: to, CreateTime: strconv.FormatInt(time.Now().Unix(), 10), MsgType: type_message.ReplyMsgTypeText, }, } } /* 发送模板消息 */ // func sendMessage(c *gin.Context) { // svc.SendInstantMsg() // }