wxoffce.go 3.3 KB

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