rpc.go 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. package rpc
  2. import (
  3. "app.yhyue.com/BP/weixin_util/weixin"
  4. "log"
  5. "net"
  6. "net/http"
  7. "net/rpc"
  8. )
  9. const (
  10. tplapi_url = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token="
  11. itmapi_url = "https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token="
  12. )
  13. //提供远程调用功能,该接口可以提供多个服务函数
  14. type WeiXinRpc struct {
  15. wx *weixin.Weixin
  16. }
  17. type NotifyMsg struct {
  18. Openid string //用户id
  19. Remark string //消息内容,其他属性待加
  20. KeyWord1 string
  21. KeyWord2 string
  22. Title string
  23. Url string
  24. Date string
  25. KeyWord3 string
  26. Color string
  27. DetailColor string
  28. TplId string
  29. }
  30. //RPCResult
  31. type Result string
  32. func (wxRPC *WeiXinRpc) SendTplMsg(msgTmpIdKey string, param *NotifyMsg, ret *Result) (err error) {
  33. var msg struct {
  34. ToUser string `json:"touser"`
  35. TplId string `json:"template_id"`
  36. Url string `json:"url"`
  37. Topcolor string `json:"topcolor"`
  38. Data struct {
  39. Title struct {
  40. Value string `json:"value"`
  41. } `json:"first"`
  42. KeyWord1 struct {
  43. Value string `json:"value"`
  44. } `json:"keyword1"`
  45. KeyWord2 struct {
  46. Value string `json:"value"`
  47. } `json:"keyword2"`
  48. KeyWord3 struct {
  49. Value string `json:"value"`
  50. } `json:"keyword3"`
  51. Remark struct {
  52. Value string `json:"value"`
  53. } `json:"remark"`
  54. } `json:"data"`
  55. }
  56. msg.ToUser = param.Openid
  57. msg.TplId = weixin.WxConfig.MessageTpl["msgTmpIdKey"]
  58. msg.Url = param.Url
  59. msg.Data.Title.Value = param.Title
  60. msg.Data.KeyWord1.Value = param.KeyWord1
  61. msg.Data.KeyWord2.Value = param.KeyWord2
  62. msg.Data.KeyWord3.Value = param.KeyWord3
  63. msg.Data.Remark.Value = param.Remark
  64. log.Printf("msgTmpIdKey:[%s] send TplMsg:[%v]", msgTmpIdKey, msg)
  65. err = wxRPC.wx.PostTextCustom(tplapi_url, &msg)
  66. if err != nil {
  67. log.Printf("msgTmpIdKey:[%s] send TplMsg[%s]", msgTmpIdKey, err.Error())
  68. } else {
  69. log.Printf("msgTmpIdKey:[%s] send success!", msgTmpIdKey)
  70. }
  71. return
  72. }
  73. func (wxRPC *WeiXinRpc) CreateMenu(menu *weixin.Menu) {
  74. /*url1 := "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" + weixin.WxConfig.AppId + "&redirect_uri=http%3A%2F%2F" + weixin.WxConfig.Domain + "%2Fwx%2Fsso%3Fcallback%3Dhttp%3A%2F%2F" + weixin.WxConfig.Domain + "%2Fkjj%2Fbusiness1&response_type=code&scope=snsapi_base&state=1#wechat_redirect"
  75. menu := &Menu{make([]MenuButton, 2)}
  76. menu.Buttons[0].Name = "业务1"
  77. menu.Buttons[0].Type = MenuButtonTypeUrl
  78. menu.Buttons[0].Url = url1
  79. url2 := "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" + weixin.WxConfig.AppId + "&redirect_uri=http%3A%2F%2F" + weixin.WxConfig.Domain + "%2Fwx%2Fsso%3Fcallback%3Dhttp%3A%2F%2F" + weixin.WxConfig.Domain + "%2Fkjj%2Fbusiness2&response_type=code&scope=snsapi_base&state=1#wechat_redirect"
  80. menu.Buttons[1].Name = "业务2"
  81. menu.Buttons[1].Type = MenuButtonTypeUrl
  82. menu.Buttons[1].Url = url2*/
  83. err := weixin.Mux.CreateMenu(menu)
  84. if err != nil {
  85. log.Println("菜单创建失败")
  86. } else {
  87. log.Println("菜单创建成功!")
  88. }
  89. }
  90. var listen net.Listener
  91. func StartWeiXinRpc(wx *weixin.Weixin) {
  92. wrpc := &WeiXinRpc{wx: wx}
  93. //在此可以注册多个Rpc服务接口
  94. rpc.Register(wrpc)
  95. rpc.HandleHTTP()
  96. var err error
  97. listen, err = net.Listen("tcp", ":"+weixin.WxConfig.RpcPort)
  98. if err != nil {
  99. log.Println(err.Error())
  100. } else {
  101. go http.Serve(listen, nil)
  102. }
  103. }
  104. func DestoryRPC() {
  105. if listen != nil {
  106. log.Println("close weixin rpc netlisten")
  107. listen.Close()
  108. }
  109. }