protected void Page_Load(object sender, EventArgs e) { logger.Info("支付宝充值回调开始wap_notify_ordersurl"); logger.Info("开始解析参数"); Dictionary <string, string> sPara = GetRequestPost(); if (sPara.Count > 0)//判断是否有带返回参数 { //logger.Info("判断有带参数"); AlipayXmlNotify aliNotify = new AlipayXmlNotify(); var sign = Request.Form["sign"]; logger.InfoFormat("验证签名:{0}", sign); bool verifyResult = aliNotify.VerifyNotify(sPara, sign); if (verifyResult)//验证成功 { logger.Info("签名通过验证"); ///////////////////////////////////////////////////////////////////////////////////////////////////////////// //请在这里加上商户的业务逻辑程序代码 //——请根据您的业务逻辑来编写程序(以下代码仅作参考)—— //获取支付宝的通知返回参数,可参考技术文档中服务器异步通知参数列表 //解密(如果是RSA签名需要解密,如果是MD5签名则下面一行清注释掉) //sPara = aliNotify.Decrypt(sPara); //XML解析notify_data数据 try { XmlDocument xmlDoc = new XmlDocument(); string notify_data = sPara["notify_data"]; //logger.InfoFormat("notify_data:{0}", notify_data); xmlDoc.LoadXml(notify_data); //商户订单号 string out_trade_no = xmlDoc.SelectSingleNode("/notify/out_trade_no").InnerText; //支付宝交易号 string trade_no = xmlDoc.SelectSingleNode("/notify/trade_no").InnerText; //交易状态 string trade_status = xmlDoc.SelectSingleNode("/notify/trade_status").InnerText; logger.InfoFormat("out_trade_no:{0},trade_no:{1},trade_status:{2}", out_trade_no, trade_no, trade_status); if (trade_status == "TRADE_FINISHED" || trade_status == "TRADE_SUCCESS") { //判断该笔订单是否在商户网站中已经做过处理 //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序 //如果有做过处理,不执行商户的业务程序 //注意: //该种交易状态只在两种情况下出现 //1、开通了普通即时到账,买家付款成功后。 //2、开通了高级即时到账,从该笔交易成功时间算起,过了签约时的可退款时限(如:三个月以内可退款、一年以内可退款等)后。 if (Utility.IsNum(out_trade_no)) { var id = Convert.ToInt32(out_trade_no); var orders = OrdersHelper.GetOrders(id); if (orders != null && orders.Status < OrderStatus.Pay) { //添加 var user = AccountHelper.GetUser(orders.UserId); if (user == null) { logger.ErrorFormat("不存在用户Id={0}", orders.UserId); } else { var payMent = new Payment(); if (orders.Pid > 0) { PaymentHelper.GetPayment(orders.Pid); } var chargeLog = new ChargeLog(); chargeLog.UserId = orders.UserId; chargeLog.Money = -orders.TotalPrice; chargeLog.Pid = orders.Pid; chargeLog.SellerId = orders.SellerId; chargeLog.OrderId = orders.Id.ToString(); chargeLog.PayName = payMent.Id == 0 ? "账户余额" : payMent.Name; chargeLog.Status = RechargeStatus.Success; chargeLog.GidList = orders.GidList; chargeLog.NumList = orders.NumList; chargeLog.Num = orders.NumList.Sum(o => o); //记录消费记录 ChargeLogHelper.AddChargeLog(chargeLog); var setting = SystemHelper.GetMerchantExtend(chargeLog.SellerId); //积分获得 var log = new ExtcreditLog(); log.UserId = orders.UserId; log.SellerId = user.SellerId; log.SourceId = orders.Id; log.Extcredit = (int)(orders.TotalPrice * 1.0 / (setting != null ? setting.ConsumeIntegral : 0)); log.Type = ExtcreditSourceType.Consume; log.CreateTime = DateTime.Now; ExtcreditLogHelper.AddExtcreditLog(log); user.Integral += log.Extcredit; user.Concume(orders.TotalPrice, 1); //保存用户信息 AccountHelper.SaveAccount(user); //更新订单中商品的销量 GoodsHelper.UpdateGoodsSales(orders.GidList, orders.NumList); orders.Status = OrderStatus.Pay; OrdersHelper.SaveOrders(orders); logger.InfoFormat("订单付款成功;UserId={1},Money={0},OrdersId:{2},Status:{3}", orders.TotalPrice, orders.UserId, orders.Id, (int)orders.Status); } } else if (orders == null) { logger.ErrorFormat("不存在订单记录Id={0}", id); } else { logger.Error("该订单已处理过"); } } else { logger.Error("商户订单号不是int型"); } Response.Write("success"); //请不要修改或删除 } //else if (trade_status == "TRADE_SUCCESS") //{ // //判断该笔订单是否在商户网站中已经做过处理 // //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序 // //如果有做过处理,不执行商户的业务程序 // //注意: // //该种交易状态只在一种情况下出现——开通了高级即时到账,买家付款成功后。 // Response.Write("success"); //请不要修改或删除 //} else { if (Utility.IsNum(out_trade_no)) { var id = Convert.ToInt32(out_trade_no); var orders = OrdersHelper.GetOrders(id); if (orders != null) { logger.ErrorFormat("订单付款失败;UserId={1},Money={0}", orders.TotalPrice, orders.UserId); orders.Status = OrderStatus.Update; //关闭时才更改状态 if (trade_status == "TRADE_Close") { orders.Status = OrderStatus.Cancel; trade_status = "success";//返回success } OrdersHelper.SaveOrders(orders); } else { logger.ErrorFormat("订单付款失败,订单未找到Id:{0}", id); } } else { logger.ErrorFormat("订单付款失败,订单付款id不是int型;Id={0}", out_trade_no); } Response.Write(trade_status); } } catch (Exception exc) { logger.ErrorFormat("异常:{0})", exc.Message); Response.Write(exc.ToString()); } //——请根据您的业务逻辑来编写程序(以上代码仅作参考)—— ///////////////////////////////////////////////////////////////////////////////////////////////////////////// } else//验证失败 { logger.Info("签名验证失败"); Response.Write("fail"); } } else { logger.Info("无通知参数"); Response.Write("无通知参数"); } }