123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 |
- package rpc
- import (
- "app.yhyue.com/BP/weixin_util/weixin"
- "log"
- "net"
- "net/http"
- "net/rpc"
- )
- const (
- tplapi_url = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token="
- itmapi_url = "https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token="
- )
- //提供远程调用功能,该接口可以提供多个服务函数
- type WeiXinRpc struct {
- wx *weixin.Weixin
- }
- type NotifyMsg struct {
- Openid string //用户id
- Remark string //消息内容,其他属性待加
- KeyWord1 string
- KeyWord2 string
- Title string
- Url string
- Date string
- KeyWord3 string
- Color string
- DetailColor string
- TplId string
- }
- //RPCResult
- type Result string
- func (wxRPC *WeiXinRpc) SendTplMsg(msgTmpIdKey string, param *NotifyMsg, ret *Result) (err error) {
- var msg struct {
- ToUser string `json:"touser"`
- TplId string `json:"template_id"`
- Url string `json:"url"`
- Topcolor string `json:"topcolor"`
- Data struct {
- Title struct {
- Value string `json:"value"`
- } `json:"first"`
- KeyWord1 struct {
- Value string `json:"value"`
- } `json:"keyword1"`
- KeyWord2 struct {
- Value string `json:"value"`
- } `json:"keyword2"`
- KeyWord3 struct {
- Value string `json:"value"`
- } `json:"keyword3"`
- Remark struct {
- Value string `json:"value"`
- } `json:"remark"`
- } `json:"data"`
- }
- msg.ToUser = param.Openid
- msg.TplId = weixin.WxConfig.MessageTpl["msgTmpIdKey"]
- msg.Url = param.Url
- msg.Data.Title.Value = param.Title
- msg.Data.KeyWord1.Value = param.KeyWord1
- msg.Data.KeyWord2.Value = param.KeyWord2
- msg.Data.KeyWord3.Value = param.KeyWord3
- msg.Data.Remark.Value = param.Remark
- log.Printf("msgTmpIdKey:[%s] send TplMsg:[%v]", msgTmpIdKey, msg)
- err = wxRPC.wx.PostTextCustom(tplapi_url, &msg)
- if err != nil {
- log.Printf("msgTmpIdKey:[%s] send TplMsg[%s]", msgTmpIdKey, err.Error())
- } else {
- log.Printf("msgTmpIdKey:[%s] send success!", msgTmpIdKey)
- }
- return
- }
- func (wxRPC *WeiXinRpc) CreateMenu(menu *weixin.Menu) {
- /*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"
- menu := &Menu{make([]MenuButton, 2)}
- menu.Buttons[0].Name = "业务1"
- menu.Buttons[0].Type = MenuButtonTypeUrl
- menu.Buttons[0].Url = url1
- 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"
- menu.Buttons[1].Name = "业务2"
- menu.Buttons[1].Type = MenuButtonTypeUrl
- menu.Buttons[1].Url = url2*/
- err := weixin.Mux.CreateMenu(menu)
- if err != nil {
- log.Println("菜单创建失败")
- } else {
- log.Println("菜单创建成功!")
- }
- }
- var listen net.Listener
- func StartWeiXinRpc(wx *weixin.Weixin) {
- wrpc := &WeiXinRpc{wx: wx}
- //在此可以注册多个Rpc服务接口
- rpc.Register(wrpc)
- rpc.HandleHTTP()
- var err error
- listen, err = net.Listen("tcp", ":"+weixin.WxConfig.RpcPort)
- if err != nil {
- log.Println(err.Error())
- } else {
- go http.Serve(listen, nil)
- }
- }
- func DestoryRPC() {
- if listen != nil {
- log.Println("close weixin rpc netlisten")
- listen.Close()
- }
- }
|