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