static void Main(string[] args) { //create a new MSMQ implementation object IMessageQueue msmq = new MSMQ("QueueA"); //bind the implementation to the MessageQueueManager IMessageQueueManager mqm = new MessageQueueManager(msmq); //create a new message object Message m = new Message(); m.Label = "test"; m.Content = "this is test"; try { mqm.OpenConnection(); mqm.SendMessage(m); Message retrievedMessage = mqm.RetrieveMessage(); //send two more method the queue for MessageArrival event test later mqm.SendMessage(m); mqm.SendMessage(m); } finally { mqm.CloseConnection(); } //register the client with the message arrive mqm.RegisterMessageArrivalHanlder(new MessageArrivalHandler(RecieveMessage)); //create a new MQSeries implementation IMessageQueue mqseries = new MQSeries("QueueB"); //bind implementation object to the MessageQueueManager mqm = new MessageQueueManager(mqseries); try { mqm.OpenConnection(); mqm.SendMessage(m); Message retrievedMessage = mqm.RetrieveMessage(); } finally { mqm.CloseConnection(); } Console.ReadLine(); }
public void Process(HttpRequest request, HttpResponse response) { StringBuilder sbLog = new StringBuilder(); string result = "false"; try { sbLog.Append("Start================自动出票通知=====================================================\r\n"); sbLog.Append("时间:" + System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "\r\n"); sbLog.Append("内容:\r\n"); NameValueCollection nv = new NameValueCollection(); nv.Add(request.Form); nv.Add(request.QueryString); string ticketXML = string.Empty; string payXML = string.Empty; foreach (string key in nv.Keys) { sbLog.Append(key + "=" + nv[key] + "\r\n"); if (key == "ticketnoinfo") { ticketXML = nv[key]; } else if (key == "paymentinfo") { payXML = nv[key]; } } if (!string.IsNullOrEmpty(ticketXML)) { #region //B2B自动出票通知 B2BResponse b2BResponse = autoTicketService.SyncTicketCall(ticketXML); List <AutoTicketInfo> b2bList = b2BResponse.TicketNofityInfo.AutoTicketList; if (b2bList.Count > 0) { string orderId = b2BResponse.TicketNofityInfo.FlatformOrderId; Order order = orderRepository.FindAll(p => p.OrderId == orderId).FirstOrDefault(); if (order != null && order.OrderStatus != EnumOrderStatus.IssueAndCompleted) { Dictionary <string, string> ticketDict = new Dictionary <string, string>(); foreach (AutoTicketInfo item in b2bList) { if (!ticketDict.ContainsKey(item.PassengerName)) { ticketDict.Add(item.PassengerName, item.TicketNumber); } } var behavior = order.State.GetBehaviorByCode("TicketsIssue"); behavior.SetParame("ticketDict", ticketDict); behavior.SetParame("operatorName", "系统"); behavior.SetParame("platformCode", "系统"); behavior.SetParame("opratorSource", "通知"); behavior.SetParame("remark", order.Policy.PolicyType + "自动出票"); behavior.Execute(); unitOfWorkRepository.PersistUpdateOf(order); unitOfWork.Commit(); result = "true"; sbLog.Append("处理成功\r\n"); try { MessageQueueManager.SendMessage(orderId, 0); } catch (Exception e) { Logger.WriteLog(LogType.ERROR, string.Format("{0}:写入总表失败", order.OrderId), e); } } else { sbLog.AppendFormat("未找到订单号:{0}\r\n", orderId); } } else { sbLog.AppendFormat("{0}\r\n", b2BResponse.Remark); } #endregion } else if (!string.IsNullOrEmpty(payXML)) { //B2B自动支付通知 result = "true"; } } catch (Exception e) { sbLog.Append("异常信息:" + e.Message + e.StackTrace + "\r\n"); } finally { sbLog.Append("End=====================================================================\r\n\r\n"); new CommLog().WriteLog("B2BNotify", sbLog.ToString()); //回复数据 true false response.WriteLine(result); } }
public void Process(HttpRequest request, HttpResponse writer) { System.Threading.Thread.Sleep(2000); //日志 StringBuilder sbLog = new StringBuilder(); try { sbLog.Append("请求参数:\r\n"); NameValueCollection nv = new NameValueCollection(); nv.Add(request.Form); nv.Add(request.QueryString); foreach (string key in nv.Keys) { sbLog.Append(key + "=" + nv[key] + "\r\n"); } sbLog.Append("处理结果:"); bool rs = false; string PayWayDiscription = ""; EnumPayMethod?payMethod = null; string payWay = request.QueryString["payWay"]; // 充值方式 string bankCode = request.QueryString["bankCode"]; // 银行Code string orderId = request.QueryString["orderId"]; //订单编号 string payNo = request.QueryString["payNo"]; //交易号 string price = request.QueryString["price"]; //交易金额 string currentTime = request.QueryString["currentTime"]; string isRefund = request.QueryString["isRefund"]; //退款标志(0=支付1=退款) string signature = request.QueryString["signature"]; string remark = request.QueryString["remark"]; if (isRefund == "1" && remark.Contains("SaleOrderRefund_")) { /*退票单ID:SaleOrderRefund_xx * 退款单ID:orderID * price:退款金额 */ int saleorderid = remark.Split('_')[1].ToInt(); if (SaleOrderRefund(saleorderid, price, orderId)) { writer.WriteLine("success"); } return; } List <string> list = new List <string>(); list.Add(string.Format("payWay={0}", payWay)); list.Add(string.Format("bankCode={0}", bankCode)); list.Add(string.Format("orderId={0}", orderId)); list.Add(string.Format("payNo={0}", payNo)); list.Add(string.Format("price={0}", price)); list.Add(string.Format("currentTime={0}", currentTime)); list.Add(string.Format("isRefund={0}", isRefund)); list.Add(string.Format("remark={0}", remark.UrlEncode())); var newlist = list.OrderByDescending(p => p); string data = string.Join("&", newlist); string sign = data.Md5(); // AliPay = 20,ChinaPnrPay = 21,TenPay = 22,BillPay = 23 switch (payWay.ToLower()) { case "alipay": payMethod = EnumPayMethod.AliPay; PayWayDiscription = "支付宝"; break; //case "ChinaPnrPay": // payWay = 3; // PayWayDiscription = "汇付"; // break; case "tenpay": payMethod = EnumPayMethod.TenPay; PayWayDiscription = "财付通"; break; //case "BillPay": // payWay = 2; // PayWayDiscription = "快钱"; // break; case "internetbank": payMethod = EnumPayMethod.Bank; PayWayDiscription = "银行卡"; payWay = bankCode; break; } if (sign == signature) { var order = orderRepository.FindAll(p => p.OrderId == orderId).FirstOrDefault(); if (isRefund == "1")//退款 { //退款中的状态 修改成 退款结束 if (order.OrderStatus == EnumOrderStatus.RepelIssueRefunding || order.OrderStatus == EnumOrderStatus.WaitReimburseWithRepelIssue) { //修改为拒绝出票,订单完成 order.ChangeStatus(EnumOrderStatus.RepelIssueAndCompleted); order.WriteLog(new OrderLog() { OperationContent = "日志来源:通知,订单状态:" + order.OrderStatus.ToEnumDesc() + " 退款交易号:" + payNo + ",退款状态:退款完成,退款方式:" + PayWayDiscription, OperationDatetime = System.DateTime.Now, OperationPerson = remark, IsShowLog = true }); unitOfWorkRepository.PersistUpdateOf(order); unitOfWork.Commit(); sbLog.Append("退款处理\r\n"); } } else if (isRefund == "0")//支付 { if (order.OrderPay.PayStatus == EnumPayStatus.NoPay && (order.OrderStatus == EnumOrderStatus.NewOrder || order.OrderStatus == EnumOrderStatus.PaymentInWaiting) ) { if (payMethod.HasValue) { order.OrderPay.PayMethod = payMethod.Value; } //订单支付通知 order.PayToPaid(remark, order.OrderPay.PayMethod, payWay, payNo, "通知"); unitOfWorkRepository.PersistUpdateOf(order); unitOfWork.Commit(); //生成接口订单和代付 DomesticService domesticService = ObjectFactory.GetInstance <DomesticService>(); //支付宝通知回来自动出票 if (order.Policy.PolicySourceType != EnumPolicySourceType.Interface) { if (order.OrderPay.PayMethod != null && (order.OrderPay.PayMethod == EnumPayMethod.Bank || order.OrderPay.PayMethod == EnumPayMethod.Platform)) { domesticService.AutoIssue(order.OrderId, order.OrderPay.PayMethod.ToEnumDesc() + "支付", () => { try { MessageQueueManager.SendMessage(orderId, 0); } catch (Exception e) { Logger.WriteLog(LogType.ERROR, string.Format("{0}:写入总表失败", order.OrderId), e); } }); } } domesticService.CreatePlatformOrderAndPaid(order.OrderId, "系统", "支付通知"); } else if (order.OrderPay.PayStatus == EnumPayStatus.NoPay && order.OrderStatus == EnumOrderStatus.OrderCanceled) { order.OrderPay.PayStatus = EnumPayStatus.OK; order.OrderPay.PaySerialNumber = payNo; order.OrderPay.PayDateTime = DateTime.Now; order.OrderStatus = EnumOrderStatus.RepelIssueAndCompleted; order.WriteLog(new OrderLog { IsShowLog = true, OperationContent = "该订单已过支付时间,退回支付金额", OperationDatetime = DateTime.Now, OperationPerson = "系统" }); unitOfWorkRepository.PersistUpdateOf(order); unitOfWork.Commit(); MessageQueueManager.SendMessage(order.OrderId, 2); AutoRefund(order); } sbLog.Append("支付处理\r\n"); } else { sbLog.Append("未处理\r\n"); } writer.WriteLine("success"); } else { sbLog.Append("签名验证失败\r\n"); } } catch (Exception ex) { sbLog.Append(ex.Message + "\r\n"); } finally { //日志 WriteLog(sbLog.ToString(), request != null ? request.Url.ToString() : "异常"); } }
private bool SaleOrderRefund(int saleorderid, string money, string refundid) { var model = afterSaleOrderRepository.FindAll(p => p.Id == saleorderid).FirstOrDefault(); if (model == null) { WriteLog(string.Format("售后订单ID:{0}不存在", saleorderid), string.Empty); return(false); } if (model.ProcessStatus != EnumTfgProcessStatus.Refunding) { WriteLog(string.Format("当前订单状态不是可完成状态,订单ID:{0},当时订单状态{1}", saleorderid, model.ProcessStatus.ToEnumDesc()), string.Empty); return(false); } if (model is AnnulOrder || model is BounceOrder) { if (model is AnnulOrder) { AnnulOrder annulOrder = model as AnnulOrder; var list = annulOrder.BounceLines.ToList(); var bline = list.Where(p => p.ID == refundid).FirstOrDefault(); bline.RefundTime = DateTime.Now; bline.Status = EnumBoundRefundStatus.Refunded; if (list.All(p => p.Status == EnumBoundRefundStatus.Refunded)) { annulOrder.Passenger.ForEach(n => n.Status = EnumTfgPassengerStatus.AnnulTicketed); annulOrder.ProcessStatus = EnumTfgProcessStatus.Processed; annulOrder.CompletedTime = DateTime.Now; annulOrder.LockCurrentAccount = string.Empty; } } else if (model is BounceOrder) { BounceOrder bounceOrder = model as BounceOrder; var list = bounceOrder.BounceLines.ToList(); var bline = list.Where(p => p.ID == refundid).FirstOrDefault(); bline.RefundTime = DateTime.Now; bline.Status = EnumBoundRefundStatus.Refunded; if (list.All(p => p.Status == EnumBoundRefundStatus.Refunded)) { bounceOrder.Passenger.ForEach(n => n.Status = EnumTfgPassengerStatus.Refunded); bounceOrder.ProcessStatus = EnumTfgProcessStatus.Processed; bounceOrder.CompletedTime = DateTime.Now; bounceOrder.LockCurrentAccount = string.Empty; } } model.WriteLog(new OrderLog { IsShowLog = true, OperationContent = "订单退款完成,交易结束", OperationDatetime = DateTime.Now, OperationPerson = "系统" }); unitOfWorkRepository.PersistUpdateOf(model); unitOfWork.Commit(); if (model.ProcessStatus == EnumTfgProcessStatus.Processed) { MessageQueueManager.SendMessage(model.Id.ToString(), 1); } return(true); } WriteLog(string.Format("该订单不是退票单或者废票单"), string.Empty); return(false); }