Пример #1
0
        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();
            }
        }
Пример #2
0
    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("无通知参数");
        }
    }
Пример #3
0
        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("无通知参数");
            }
        }