internal void ReceiveResponse(ResponseMessageBase message) { if (message is GetScannerListResponse) GetScannerListResponseReceived(message as GetScannerListResponse); if (message is ScanToEmailResponse) ScanToEmailResponseReceived(message as ScanToEmailResponse); }
public ResponseReceivedEventArgs(ResponseMessageBase message) { this.Message = message; }
/// <summary> /// ResponseMessageBase.CreateFromResponseXml(xml)的扩展方法 /// </summary> /// <param name="xml">返回给服务器的Response Xml</param> /// <returns></returns> public static IResponseMessageBase CreateResponseMessage(this string xml) { return(ResponseMessageBase.CreateFromResponseXml(xml)); }
/// <summary> /// 将ResponseMessage实体转为XML /// </summary> /// <param name="entity">ResponseMessage实体</param> /// <returns></returns> public static XDocument ConvertEntityToXml(ResponseMessageBase entity) { return EntityHelper.ConvertEntityToXml(entity); }
public ResponseMessageNews GetResponseMessage(RequestMessageLocation requestMessage) { var responseMessage = ResponseMessageBase.CreateFromRequestMessage <ResponseMessageNews>(requestMessage); #region 百度地图 { var markersList = new List <BaiduMarkers>(); markersList.Add(new BaiduMarkers() { Longitude = requestMessage.Location_X, Latitude = requestMessage.Location_Y, Color = "red", Label = "S", Size = BaiduMarkerSize.m }); var mapUrl = BaiduMapHelper.GetBaiduStaticMap(requestMessage.Location_X, requestMessage.Location_Y, 1, 6, markersList); responseMessage.Articles.Add(new Article() { Description = string.Format("【来自百度地图】您刚才发送了地理位置信息。Location_X:{0},Location_Y:{1},Scale:{2},标签:{3}", requestMessage.Location_X, requestMessage.Location_Y, requestMessage.Scale, requestMessage.Label), PicUrl = mapUrl, Title = "定位地点周边地图", Url = mapUrl }); } #endregion #region GoogleMap { var markersList = new List <GoogleMapMarkers>(); markersList.Add(new GoogleMapMarkers() { X = requestMessage.Location_X, Y = requestMessage.Location_Y, Color = "red", Label = "S", Size = GoogleMapMarkerSize.Default, }); var mapSize = "480x600"; var mapUrl = GoogleMapHelper.GetGoogleStaticMap(19 /*requestMessage.Scale*//*微信和GoogleMap的Scale不一致,这里建议使用固定值*/, markersList, mapSize); responseMessage.Articles.Add(new Article() { Description = string.Format("【来自GoogleMap】您刚才发送了地理位置信息。Location_X:{0},Location_Y:{1},Scale:{2},标签:{3}", requestMessage.Location_X, requestMessage.Location_Y, requestMessage.Scale, requestMessage.Label), PicUrl = mapUrl, Title = "定位地点周边地图", Url = mapUrl }); } #endregion responseMessage.Articles.Add(new Article() { Title = "微信公众平台SDK 官网链接", Description = "Senparc.Weixin.MK SDK地址", PicUrl = "http://sdk.weixin.senparc.com/images/logo.jpg", Url = "http://sdk.weixin.senparc.com" }); return(responseMessage); }
/// <summary> /// ResponseMessageBase.CreateFromRequestMessage<T>(requestMessage)的扩展方法 /// </summary> /// <typeparam name="T">需要生成的ResponseMessage类型</typeparam> /// <param name="requestMessage">IRequestMessageBase接口下的接收信息类型</param> /// <returns></returns> public static T CreateResponseMessage <T>(this IRequestMessageBase requestMessage) where T : ResponseMessageBase { return(ResponseMessageBase.CreateFromRequestMessage <T>(requestMessage)); }
/// <summary> /// ResponseMessageBase.CreateFromResponseXml(xml)的扩展方法 /// </summary> /// <param name="xml">返回给服务器的Response Xml</param> /// <returns></returns> public static IResponseMessageBase CreateResponseMessage(this string xml, MessageEntityEnlightener enlighten) { return(ResponseMessageBase.CreateFromResponseXml(xml, enlighten)); }
protected abstract void ProcessImpl(RequestMessageBase requestMessage, ResponseMessageBase responseMessage);
/// <summary> /// ResponseMessageBase.CreateFromRequestMessage<T>(requestMessage)的扩展方法 /// </summary> /// <typeparam name="T">需要生成的ResponseMessage类型</typeparam> /// <param name="requestMessage">IRequestMessageBase接口下的接收信息类型</param> /// <returns></returns> public static T CreateResponseMessage <T>(this IRequestMessageBase requestMessage) where T : class, IResponseMessageBase //只有class才可以enlighten = null { return(ResponseMessageBase.CreateFromRequestMessage <T>(requestMessage)); }
/// <summary> /// ResponseMessageBase.CreateFromRequestMessage<T>(requestMessage)的扩展方法 /// </summary> /// <typeparam name="T">需要生成的ResponseMessage类型</typeparam> /// <param name="enlighten">MessageEntityEnlighten</param> /// <param name="requestMessage">IRequestMessageBase接口下的接收信息类型</param> /// <returns></returns> public static T CreateResponseMessage <T>(this MessageEntityEnlightener enlighten, IRequestMessageBase requestMessage) where T : IResponseMessageBase { return(ResponseMessageBase.CreateFromRequestMessage <T>(requestMessage, enlighten)); }
public IResponseMessageBase GetResponseMessage(RequestMessageLocation requestMessage) { #region 注释掉的 //var responseMessage = ResponseMessageBase.CreateFromRequestMessage<ResponseMessageNews>(requestMessage); //var markersList = new List<Markers>(); //markersList.Add(new Markers() //{ // X = requestMessage.Location_X, // Y = requestMessage.Location_Y, // Color = "red", // Label = "S", // Size = MarkerSize.Default, //}); //var mapSize = "480x600"; //var mapUrl = GoogleMapHelper.GetGoogleStaticMap(19 /*requestMessage.Scale*//*微信和GoogleMap的Scale不一致,这里建议使用固定值*/, // markersList, mapSize); //responseMessage.Articles.Add(new Article() //{ // Description = string.Format("您刚才发送了地理位置信息。Location_X:{0},Location_Y:{1},Scale:{2},标签:{3}", // requestMessage.Location_X, requestMessage.Location_Y, // requestMessage.Scale, requestMessage.Label), // PicUrl = mapUrl, // Title = "定位地点周边地图", // Url = mapUrl //}); //responseMessage.Articles.Add(new Article() //{ // Title = "微信公众平台SDK 官网链接", // Description = "Senparc.Weixin.MK SDK地址", // PicUrl = "http://weixin.senparc.com/images/logo1.jpg", // Url = "http://m.uweixin.cn" //}); //return responseMessage; #endregion WeiXCommFun wxcomm = new WeiXCommFun(); string yuming = MyCommFun.getWebSite(); int apiid = wxcomm.getApiid(); //1 查询店面,如果查询到店面,则返回图文列表信息,如果未查询到,则返回纯文本“找不到你查询的内容” BLL.wx_lbs_setting setBll = new BLL.wx_lbs_setting(); Model.wx_lbs_setting setting = setBll.GetSettingByWid(apiid); BLL.wx_lbs_shopInfo sBll = new BLL.wx_lbs_shopInfo(); //SELECT * FROM wx_lbs_shopInfo WHERE dbo.[ufn_GetMapDistance](121.4624,31.220933,yPoint, xPoint) < 5 IList <Model.wx_lbs_shopInfo> shopList = sBll.GetDetailList(apiid, "dbo.[ufn_GetMapDistance](" + requestMessage.Location_Y + "," + requestMessage.Location_X + ",yPoint, xPoint) < " + setting.searchRadius); if (shopList == null || shopList.Count <= 0) { //未查询到 var responseTextMessage = ResponseMessageBase.CreateFromRequestMessage <ResponseMessageText>(requestMessage); responseTextMessage.Content = "找不到你查询的内容"; return(responseTextMessage); } else { //查询到了数据 var responseMessage = ResponseMessageBase.CreateFromRequestMessage <ResponseMessageNews>(requestMessage); ////第一条信息 //responseMessage.Articles.Add(new Article() //{ // Description = string.Format("您刚才发送了地理位置信息。Location_X:{0},Location_Y:{1},Scale:{2},标签:{3}", // requestMessage.Location_X, requestMessage.Location_Y, // requestMessage.Scale, requestMessage.Label), // PicUrl = yuming + "/lbsInfo/images/ditu.jpg", // Title = "周边门店信息", // Url = yuming + "/weixin/lbs/index.aspx?x=" + requestMessage.Location_X + "&y=" + requestMessage.Location_Y + "&wid=" + apiid + "&openid=" + requestMessage.FromUserName //}); //中间n条信息 ,图文消息个数,限制为10条以内,所以中间控制最多8条信息 for (int i = 0; i < shopList.Count; i++) { if (i == 8) { break; } Model.wx_lbs_shopInfo shop = shopList[i]; string pUrl = ""; if (shop.shopLogo == null || shop.shopLogo.Trim() == "") { // pUrl = yuming + "/lbsinfo/images/logo.jpg"; } else { pUrl = yuming + shop.shopLogo; } responseMessage.Articles.Add(new Article() { Title = shop.shopName + "\n 地址:" + shop.detailAddr + "\n电话:" + shop.telphone, Description = shop.shopName + "分店信息", PicUrl = pUrl, Url = yuming + "/weixin/lbs/detailAddr.aspx?shopid=" + shop.id + "&x=" + requestMessage.Location_X + "&y=" + requestMessage.Location_Y + "&wid=" + apiid + "&openid=" + requestMessage.FromUserName }); } //最后一条信息 responseMessage.Articles.Add(new Article() { Title = "更多门店>>", Url = yuming + "/weixin/lbs/index.aspx?x=" + requestMessage.Location_X + "&y=" + requestMessage.Location_Y + "&wid=" + apiid + "&openid=" + requestMessage.FromUserName }); return(responseMessage); } }
public ActionResult OldPost(string signature, string timestamp, string nonce, string echostr) { LocationService locationService = new LocationService(); EventService eventService = new EventService(); if (!CheckSignature.Check(signature, timestamp, nonce, Token)) { return(Content("参数错误!")); } XDocument requestDoc = null; try { requestDoc = XDocument.Load(Request.Body); var requestMessage = RequestMessageFactory.GetRequestEntity(requestDoc); //如果不需要记录requestDoc,只需要: //var requestMessage = RequestMessageFactory.GetRequestEntity(Request.InputStream); requestDoc.Save(ServerUtility.ContentRootMapPath("~/App_Data/" + SystemTime.Now.Ticks + "_Request_" + requestMessage.FromUserName + ".txt"));//测试时可开启,帮助跟踪数据 ResponseMessageBase responseMessage = null; switch (requestMessage.MsgType) { case RequestMsgType.Text: //文字 { //TODO:交给Service处理具体信息,参考/Service/EventSercice.cs 及 /Service/LocationSercice.cs var strongRequestMessage = requestMessage as RequestMessageText; var strongresponseMessage = ResponseMessageBase.CreateFromRequestMessage <ResponseMessageText>(requestMessage); strongresponseMessage.Content = string.Format( "您刚才发送了文字信息:{0}\r\n您还可以发送【位置】【图片】【语音】等类型的信息,查看不同格式的回复。\r\nSDK官方地址:http://sdk.weixin.senparc.com", strongRequestMessage.Content); responseMessage = strongresponseMessage; break; } case RequestMsgType.Location: //位置 { responseMessage = locationService.GetResponseMessage(requestMessage as RequestMessageLocation); break; } case RequestMsgType.Image: //图片 { //TODO:交给Service处理具体信息 var strongRequestMessage = requestMessage as RequestMessageImage; var strongresponseMessage = ResponseMessageBase.CreateFromRequestMessage <ResponseMessageNews>(requestMessage); strongresponseMessage.Articles.Add(new Article() { Title = "您刚才发送了图片信息", Description = "您发送的图片将会显示在边上", PicUrl = strongRequestMessage.PicUrl, Url = "http://sdk.weixin.senparc.com" }); strongresponseMessage.Articles.Add(new Article() { Title = "第二条", Description = "第二条带连接的内容", PicUrl = strongRequestMessage.PicUrl, Url = "http://sdk.weixin.senparc.com" }); responseMessage = strongresponseMessage; break; } case RequestMsgType.Voice: //语音 { //TODO:交给Service处理具体信息 var strongRequestMessage = requestMessage as RequestMessageVoice; var strongresponseMessage = ResponseMessageBase.CreateFromRequestMessage <ResponseMessageMusic>(requestMessage); strongresponseMessage.Music.MusicUrl = "http://sdk.weixin.senparc.com/Content/music1.mp3"; responseMessage = strongresponseMessage; break; } case RequestMsgType.Event: //事件 { responseMessage = eventService.GetResponseMessage(requestMessage as RequestMessageEventBase); break; } default: throw new ArgumentOutOfRangeException(); } var responseDoc = Senparc.NeuChar.Helpers.EntityHelper.ConvertEntityToXml(responseMessage); responseDoc.Save(ServerUtility.ContentRootMapPath("~/App_Data/" + SystemTime.Now.Ticks + "_Response_" + responseMessage.ToUserName + ".txt"));//测试时可开启,帮助跟踪数据 return(Content(responseDoc.ToString())); //如果不需要记录responseDoc,只需要: //return Content(responseMessage.ConvertEntityToXmlString()); } catch (Exception ex) { using ( TextWriter tw = new StreamWriter(ServerUtility.ContentRootMapPath("~/App_Data/Error_" + SystemTime.Now.Ticks + ".txt"))) { tw.WriteLine(ex.Message); tw.WriteLine(ex.InnerException.Message); if (requestDoc != null) { tw.WriteLine(requestDoc.ToString()); } tw.Flush(); tw.Close(); } return(Content("")); } }
public async Task <string> Post([FromQuery] string signature, [FromQuery] string nonce, [FromQuery] string timestamp, CancellationToken ct) { var msgFromWX = this._helper.IsMessageFromWeiXin(signature, nonce, timestamp); if (!msgFromWX) { return(""); } this._logger.LogInformation("Msg from WeiXin Server received"); // As of 3.0, AllowSynchronousIO is disallowed by default // see https://github.com/dotnet/aspnetcore/issues/7644 XDocument doc = await XDocument.LoadAsync(Request.Body, new LoadOptions {}, ct); this._logger.LogInformation("Msg from WeiXin Server received is: \n" + doc.ToString()); var requestMessage = RequestMessageFactory.GetRequestEntity(doc); var userId = requestMessage.FromUserName.Trim(); var conversationInfo = await this.RetrieveConversationInfoAsync(userId); string respDoc = ""; switch (requestMessage.MsgType) { case RequestMsgType.Text: //文字类型 { var strongRequestMessage = requestMessage as RequestMessageText; var activity = new Activity { From = new ChannelAccount(userId), Text = strongRequestMessage.Content, Type = ActivityTypes.Message, }; var conversation = conversationInfo.DirectLineConversation; this._logger.LogDebug($"Sending Activity to DirectLine: conversationId={conversation.ConversationId}"); await this._directLineClient.SendActivityAsync(conversation.ConversationId, activity, conversation.Token) .ConfigureAwait(false); this._logger.LogDebug($"Receiving Activity from DirectLine: conversationId={conversation.ConversationId}"); var respActivities = await this._directLineClient.RetrieveActivitySetAsync(conversation.ConversationId, conversationInfo.Watermark, conversation.Token) .ConfigureAwait(false); this._logger.LogDebug($"Received Activity from DirectLine: Watermark={respActivities.Watermark}"); conversationInfo.Watermark = respActivities.Watermark.ToString(); var reply = String.Join( "\n\n", respActivities.Activities .Where(a => a?.Recipient?.Id == userId) // todo: where id == botId .Select(a => MessageToText(a)) ); this._logger.LogDebug($"Creating repsonse message to WeiXin"); var strongRespMessage = ResponseMessageBase.CreateFromRequestMessage <ResponseMessageText>(strongRequestMessage); strongRespMessage.Content = reply; respDoc = strongRespMessage.ConvertEntityToXmlString(); break; } case RequestMsgType.Location: //地理位置 break; case RequestMsgType.Image: //图片 break; case RequestMsgType.Voice: //语音 break; default: throw new ArgumentOutOfRangeException(); } this._logger.LogDebug($"Msg To WeiXin generated: ${respDoc.ToString()}"); return(respDoc); }
/// <summary> /// 处理链接消息请求 /// </summary> /// <param name="requestMessage"></param> /// <returns></returns> public override IResponseMessageBase OnLinkRequest(RequestMessageLink requestMessage) { var responseMessage = ResponseMessageBase.CreateFromRequestMessage <ResponseMessageText>(requestMessage); return(responseMessage); }