Пример #1
0
 public ActionResult Monitor()
 {
     if (Request.InputStream.Length > 0)
     {
         string xml = string.Empty;
         using (StreamReader reader = new StreamReader(Request.InputStream))
         {
             xml = reader.ReadToEnd();
         }
         WeiXinPayRequestXML request = XmlOperator.Derialize <WeiXinPayRequestXML>(xml);
         if (request.result_code.ToUpper() != "SUCCESS")
         {
             return(Content(""));
         }
         int    splitIndex = request.out_trade_no.IndexOf("_");
         string orderID    = request.out_trade_no;
         if (splitIndex > 0)
         {
             orderID = request.out_trade_no.Substring(0, splitIndex);
         }
         string where = string.Format("OrderID='{0}'", orderID);
         IList <Model.TD_Order_WeiXinPay> payList = weiXinPayBLL.GetList(where, "PayTime desc", null);
         int count = payList.Count((model) => { return(model.Status == 1); });
         if (count > 0)
         {
             return(PayOK());
         }
         var config = WeiXinConfig.GetConfig();
         count = payList.Count((model) => {
             if (model.OrderID == orderID &&
                 model.NonceStr == request.nonce_str &&
                 config.AppID == request.appid &&
                 config.ShopID == request.mch_id)
             {
                 return(true);
             }
             return(false);
         });
         if (count > 0)
         {
             Model.TD_Order_WeiXinPay pay = new Model.TD_Order_WeiXinPay();
             pay.OrderID       = orderID;
             pay.NonceStr      = request.nonce_str;
             pay.WeiXinOrderID = request.transaction_id;
             pay.OrderFee      = request.total_fee;
             pay.CashFee       = request.cash_fee;
             pay.Status        = 1;
             pay.CallBackTime  = DateTime.ParseExact(request.time_end, "yyyyMMddHHmmss", System.Globalization.CultureInfo.CurrentCulture);
             int result = weiXinPayBLL.Sync(pay, orderID);
             if (result > 0)
             {
                 return(PayOK());
             }
             else
             {
                 return(PayFail());
             }
         }
         else
         {
             return(PayFail());
         }
     }
     return(Content(""));
 }