public void ProcessNotify(WxPayConfig config, B2b_finance_paytype model) { WxPayData notifyData = new Notify(this).GetNotifyData(config); Log.Info(this.GetType().ToString(), "The Pay ResultXml:" + notifyData.ToXml(config)); //检查支付结果中transaction_id是否存在 if (!notifyData.IsSet("transaction_id")) { //若transaction_id不存在,则立即返回结果给微信支付后台 WxPayData res = new WxPayData(); res.SetValue("return_code", "FAIL"); res.SetValue("return_msg", "支付结果中微信订单号不存在"); Log.Error(this.GetType().ToString(), "The Pay result is error : " + res.ToXml(config), config); Response.Write(res.ToXml(config)); Response.End(); } string transaction_id = notifyData.GetValue("transaction_id").ToString(); string notify_id = "1"; string out_trade_no = notifyData.GetValue("out_trade_no").ToString(); string total_fee = notifyData.GetValue("total_fee").ToString(); //查询订单,判断订单真实性 if (!QueryOrder(transaction_id, config)) { //若订单查询失败,则立即返回结果给微信支付后台 WxPayData res = new WxPayData(); res.SetValue("return_code", "FAIL"); res.SetValue("return_msg", "订单查询失败"); Log.Error(this.GetType().ToString(), "Order query failure : " + res.ToXml(config), config); Response.Write(res.ToXml(config)); Response.End(); } //查询订单成功 else { //订单支付信息如果没有,则添加支付信息 B2b_pay modelb2pay = new B2bPayData().GetPayByoId(out_trade_no.ConvertTo <int>(0)); B2b_order modelb2border = new B2bOrderData().GetOrderById(out_trade_no.ConvertTo <int>(0)); string Pay_name = ""; string Pay_phone = ""; if (modelb2border != null) { Pay_name = modelb2border.U_name; Pay_phone = modelb2border.U_phone; } #region 订单提交支付信息 if (modelb2pay == null) { B2b_pay eticket = new B2b_pay() { Id = 0, Oid = out_trade_no.ConvertTo <int>(0), Pay_com = "wx", Pay_name = Pay_name, Pay_phone = Pay_phone, Total_fee = decimal.Parse(total_fee) / 100, Trade_no = "", Trade_status = "trade_pendpay", Uip = "", comid = model.Com_id }; int payid = new B2bPayData().InsertOrUpdate(eticket); } else { //对已完成支付的,再次提交支付,跳转到订单也或显示此订单已支付 if (modelb2pay.Trade_status != "TRADE_SUCCESS") { //防止金额有所改动 modelb2pay.comid = model.Com_id; modelb2pay.Pay_com = "wx"; modelb2pay.Total_fee = decimal.Parse(total_fee) / 100; new B2bPayData().InsertOrUpdate(modelb2pay); } } #endregion //------------------------------ //处理业务开始 //------------------------------ string retunstr = new PayReturnSendEticketData().PayReturnSendEticket(notify_id, int.Parse(out_trade_no), decimal.Parse(total_fee) / 100, "TRADE_SUCCESS", transaction_id); //对分销充值订单支付返回,对绑定订单进行处理确认 var handdata = OrderJsonData.agentorderpay_Hand(int.Parse(out_trade_no)); // 赠送保险 OrderJsonData.ZengsongBaoxian(int.Parse(out_trade_no)); //给财付通系统发送成功信息,财付通系统收到此结果后不再进行后续通知 WxPayData res = new WxPayData(); res.SetValue("return_code", "SUCCESS"); res.SetValue("return_msg", "OK"); Log.Info(this.GetType().ToString(), "order query success : " + res.ToXml(config), config); Response.Write(res.ToXml(config)); Response.End(); } }
protected void Page_Load(object sender, EventArgs e) { Dictionary <string, string> sPara = GetRequestPost(); if (sPara.Count > 0)//判断是否有带返回参数 { Notify aliNotify = new Notify(); bool verifyResult = aliNotify.VerifyNotify(sPara, Request.Form["sign"]); if (verifyResult)//验证成功 { //XML解析notify_data数据 try { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.LoadXml(sPara["notify_data"]); //商户订单号 string order_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; decimal total_fee = decimal.Parse(xmlDoc.SelectSingleNode("/notify/total_fee").InnerText); if (trade_status == "TRADE_FINISHED" || trade_status == "TRADE_SUCCESS") { //判断该笔订单是否在商户网站中已经做过处理 //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序 //如果有做过处理,不执行商户的业务程序 //注意: //该种交易状态只在两种情况下出现 //1、开通了普通即时到账,买家付款成功后。 //2、开通了高级即时到账,从该笔交易成功时间算起,过了签约时的可退款时限(如:三个月以内可退款、一年以内可退款等)后。 //B2bPayData datapay = new B2bPayData(); //B2b_pay modelb2pay = datapay.GetPayByoId(Int32.Parse(order_no)); //if (modelb2pay != null) //{ // total_fee = modelb2pay.Total_fee; //} string retunstr = new PayReturnSendEticketData().PayReturnSendEticket(trade_no, Int32.Parse(order_no), total_fee, trade_status); Response.Write("success"); //请不要修改或删除 #region 赠送保险 OrderJsonData.ZengsongBaoxian(Int32.Parse(order_no)); #endregion } else { Response.Write(trade_status); } } catch (Exception exc) { Response.Write(exc.ToString()); } //——请根据您的业务逻辑来编写程序(以上代码仅作参考)—— ///////////////////////////////////////////////////////////////////////////////////////////////////////////// } else//验证失败 { Response.Write("fail"); } } else { Response.Write("无通知参数"); } }
protected void Page_Load(object sender, EventArgs e) { SortedDictionary <string, string> sPara = GetRequestPost(); if (sPara.Count > 0)//判断是否有带返回参数 { Notify aliNotify = new Notify(); bool verifyResult = aliNotify.Verify(sPara, Request["notify_id"], Request["sign"]); if (verifyResult)//验证成功 { ///////////////////////////////////////////////////////////////////////////////////////////////////////////// //请在这里加上商户的业务逻辑程序代码 //——请根据您的业务逻辑来编写程序(以下代码仅作参考)—— //获取支付宝的通知返回参数,可参考技术文档中服务器异步通知参数列表 string trade_no = Request["trade_no"]; //支付宝交易号 int order_no = Int32.Parse(Request["out_trade_no"]); //获取订单号 decimal total_fee = decimal.Parse(Request["total_fee"]); //获取总金额 string subject = Request["subject"]; //商品名称、订单名称 string body = Request.Form["body"]; //商品描述、订单备注、描述 string buyer_email = Request["buyer_email"]; //买家支付宝账号 string trade_status = Request["trade_status"]; //交易状态 if (trade_status == "TRADE_FINISHED" || trade_status == "TRADE_SUCCESS") { //判断该笔订单是否在商户网站中已经做过处理 //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序 //如果有做过处理,不执行商户的业务程序 #region //查询支付,并修改为支付成功 //B2bPayData datapay = new B2bPayData(); //B2b_pay modelb2pay = datapay.GetPayByoId(order_no); //if (modelb2pay.Trade_status != "TRADE_SUCCESS")//判断原状态是否为不成功 //{ // if (modelb2pay.Total_fee == total_fee)//判断支付金额是否相同 // { // //B2b_pay payinfo = new B2b_pay() // //{ // // Id = modelb2pay.Id, // // Trade_no = trade_no, // // Trade_status = "TRADE_SUCCESS", // //}; // modelb2pay.Trade_no = trade_no; // modelb2pay.Trade_status = "TRADE_SUCCESS"; // int payid = datapay.InsertOrUpdate(modelb2pay);//修改支付状态 // //根据订单id得到订单信息 // B2bOrderData dataorder = new B2bOrderData(); // B2b_order modelb2border = dataorder.GetOrderById(order_no); // //---------------新增1begin--------------// // modelb2border.Pay_state = (int)PayStatus.HasPay; // modelb2border.Order_state = (int)OrderStatus.HasPay; // //修改此订单的支付状态为“支付成功” ,订单状态为“已付款” // dataorder.InsertOrUpdate(modelb2border); // //---------------新增1end--------------// // //根据产品id得到产品信息 // B2bComProData datapro = new B2bComProData(); // B2b_com_pro modelcompro = datapro.GetProById(modelb2border.Pro_id.ToString()); // //得到商家信息,账户余额 // B2b_company modelcom = B2bCompanyData.GetCompany(modelcompro.Com_id); // decimal Over_money = modelcom.Imprest + total_fee; // //得到支付方式,如果是支付到自己的支付宝账户则需要增加退出记录 // B2bFinanceData datefin = new B2bFinanceData(); // B2b_Finance modelfin = datefin.FinancePayType(modelcompro.Com_id); // int Paytype_int = 1;//支付款到 易城=1 支付到自己=2 // if (modelfin != null) // { // Paytype_int = modelfin.Paytype; // } // //增加财务记录 // B2bFinanceData Financed = new B2bFinanceData(); // B2b_Finance Financeinfo = new B2b_Finance() // { // Id = 0, // Com_id = modelcompro.Com_id, // Agent_id = 0, //分销编号(默认为0) // Eid = 0, //易城账户(默认为0,0=没有交易,1=和易城交易) // Order_id = modelcompro.Id, //订单号(默认为0) // Servicesname = modelcompro.Pro_name, //交易名称/内容 // SerialNumber = DateTime.Now.ToString("yyyyMMddhhmmssfff"), //财务流水号 // Money = total_fee, //金额 // Payment = 0, //收支(0=收款,1=支出) // Payment_type = "直销收款", //类型(充值,商家提现,直销收款,消费(验票),商家退款,直销退票,手续费,商家返点) // Money_come = "支付宝", //资金来源(网上支付,银行收款等) // Over_money = Over_money, //余额(根据商家,分销,易城,编号显示相应余额) // Paytype = Paytype_int // }; // int finaceid = Financed.InsertOrUpdate(Financeinfo); // //如果是支付到商户的支付宝则增加一笔支出操作与上面做平 // if (Paytype_int == 2) // { // B2b_Finance Financebackinfo = new B2b_Finance() // { // Id = 0, // Com_id = modelcompro.Com_id, // Agent_id = 0, //分销编号(默认为0) // Eid = 0, //易城账户(默认为0,0=没有交易,1=和易城交易) // Order_id = modelcompro.Id, //订单号(默认为0) // Servicesname = modelcompro.Pro_name, //交易名称/内容 // SerialNumber = DateTime.Now.ToString("yyyyMMddhhmmssfff"), //财务流水号 // Money = 0 - total_fee, //金额 // Payment = 1, //收支(0=收款,1=支出) // Payment_type = "提现-商家支付宝", //类型(充值,商家提现,直销收款,消费(验票),商家退款,直销退票,手续费,商家返点) // Money_come = "支付宝", //资金来源(网上支付,银行收款等) // Over_money = Over_money - total_fee //余额(根据商家,分销,易城,编号显示相应余额) // }; // int finacebackid = Financed.InsertOrUpdate(Financebackinfo); // } // //---------------------------生成电子票并发送------------------------------- // //如果订单“已付款”则执行发码操作,否则跳过 // if ((int)modelb2border.Order_state == (int)OrderStatus.HasPay) // { // //生成电子码 // int u_num = modelb2border.U_num; // int comid = modelcompro.Com_id; // RandomCodeData datarandomcode = new RandomCodeData(); // RandomCode modelrandomcode = datarandomcode.GetRandomCode();//得到未用随机码对象 // //设置取出的电子码状态为1(已使用) // modelrandomcode.State = 1; // int randomcodeid = datarandomcode.InsertOrUpdate(modelrandomcode); // string eticketcode = "9" + comid.ToString() + modelrandomcode.Code.ToString(); // string sendstr = ""; // //录入电子票列表 // B2bEticketData eticketdata = new B2bEticketData(); // B2b_eticket eticket = new B2b_eticket() // { // Id = 0, // Com_id = comid, // Pro_id = modelcompro.Id, // Agent_id = 0,//直销 // Pno = eticketcode, // E_type = (int)EticketCodeType.ShuZiMa, // Pnum = modelb2border.U_num, // Use_pnum = modelb2border.U_num, // E_proname = modelcompro.Pro_name, // E_face_price = modelcompro.Face_price, // E_sale_price = modelcompro.Advise_price, // E_cost_price = modelcompro.Agentsettle_price, // V_state = (int)EticketCodeStatus.NotValidate, // Send_state = (int)EticketCodeSendStatus.NotSend, // Subdate = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")) // }; // int eticketid = eticketdata.InsertOrUpdate(eticket); // if (eticketid > 0) // { // //生成电子码短信,稍后可单独写类或写到数据库中 // //diveticketcode.InnerText = "电子码生成成功:" + eticketcode; // sendstr = "感谢您订购" + modelcompro.Pro_name + modelb2border.U_num + "张" + ",电子码:" + eticketcode + " 有效期至:" + modelcompro.Pro_end.ToString("yyyy-MM-dd") + "二维码:http://" + RequestUrl + "/qr.ashx?p=" + eticketcode + "【微旅行】"; // //电子票发送日志表,创建发送记录 // B2bEticketSendLogData eticketsnedlog = new B2bEticketSendLogData(); // B2b_eticket_send_log eticketlog = new B2b_eticket_send_log() // { // Id = 0, // Eticket_id = eticketid, // Pnotext = sendstr, // Phone = modelb2border.U_phone, // Sendstate = 0, // Sendtype = 1, // Senddate = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")) // }; // int insertsendEticketid = eticketsnedlog.InsertOrUpdate(eticketlog); // //发送电子码 // string msg = ""; // int sendstate = 0;//发送状态 1=成功,2=失败 0=未发送 // int sendback = SendSmsHelper.SendSms(modelb2border.U_phone, sendstr, out msg); // if (sendback > 0) // { // //labelmsg.InnerText = "发送成功" + sendback; // sendstate = 1; // //修改电子票发送日志表的发码状态为成功 // B2b_eticket_send_log eticketlogup = new B2b_eticket_send_log() // { // Id = insertsendEticketid, // Sendstate = 1, // Senddate = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")) // }; // int upsendEticket = eticketsnedlog.InsertOrUpdate(eticketlogup); // //-----------------新增2 begin-------------------------// // modelb2border.Send_state = (int)SendCodeStatus.HasSend; // modelb2border.Order_state = (int)OrderStatus.HasSendCode; // modelb2border.Ticketcode = eticketid; // //修改订单中发码状态为“已发码”,订单状态为"已发码",电子码id输入 // dataorder.InsertOrUpdate(modelb2border); // //------------------新增2 end---------------------------// // } // else // { // //labelmsg.InnerText = "发送错误" + msg; // sendstate = 2; // } // //记录短信日志表 // B2bSmsMobileSendDate smsmobilelog = new B2bSmsMobileSendDate(); // B2b_smsmobilesend smslog = new B2b_smsmobilesend() // { // Mobile = modelb2border.U_phone, // Content = sendstr, // Flag = sendstate, // Text = msg, // Delaysendtime = "", // Realsendtime = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), // Smsid = sendback, // Sendeticketid = insertsendEticketid // }; // int insertsendmobileid = smsmobilelog.InsertOrUpdate(smslog); // } // else // { // //diveticketcode.InnerText = "电子码生成ERROR"; // } // } // } //} #endregion string retunstr = new PayReturnSendEticketData().PayReturnSendEticket(trade_no, order_no, total_fee, trade_status); //对分销充值订单支付返回,对绑定订单进行处理确认 var handdata = OrderJsonData.agentorderpay_Hand(order_no); } //——请根据您的业务逻辑来编写程序(以上代码仅作参考)—— Response.Write("success"); //请不要修改或删除 #region 赠送保险 OrderJsonData.ZengsongBaoxian(order_no); #endregion ///////////////////////////////////////////////////////////////////////////////////////////////////////////// } else//验证失败 { Response.Write("fail"); } } else { Response.Write("无通知参数"); } }