Пример #1
0
        protected void BtnAlipay_Click(object sender, EventArgs e)
        {
            int     orderid  = Orderid.Text.Trim().ConvertTo <int>(0);
            decimal quit_fee = Quitfee.Text.Trim().ConvertTo <decimal>(0);


            //得到订单的支付信息
            B2b_pay mpay = new B2bPayData().GetSUCCESSPayById(orderid);

            if (mpay.Trade_status != "TRADE_SUCCESS")
            {
                string r = "{\"type\":1,\"msg\":\"订单支付没有成功,不可退款\"}";
                //Response.Write(r);
                lblresult.InnerText = r;
                return;
            }
            #region 支付宝退款
            B2b_finance_paytype model = new B2b_finance_paytypeData().GetFinancePayTypeByComid(mpay.comid);
            if (model == null)
            {
                string data2 = "{\"type\":1,\"msg\":\"支付宝设置信息不存在!\"}";
                //Response.Write(data2);
                lblresult.InnerText = data2;

                return;
            }
            lock (lockobj)
            {
                ////////////////////////////////////////////请求参数////////////////////////////////////////////
                int    nowbatch_num   = 0;  //退款笔数
                string nowdetail_data = ""; //退款详细数据


                nowbatch_num   = 1;
                nowdetail_data = mpay.Trade_no + "^" + quit_fee.ToString("F2") + "^" + "协商退款";//原付款支付宝交易号^退款总金额^退款理由

                //服务器异步通知页面路径
                string notify_url = "http://shop.etown.cn/ui/vasui/alipay/refund_notify_url.aspx";
                //需http://格式的完整路径,不允许加?id=123这类自定义参数

                //卖家支付宝帐户
                string seller_email = Config.Seller_email.ToString().Trim();
                //必填

                //退款当天日期
                string refund_date = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
                //必填,格式:年[4位]-月[2位]-日[2位] 小时[2位 24小时制]:分[2位]:秒[2位],如:2007-10-01 13:13:13

                //批次号
                string batch_no = DateTime.Now.ToString("yyyyMMddHHmmssfff");
                //必填,格式:当天日期[8位]+序列号[3至24位],如:201008010000001

                //退款笔数
                string batch_num = nowbatch_num.ToString();
                //必填,参数detail_data的值中,“#”字符出现的数量加1,最大支持1000笔(即“#”字符出现的数量999个)

                //退款详细数据
                string detail_data = nowdetail_data;
                //必填,具体格式请参见接口技术文档


                ////////////////////////////////////////////////////////////////////////////////////////////////

                //把请求参数打包成数组
                SortedDictionary <string, string> sParaTemp = new SortedDictionary <string, string>();
                sParaTemp.Add("partner", Config.Partner);
                sParaTemp.Add("_input_charset", Config.Input_charset.ToLower());
                sParaTemp.Add("service", "refund_fastpay_by_platform_pwd");
                sParaTemp.Add("notify_url", notify_url);
                sParaTemp.Add("seller_email", seller_email);
                sParaTemp.Add("refund_date", refund_date);
                sParaTemp.Add("batch_no", batch_no);
                sParaTemp.Add("batch_num", batch_num);
                sParaTemp.Add("detail_data", detail_data);

                B2b_pay_alipayrefundlog nowlog = new B2b_pay_alipayrefundlog
                {
                    id             = 0,
                    orderid        = orderid,
                    service        = "refund_fastpay_by_platform_pwd",
                    partner        = Config.Partner,
                    notify_url     = notify_url,
                    seller_email   = Config.Seller_email,
                    seller_user_id = Config.Partner,
                    refund_date    = DateTime.Parse(refund_date),
                    batch_no       = batch_no,
                    batch_num      = int.Parse(batch_num),
                    detail_data    = detail_data,
                    notify_time    = DateTime.Parse("1970-01-01"),
                    notify_type    = "",
                    notify_id      = "",
                    success_num    = 0,
                    result_details = "",
                    error_code     = "",
                    error_desc     = "",
                    refund_fee     = quit_fee
                };
                int ee = new B2b_pay_alipayrefundlogData().Editalipayrefundlog(nowlog);
                if (ee > 0)
                {
                    //建立请求
                    string sHtmlText = Submit.BuildRequest(sParaTemp, "get", "确认");
                    Response.Write(sHtmlText);
                    //lblresult.InnerText = sHtmlText;
                    return;
                }
                else
                {
                    //Response.Write("{\"type\":\"100\",\"msg\":\"退款操作完成(款项需手动退款).\"}");
                    lblresult.InnerText = "{\"type\":\"100\",\"msg\":\"退款操作完成(款项需手动退款).\"}";
                    return;
                }
            }
            #endregion
        }
Пример #2
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.Form["notify_id"], Request.Form["sign"]);

                if (verifyResult)//验证成功
                {
                    /////////////////////////////////////////////////////////////////////////////////////////////////////////////
                    //请在这里加上商户的业务逻辑程序代码


                    //——请根据您的业务逻辑来编写程序(以下代码仅作参考)——
                    //获取支付宝的通知返回参数,可参考技术文档中服务器异步通知参数列表

                    //批次号

                    string batch_no = Request.Form["batch_no"];

                    //批量退款数据中转账成功的笔数

                    string success_num = Request.Form["success_num"];

                    //批量退款数据中的详细信息
                    string result_details = Request.Form["result_details"];


                    //判断是否在商户网站中已经做过了这次通知返回的处理
                    //如果没有做过处理,那么执行商户的业务程序
                    //如果有做过处理,那么不执行商户的业务程序

                    string error_code = "";
                    string error_desc = "";

                    try
                    {
                        error_code = result_details.IndexOf("SUCCESS") > -1 ? "SUCCESS" : result_details;

                        string[] arr = error_code.Split('^');
                        foreach (string carr in arr)
                        {
                            if (carr != "")
                            {
                                if (carr.IndexOf("$") > -1)
                                {
                                    error_code = carr.Substring(0, carr.IndexOf("$"));
                                }
                            }
                        }

                        error_desc = EnumUtils.GetName((RefundErrocode)Enum.Parse(typeof(RefundErrocode), error_code, false));
                    }
                    catch (Exception ex)
                    {
                        error_desc = "获取枚举描述错误(" + ex.Message + ")";
                    }
                    string notify_id   = Request.Form["notify_id"];
                    string notify_type = Request.Form["notify_type"];
                    string notify_time = Request.Form["notify_time"];


                    int uprefundlog = new B2b_pay_alipayrefundlogData().Uprefundlog(batch_no, success_num, result_details, error_code, error_desc, notify_id, notify_type, notify_time);

                    if (error_code == "SUCCESS")
                    {
                        if (uprefundlog == 0)
                        {
                            TxtHelper.WriteFile("D:\\site\\b2betown\\ETS2.WebApp\\alipayrefund_severeerrLog.txt", "退款批次" + batch_no + ";支付宝已经退款,录入退款日志出错,抓紧处理,防止重复给客户退款");
                        }

                        //根据batch_no(退款批次)得到 退款日志
                        B2b_pay_alipayrefundlog malipayrefundlog = new B2b_pay_alipayrefundlogData().Getrefundlogbybatch_no(batch_no);
                        if (malipayrefundlog == null)
                        {
                            //加txt文档记录
                            TxtHelper.WriteFile("D:\\site\\b2betown\\ETS2.WebApp\\alipayrefund_severeerrLog.txt", "退款批次" + batch_no + ";支付宝已经退款,根据batch_no(退款批次)得到 退款日志出错,抓紧处理,防止重复给客户退款");
                        }
                        else
                        {
                            //退押金
                            if (malipayrefundlog.rentserver_refundlogid > 0)
                            {
                                //修改退押金日志表中 退押金状态
                                new B2b_Rentserver_RefundLogData().Upb2b_Rentserver_RefundLogState(malipayrefundlog.rentserver_refundlogid, 1);

                                //需要在易城给特定商户(钱支付到易城的)做一笔支出操作;
                                B2b_order a_orderinfo = new B2bOrderData().GetOrderById(malipayrefundlog.orderid);
                                B2b_pay   mpay        = new B2bPayData().GetSUCCESSPayById(malipayrefundlog.orderid);
                                string    proname     = new B2bComProData().GetProName(a_orderinfo.Pro_id);
                                var       company     = B2bCompanyData.GetCompany(a_orderinfo.Comid);

                                OrderJsonData.ZhichuFromYicheng(mpay, a_orderinfo, proname, company, malipayrefundlog.refund_fee);
                            }
                            //订单退款
                            else
                            {
                                B2b_order oldorder = new B2bOrderData().GetOrderById(malipayrefundlog.orderid);

                                if (oldorder != null)
                                {
                                    if (oldorder.Order_state == 17 || oldorder.Order_state == 18)
                                    {
                                        oldorder.Order_state    = (int)OrderStatus.QuitOrder;//订单退票
                                        oldorder.Ticketinfo     = oldorder.askquitfeereason + "-" + oldorder.askquitfeeexplain;
                                        oldorder.Backtickettime = DateTime.Now;
                                        oldorder.Ticket         = malipayrefundlog.refund_fee;

                                        new B2bOrderData().InsertOrUpdate(oldorder);
                                    }
                                }

                                string data2 = OrderJsonData.Upticket(oldorder);
                                data2 = "{\"root\":" + data2 + "}";
                                XmlDocument xxd2  = JsonConvert.DeserializeXmlNode(data2);
                                string      type2 = xxd2.SelectSingleNode("root/type").InnerText;
                                string      msg2  = xxd2.SelectSingleNode("root/msg").InnerText;


                                if (type2 == "100")
                                {
                                    //data2 = "{\"type\":100,\"msg\":\"退款成功,款项已自动退回给用户!\"}";
                                    Response.Write("success");  //请不要修改或删除
                                    return;
                                }
                                else
                                {
                                    TxtHelper.WriteFile("D:\\site\\b2betown\\ETS2.WebApp\\alipayrefund_severeerrLog.txt", oldorder.Id + "支付宝已经退款,可是出现严重意外错误(" + msg2 + "),抓紧处理,防止重复给客户退款");
                                    Response.Write("fail");  //请不要修改或删除
                                    return;
                                }
                            }
                        }
                    }
                    else
                    {
                        Response.Write("success");  //请不要修改或删除
                    }



                    //——请根据您的业务逻辑来编写程序(以上代码仅作参考)——

                    /////////////////////////////////////////////////////////////////////////////////////////////////////////////
                }
                else//验证失败
                {
                    Response.Write("fail");
                }
            }
            else
            {
                Response.Write("无通知参数");
            }
        }