wxoffce.go 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. package service
  2. import (
  3. "encoding/json"
  4. "strconv"
  5. "strings"
  6. "time"
  7. "github.com/fastwego/offiaccount/type/type_event"
  8. "github.com/fastwego/offiaccount/type/type_message"
  9. "kpt.notice/middleware/notice"
  10. "kpt.notice/pkg/http"
  11. "kpt.notice/pkg/log"
  12. "kpt.notice/pkg/util"
  13. )
  14. // 获取公众号临时二维码
  15. func CreateQRCode(sceneID string) (body []byte, err error) {
  16. resp, e := notice.CreateQRCode(sceneID)
  17. if err != nil {
  18. log.Errorf("service.CreateQRCode. %v", e)
  19. return
  20. }
  21. m := make(map[string]string)
  22. json.Unmarshal(resp, &m)
  23. m = map[string]string{
  24. "ticket": m["ticket"],
  25. }
  26. url := "https://mp.weixin.qq.com/cgi-bin/showqrcode"
  27. body, err = http.HttpGet(url, m)
  28. if err != nil {
  29. log.Errorf("service.CreateQRCode. %v", err)
  30. }
  31. return
  32. }
  33. func ReceiveMessage(body []byte) (output *type_message.ReplyMessageText) {
  34. log.Error("ReceiveMessage=====================enter")
  35. msg, err := notice.ServerAcc.Server.ParseXML(body)
  36. if err != nil {
  37. log.Errorf("ReceiveMessage==parse xml error: %v", err)
  38. output = nil
  39. }
  40. switch msg.(type) {
  41. case type_message.MessageText:
  42. p := msg.(type_message.MessageText)
  43. output = ReceiveText(&p)
  44. case type_event.EventSubscribe:
  45. p := msg.(type_event.EventSubscribe)
  46. output = ReceiveEvent(&p)
  47. default:
  48. output = nil
  49. }
  50. return
  51. }
  52. /*
  53. 接收微信服务器推送的事件
  54. */
  55. func ReceiveEvent(msg *type_event.EventSubscribe) (output *type_message.ReplyMessageText) {
  56. log.Errorf("ReceiveEvent======\n")
  57. switch msg.Event.Event {
  58. case "subscribe":
  59. key := string(type_message.CDATA(msg.EventKey))
  60. scene_id := strings.Split(key, "qrscene_")
  61. m := map[string]interface{}{
  62. "userinfo": scene_id[1],
  63. "openid": msg.FromUserName,
  64. }
  65. json.Marshal(m)
  66. url := "http://kpttest.kptyun.com/userwxopenid/binding"
  67. resp := http.HttpPost(url, "application/json", util.MapToString(m))
  68. respContent := "公众号绑定系统成功"
  69. if resp == nil {
  70. respContent = "公众号绑定系统失败,请联系管理员"
  71. }
  72. output = WxResponse(type_message.CDATA(msg.FromUserName), type_message.CDATA(msg.ToUserName))
  73. output.Content = type_message.CDATA(respContent)
  74. return
  75. default:
  76. return nil
  77. }
  78. }
  79. /*
  80. 接收微信服务器推送的文本消息
  81. */
  82. func ReceiveText(msg *type_message.MessageText) (resp *type_message.ReplyMessageText) {
  83. log.Errorf("ReceiveText: %+v", msg)
  84. conText := string(type_message.CDATA(msg.Content))
  85. openid := string(type_message.CDATA(msg.FromUserName))
  86. //update openid of message in db
  87. err := svc.InsertUser(conText, openid)
  88. var respText string = "手机号绑定成功,欢迎使用"
  89. if err != nil {
  90. respText = "手机号绑定失败,请重新输入"
  91. }
  92. resp = WxResponse(type_message.CDATA(msg.FromUserName), type_message.CDATA(msg.ToUserName))
  93. resp.Content = type_message.CDATA(respText)
  94. return
  95. }
  96. func WxResponse(from, to type_message.CDATA) *type_message.ReplyMessageText {
  97. return &type_message.ReplyMessageText{
  98. ReplyMessage: type_message.ReplyMessage{
  99. ToUserName: from,
  100. FromUserName: to,
  101. CreateTime: strconv.FormatInt(time.Now().Unix(), 10),
  102. MsgType: type_message.ReplyMsgTypeText,
  103. },
  104. }
  105. }
  106. /*
  107. 发送模板消息
  108. */
  109. // func sendMessage(c *gin.Context) {
  110. // svc.SendInstantMsg()
  111. // }