예제 #1
0
 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;
 }
예제 #3
0
 /// <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);
 }
예제 #5
0
        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);
        }
예제 #6
0
 /// <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));
 }
예제 #7
0
 /// <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));
 }
예제 #8
0
 protected abstract void ProcessImpl(RequestMessageBase requestMessage, ResponseMessageBase responseMessage);
예제 #9
0
 /// <summary>
 /// ResponseMessageBase.CreateFromRequestMessage&lt;T&gt;(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));
 }
예제 #10
0
 /// <summary>
 /// ResponseMessageBase.CreateFromRequestMessage&lt;T&gt;(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));
 }
예제 #11
0
        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);
            }
        }
예제 #12
0
        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 ResponseReceivedEventArgs(ResponseMessageBase message)
 {
     this.Message = message;
 }
예제 #14
0
        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);
        }
예제 #15
0
        /// <summary>
        /// 处理链接消息请求
        /// </summary>
        /// <param name="requestMessage"></param>
        /// <returns></returns>
        public override IResponseMessageBase OnLinkRequest(RequestMessageLink requestMessage)
        {
            var responseMessage = ResponseMessageBase.CreateFromRequestMessage <ResponseMessageText>(requestMessage);

            return(responseMessage);
        }