//编辑美团日志 public string EditMTlog_Err(OrderCancelResponse response, Meituan_reqlog mlog, Agent_requestlog reqlog) { //对历史订单如果有返回300的,美团没有300值进行修改 if (response.code == 300) { response.code = 699; } string json = JsonConvert.SerializeObject(response); #region 把处理结果录入数据库 mlog.respstr = json; mlog.resptime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); mlog.code = response.code.ToString(); mlog.describe = response.describe; new Meituan_reqlogData().EditReqlog(mlog); #endregion #region 把处理结果录入分销接口通用日志表 if (reqlog != null) { reqlog.Errmsg = json; reqlog.Decode_returnstr = json; reqlog.Encode_returnstr = ""; reqlog.Return_time = DateTime.Now; new Agent_requestlogData().Editagent_reqlog(reqlog); } #endregion return(json); }
/// <summary> /// 取消订单 /// </summary> /// <param name="orderInfo"></param> private PageResult CancelOrder(OrderCancelRequest request, Tbl_OTABusiness business) { string orderId = request.Body.OrderInfo.OrderId; OrderCancelResponse result = new OrderCancelResponse { Head = HeadResult.V1 }; var validResult = _orderService.ValidDataForOrderCancelRequest(request, business.Id); if (!validResult.Status) { result.Head.Code = validResult.Code; result.Head.Describe = validResult.Message; return(PageDataResult.Data(result, business.Saltcode.ToString())); } var tbl_Order = _orderService.Get(orderId); var checkResult = _orderDetailService.CheckOrderDetailIsCanncel(orderId); if (!checkResult.Status) { result.Head.Code = checkResult.Code; result.Head.Describe = checkResult.Message; return(PageDataResult.Data(result, business.Saltcode.ToString())); } try { _orderService.BeginTran(); foreach (var row in checkResult.List) { //添加退款记录 var tbl_RefundDetail = _refundDetailService.Add(row); //更新订单详情的状态:为已退款 _orderDetailService.UpdateOrderDetailForRefund(row); //更新票的日售票数 _ticketService.UpdateTicketBySellCount(row); //添加日志 _saleLogService.Add(tbl_RefundDetail); } //退激活票时,同步删除验票表存在的数据 _ticketTestingService.Delete(tbl_Order.OrderNo); //提交事物 _orderService.CommitTran(); } catch { _orderService.RollbackTran(); result.Head.Code = "114012"; result.Head.Describe = "订单取消失败,系统出错"; return(PageDataResult.Data(result, business.Saltcode.ToString())); } result.Body = new FengjingSDK461.Model.Response.OrderCancelInfo { Message = "成功" }; result.Head.Code = "000000"; result.Head.Describe = "成功"; return(PageDataResult.Data(result, business.Saltcode.ToString())); }
public ReturnResult SimulationMTGetDeal(string url, OrderCancelRequestBody body) { ReturnResult result = new ReturnResult { IsSuccess = false, }; try { OrderCancelRequest requestData = new OrderCancelRequest { partnerId = agentinfo.mt_partnerId, body = body }; var responseStr = new MeiTuanInter(agentinfo.mt_partnerId, agentinfo.mt_secret, agentinfo.mt_client).DoRequest(url, JsonConvert.SerializeObject(requestData)); if (string.IsNullOrEmpty(responseStr)) { result.Message = "返回数据为空"; } else { OrderCancelResponse responseBody = (OrderCancelResponse)JsonConvert.DeserializeObject(responseStr, typeof(OrderCancelResponse)); if (responseBody.code == 200) { result.IsSuccess = true; result.Message = JsonConvert.SerializeObject(responseBody); } else { result.Message = responseBody.describe; } } } catch (Exception ex) { result.Message = "异常" + ex.Message; } return(result); }
protected void Page_Load(object sender, EventArgs e) { #region 记入日志表1 Meituan_reqlog string reqip = CommonFunc.GetRealIP(); Meituan_reqlog mlog = new Meituan_reqlog { id = 0, reqstr = _requestParam, subtime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), respstr = "", resptime = "", code = "", describe = "", req_type = "", sendip = reqip, stockagentcompanyid = 0 }; int logid = new Meituan_reqlogData().EditReqlog(mlog); mlog.id = logid; #endregion string date = System.Web.HttpContext.Current.Request.Headers.Get("Date"); string PartnerId = System.Web.HttpContext.Current.Request.Headers.Get("PartnerId"); string Authorization = System.Web.HttpContext.Current.Request.Headers.Get("Authorization"); string requestMethod = System.Web.HttpContext.Current.Request.HttpMethod; string URI = System.Web.HttpContext.Current.Request.CurrentExecutionFilePath; //authorization 形式: "MWS" + " " + client + ":" + sign; string mtSign = Authorization.Substring(Authorization.IndexOf(":") + 1); mlog.req_type = URI; agentinfo = new AgentCompanyData().GetAgentCompanyByMeituanPartnerId(PartnerId); #region 验证是否已经配置美团合作商信息 if (agentinfo == null) { var response = new OrderCancelResponse(); response.partnerId = int.Parse(PartnerId); response.code = 699; response.describe = "分销尚未配置美团合作商信息(合作商PartnerId:" + PartnerId + ")"; string json = JsonConvert.SerializeObject(response); //把处理结果录入日志 mlog.respstr = json; mlog.resptime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); mlog.code = response.code.ToString(); mlog.describe = response.describe; new Meituan_reqlogData().EditReqlog(mlog); LogHelper.RecordSelfLog("Error", "meituan", response.describe); Response.Write(json); return; } #endregion mlog.stockagentcompanyid = agentinfo.Id; #region 签名验证 string beforeSign = requestMethod + " " + URI + "\n" + date; string afterSign = new MeiTuanInter(agentinfo.mt_partnerId, agentinfo.mt_secret, agentinfo.mt_client).GetSign(beforeSign); //判断签名是否正确 if (afterSign != mtSign) { var response = new OrderCancelResponse(); response.partnerId = int.Parse(PartnerId); response.code = 669; response.describe = "签名验证失败"; string json = JsonConvert.SerializeObject(response); //把处理结果录入日志 mlog.respstr = json; mlog.resptime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); mlog.code = response.code.ToString(); mlog.describe = response.describe; new Meituan_reqlogData().EditReqlog(mlog); LogHelper.RecordSelfLog("Error", "meituan", "拉取产品 签名错误 mtSign-" + mtSign + " meSign-" + afterSign); Response.Write(json); return; } #endregion string actionResult = Getorderrefund(mlog); Response.Write(actionResult); }
private string Cancel_order(Agent_requestlog reqlog, OrderCancelRequestBody body, string organization, Meituan_reqlog mlog) { var response = new OrderCancelResponse(); response.partnerId = int.Parse(agentinfo.mt_partnerId); string mtorderid = body.orderId.ToString(); string order_num = body.partnerOrderId; string num = body.refundQuantity.ToString(); mlog.mtorderid = mtorderid; mlog.ordernum = order_num; #region 条件判断 if (order_num.ConvertTo <int>(0) == 0) { response.code = 699; response.describe = "订单号格式有误"; return(EditMTlog_Err(response, mlog, reqlog)); } if (num.ConvertTo <int>(0) == 0) { response.code = 606; response.describe = "退票张数格式有误"; return(EditMTlog_Err(response, mlog, reqlog)); } //判断订单是否是当前分销的订单 bool isselforder = new Agent_requestlogData().Getisselforder(organization, order_num); if (isselforder == false) { response.code = 699; response.describe = "订单并非此分销的订单"; return(EditMTlog_Err(response, mlog, reqlog)); } #endregion B2b_order morder = new B2bOrderData().GetOrderById(order_num.ConvertTo <int>(0)); if (morder != null) { if (morder.Pro_id > 0) { B2b_com_pro pro = new B2bComProData().GetProById(morder.Pro_id.ToString()); if (pro == null) { response.code = 607; response.describe = "产品不存在"; return(EditMTlog_Err(response, mlog, reqlog)); } else { if (pro.Source_type == 2)//产品来源:1.系统自动生成2.倒码产品 { response.code = 607; response.describe = "倒码产品不支持接口退票"; return(EditMTlog_Err(response, mlog, reqlog)); } else { //得到订单的验证方式:0(一码多验);1(一码一验), #region 一码多验 退票 按订单号退票,或者外部接口订单 if (morder.yanzheng_method == 0 || pro.Source_type == 3) { string data = OrderJsonData.QuitOrder(pro.Com_id, order_num.ConvertTo <int>(0), pro.Id, num.ConvertTo <int>(0), "分销外部接口退票"); XmlDocument retdoc = (XmlDocument)JsonConvert.DeserializeXmlNode("{\"root\":" + data + "}"); XmlElement retroot = retdoc.DocumentElement; string type = retroot.SelectSingleNode("type").InnerText; string msg = retroot.SelectSingleNode("msg").InnerText; if (type == "100")//取消订单成功 { response.code = 200; response.describe = "success"; response.body = new OrderCancelResponseBody { orderId = body.orderId, refundId = body.refundId, partnerOrderId = body.partnerOrderId, requestTime = reqlog.Request_time.ToString("yyyy-MM-dd HH:mm:ss"), responseTime = reqlog.Return_time.ToString("yyyy-MM-dd HH:mm:ss") }; reqlog.Ordernum = order_num; reqlog.Is_dealsuc = 1; return(EditMTlog_Err(response, mlog, reqlog)); } else//取消订单失败 { response.code = 606; response.describe = msg; return(EditMTlog_Err(response, mlog, reqlog)); } } #endregion #region 一码一验 ,或非接口产品 else { response.code = 604; response.describe = "订单验码方式不支持"; return(EditMTlog_Err(response, mlog, reqlog)); } #endregion } } } else { response.code = 699; response.describe = "订单中产品不存在"; return(EditMTlog_Err(response, mlog, reqlog)); } } else { response.code = 699; response.describe = "订单不存在"; return(EditMTlog_Err(response, mlog, reqlog)); } }
/// 订单退票 public string Getorderrefund(Meituan_reqlog mlog) { var response = new OrderCancelResponse(); response.partnerId = int.Parse(agentinfo.mt_partnerId); try { int organization = agentinfo.Id; #region 把分销商发送过来的请求记入数据库日志表2 agent_requestlog Agent_requestlog reqlog = new Agent_requestlog() { Id = 0, Organization = organization, Encode_requeststr = "", Decode_requeststr = _requestParam, Request_time = DateTime.Now, Encode_returnstr = "", Decode_returnstr = "", Return_time = DateTime.Parse("1970-01-01 00:00:00"), Errmsg = "", Request_type = "cancel_order", Req_seq = "", Ordernum = "", Is_dealsuc = 0, Is_second_receivereq = 0, Request_ip = CommonFunc.GetRealIP() }; int reqlogid = new Agent_requestlogData().Editagent_reqlog(reqlog); reqlog.Id = reqlogid; #endregion var data = JsonConvert.DeserializeObject <OrderCancelRequest>(_requestParam); if (data.body == null) { response.code = 699; response.describe = "数据解析失败"; return(EditMTlog_Err(response, mlog, reqlog)); } else { OrderCancelRequestBody body = data.body; string mtorderid = body.orderId.ToString(); string order_num = body.partnerOrderId; int num = body.refundQuantity; //日志表2 判断是否是二次发送相同的请求 int is_secondreq = new Agent_requestlogData().Is_secondreq(organization.ToString(), mtorderid, reqlog.Request_type); #region 把发送的请求类型,请求流水号,订单号,是否是二次发送相同的请求录入数据库 日志表2 reqlog.Req_seq = mtorderid; reqlog.Ordernum = order_num; reqlog.Is_second_receivereq = is_secondreq; new Agent_requestlogData().Editagent_reqlog(reqlog); #endregion #region 编辑日志表1 mlog.mtorderid = mtorderid; mlog.ordernum = order_num; mlog.issecond_req = is_secondreq; new Meituan_reqlogData().EditReqlog(mlog); #endregion if (is_secondreq == 1) { //获取处理成功的请求信息:如果没有则重新操作 Agent_requestlog suclog = new Agent_requestlogData().GetAgent_cancelorderlogByReq_seq(organization.ToString(), mtorderid, 1); if (suclog != null) { //return suclog.Decode_returnstr; response = (OrderCancelResponse)JsonConvert.DeserializeObject(suclog.Decode_returnstr, typeof(OrderCancelResponse)); reqlog.Is_dealsuc = 1; //reqlog.Ordernum = suclog.Ordernum; mlog.ordernum = suclog.Ordernum; return(EditMTlog_Err(response, mlog, reqlog)); } else { return(Cancel_order(reqlog, body, organization.ToString(), mlog)); } } else { return(Cancel_order(reqlog, body, organization.ToString(), mlog)); } } } catch (Exception ex) { response.code = 699; response.describe = "异常错误"; return(EditMTlog_Err(response, mlog, null)); } }
private void OnMessageReceived(WebSocketSession session, string m) { try { var client = ClientsCollection.Get(session); if (client == null) { return; } var r = JsonSerializeHelper.Deserialize <Message>(m); switch (r.MsgType) { case "RegistrationRequest": { if (client.IsLoggedIn) { session.Send(JsonSerializeHelper.Serialize(new ErrorResponse("Bad request"))); return; } var request = JsonSerializeHelper.Deserialize <RegistrationRequest>(m); var responseString = ""; if (string.IsNullOrEmpty(request.Login) || string.IsNullOrEmpty(request.Password)) { responseString = JsonSerializeHelper.Serialize(new ErrorResponse("Bad request")); } else if (DataProvider.IsUsernameExists(request.Login)) { responseString = JsonSerializeHelper.Serialize(new RegistrationResponse { ReqID = request.ReqID, Error = "Someone with this username already exists" }); } else { responseString = DataProvider.AddAccount(request.Login, request.Password, request.Email, request.Card) ? JsonSerializeHelper.Serialize(new RegistrationResponse { ReqID = request.ReqID }) : JsonSerializeHelper.Serialize(new RegistrationResponse { ReqID = request.ReqID, Error = "Undefined error" }); } session.Send(responseString); break; } case "LoginRequest": { if (client.IsLoggedIn) { session.Send(JsonSerializeHelper.Serialize(new ErrorResponse("User Already logged in to server"))); return; } var request = JsonSerializeHelper.Deserialize <LoginRequest>(m); var responseString = ""; if (DataProvider.ValidateUserCredentials(request.Login, request.Password)) { client.Username = request.Login; client.Password = request.Password; client.IsLoggedIn = true; client.AccountInfo = DataProvider.GetAccountInfo(client.Username); responseString = JsonSerializeHelper.Serialize(new LoginResponse { ReqID = request.ReqID }); _connectedUsers.Add(new UserSession() { UserName = client.Username , Session = session }); } else { responseString = JsonSerializeHelper.Serialize(new LoginResponse { ReqID = request.ReqID, Error = "Invalid credentials" }); } session.Send(responseString); break; } case "LogoutRequest": { var request = JsonSerializeHelper.Deserialize <LogoutRequest>(m); var responseString = client.IsLoggedIn ? JsonSerializeHelper.Serialize(new LogoutResponse { ReqID = request.ReqID }) : JsonSerializeHelper.Serialize(new ErrorResponse("No user session availble with server")); session.Send(responseString); session.Close(); break; } case "QuotesSubscribeRequest": { if (!client.IsLoggedIn) { session.Send(JsonSerializeHelper.Serialize(new ErrorResponse("Bad request"))); return; } var request = JsonSerializeHelper.Deserialize <QuotesSubscribeRequest>(m); ClientsCollection.Get(session).Subscriptions.AddQuote(request.Symbol.Name); break; } case "QuotesUnsubscribeRequest": { if (!client.IsLoggedIn) { session.Send(JsonSerializeHelper.Serialize(new ErrorResponse("Bad request"))); return; } var request = JsonSerializeHelper.Deserialize <QuotesUnsubscribeRequest>(m); ClientsCollection.Get(session).Subscriptions.RemoveQuote(request.Symbol.Name); break; } case "AccountInfoGetRequest": { if (!client.IsLoggedIn) { session.Send(JsonSerializeHelper.Serialize(new ErrorResponse("Bad request"))); return; } var request = JsonSerializeHelper.Deserialize <AccountInfoGetRequest>(m); var response = new AccountInfoGetResponse { ReqID = request.ReqID, AccountData = client.AccountInfo, }; session.Send(JsonSerializeHelper.Serialize(response)); break; } case "AccountInfoSubscribeRequest": { if (!client.IsLoggedIn) { session.Send(JsonSerializeHelper.Serialize(new ErrorResponse("Bad request"))); return; } var request = JsonSerializeHelper.Deserialize <AccountInfoSubscribeRequest>(m); ClientsCollection.Get(session).Subscriptions.AccountInfo = true; break; } case "AccountInfoUnsubscribeRequest": { if (!client.IsLoggedIn) { session.Send(JsonSerializeHelper.Serialize(new ErrorResponse("Bad request"))); return; } var request = JsonSerializeHelper.Deserialize <AccountInfoUnsubscribeRequest>(m); ClientsCollection.Get(session).Subscriptions.AccountInfo = false; break; } case "AssetsGetRequest": { if (!client.IsLoggedIn) { session.Send(JsonSerializeHelper.Serialize(new ErrorResponse("Bad request"))); return; } var request = JsonSerializeHelper.Deserialize <AssetsGetRequest>(m); var response = new AssetsGetResponse { ReqID = request.ReqID, Assets = DataProvider.GetAssets() }; session.Send(JsonSerializeHelper.Serialize(response)); break; } case "AssetsGetBySymbolRequest": { if (!client.IsLoggedIn) { session.Send(JsonSerializeHelper.Serialize(new ErrorResponse("Bad request"))); return; } var request = JsonSerializeHelper.Deserialize <AssetsGetBySymbolRequest>(m); var timestamp = (TimestampUtility.GetCurrentTimestamp() / 1000) + DataProvider.StopExpiryLimitinMinutes * 60; var asset = DataProvider.GetAssets(request.Symbol); Asset temp = new Asset(); if (asset != null) { temp.ID = asset.ID; temp.Symbol = asset.Symbol; temp.ExpiryTimeList = asset.ExpiryTimeList.Where(x => (x.ExpiryTimestamps / 1000) > timestamp) .Take(4) .ToList <ExpiryTime>(); } var response = new AssetsGetBySymbolResponse { ReqID = request.ReqID, Assets = temp }; session.Send(JsonSerializeHelper.Serialize(response)); break; } case "BarsSubscribeRequest": { if (!client.IsLoggedIn) { session.Send(JsonSerializeHelper.Serialize(new ErrorResponse("Bad request"))); return; } var request = JsonSerializeHelper.Deserialize <BarsSubscribeRequest>(m); ClientsCollection.Get(session).Subscriptions.AddBarSubscription(request.ID, request.Symbol.Name, request.Periodicity, request.Interval); break; } case "BarsUnsubscribeRequest": { if (!client.IsLoggedIn) { session.Send(JsonSerializeHelper.Serialize(new ErrorResponse("Bad request"))); return; } var request = JsonSerializeHelper.Deserialize <BarsUnsubscribeRequest>(m); ClientsCollection.Get(session).Subscriptions.RemoveBarSubscription(request.ID); break; } case "HistoryGetRequest": { if (!client.IsLoggedIn) { session.Send(JsonSerializeHelper.Serialize(new ErrorResponse("Bad request"))); return; } var request = JsonSerializeHelper.Deserialize <HistoryGetRequest>(m); var bars = request.BarsCount == 0 ? DataProvider.GetHistory(request.Symbol, request.Periodicity, request.Interval, request.StartTimestamp) : DataProvider.GetHistory(request.Symbol, request.Periodicity, request.Interval, request.BarsCount); var response = new HistoryGetResponse(request.ReqID, bars); session.Send(JsonSerializeHelper.Serialize(response)); break; } case "OrderPlaceRequest": { if (!client.IsLoggedIn) { session.Send(JsonSerializeHelper.Serialize(new ErrorResponse("Bad request"))); return; } var request = JsonSerializeHelper.Deserialize <OrderPlaceRequest>(m); string res = string.Empty; var asset = DataProvider.GetAssetById(request.OptionID); var valResult = DataProvider.ValidateOrder(client.AccountInfo, asset, request); if (!String.IsNullOrEmpty(valResult)) { var response = new OrderPlaceResponse { ReqID = request.ReqID, ClOrdID = request.ClOrdID, Error = valResult }; res = JsonSerializeHelper.Serialize(response); session.Send(res); } else { if (request.OptionType == Enums.OptionType.Express) { request.ExpiryTimestamp = DataProvider.GetCurrentTimestamp() + (request.ExpressExpiryInSeconds * 1000); } DateTime expiry = TimestampUtility.TimestampToDateTime(request.ExpiryTimestamp); var order = DataProvider.PlaceOrder(client.AccountInfo, asset, request); var response = new OrderPlaceResponse { ReqID = request.ReqID, ClOrdID = request.ClOrdID, SrvOrdID = order.ID, Expiry = expiry }; res = JsonSerializeHelper.Serialize(response); session.Send(res); sendSubcriptionNotification(session, client, order); } Logger.Log(client.Username, "OrderPlaceRequest", m, res, !String.IsNullOrEmpty(valResult)); break; } case "OrderCancelRequest": { if (!client.IsLoggedIn) { session.Send(JsonSerializeHelper.Serialize(new ErrorResponse("Bad request"))); return; } var request = JsonSerializeHelper.Deserialize <OrderCancelRequest>(m); var order = DataProvider.CancelOrder(client.AccountInfo, request.SrvOrdID); if (order == null) { var response = new OrderCancelResponse { ReqID = request.ReqID, SrvOrdID = request.SrvOrdID, Error = "Error" }; session.Send(JsonSerializeHelper.Serialize(response)); } else { var response = new OrderCancelResponse { ReqID = request.ReqID, SrvOrdID = request.SrvOrdID }; session.Send(JsonSerializeHelper.Serialize(response)); //if (ClientsCollection.Get(session).Subscriptions.OpenOrders) //{ // session.Send(JsonSerializeHelper.Serialize(new OpenOrdersSubscribeResponse // { // Orders = new List<Order> { order } // })); //} //if (ClientsCollection.Get(session).Subscriptions.OrderHistory) //{ // session.Send(JsonSerializeHelper.Serialize(new OrderHistorySubscribeResponse // { // Orders = new List<Order>{ order } // })); //} //if (ClientsCollection.Get(session).Subscriptions.AccountInfo) //{ // session.Send(JsonSerializeHelper.Serialize(new AccountInfoSubscribeResponse // { // AccountData = client.AccountInfo // })); //} sendSubcriptionNotification(session, client, order); } break; } case "OpenOrdersGetRequest": { if (!client.IsLoggedIn) { session.Send(JsonSerializeHelper.Serialize(new ErrorResponse("Bad request"))); return; } var request = JsonSerializeHelper.Deserialize <OpenOrdersGetRequest>(m); var response = new OpenOrdersGetResponse { ReqID = request.ReqID, Orders = DataProvider.GetOpenOrders(client.AccountInfo) }; session.Send(JsonSerializeHelper.Serialize(response)); break; } case "OpenOrdersSubscribeRequest": { if (!client.IsLoggedIn) { session.Send(JsonSerializeHelper.Serialize(new ErrorResponse("Bad request"))); return; } var request = JsonSerializeHelper.Deserialize <OpenOrdersSubscribeRequest>(m); ClientsCollection.Get(session).Subscriptions.OpenOrders = true; break; } case "OpenOrdersUnsubscribeRequest": { if (!client.IsLoggedIn) { session.Send(JsonSerializeHelper.Serialize(new ErrorResponse("Bad request"))); return; } var request = JsonSerializeHelper.Deserialize <OpenOrdersUnsubscribeRequest>(m); ClientsCollection.Get(session).Subscriptions.OpenOrders = false; break; } case "OrderHistoryGetRequest": { if (!client.IsLoggedIn) { session.Send(JsonSerializeHelper.Serialize(new ErrorResponse("Bad request"))); return; } var request = JsonSerializeHelper.Deserialize <OrderHistoryGetRequest>(m); var response = new OrderHistoryGetResponse { ReqID = request.ReqID, Orders = DataProvider.GetOrderHistory(client.AccountInfo) }; session.Send(JsonSerializeHelper.Serialize(response)); break; } case "OrderHistorySubscribeRequest": { if (!client.IsLoggedIn) { session.Send(JsonSerializeHelper.Serialize(new ErrorResponse("Bad request"))); return; } var request = JsonSerializeHelper.Deserialize <OrderHistorySubscribeRequest>(m); ClientsCollection.Get(session).Subscriptions.OrderHistory = true; break; } case "OrderHistoryUnsubscribeRequest": { if (!client.IsLoggedIn) { session.Send(JsonSerializeHelper.Serialize(new ErrorResponse("Bad request"))); return; } var request = JsonSerializeHelper.Deserialize <OrderHistoryUnsubscribeRequest>(m); ClientsCollection.Get(session).Subscriptions.OrderHistory = false; break; } default: { session.Send(JsonSerializeHelper.Serialize(new ErrorResponse("Bad request"))); break; } } } catch (Exception e) { session.Send(JsonSerializeHelper.Serialize(new ErrorResponse("Bad request : " + e.Message))); } }