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 }
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("无通知参数"); } }