123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 |
- 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()
- // }
|