public override bool RefundOrder(IPayHistory order, out string message)
{
message = "";
if (string.IsNullOrEmpty(order.spBillno))
{
throw new Exception("支付宝订单号为空,请检查sp_billno");
}
////////////////////////////////////////////请求参数////////////////////////////////////////////
//服务器异步通知页面路径
string notify_url = refundNotifyUrl;
//需http://格式的完整路径,不允许加?id=123这类自定义参数
//退款批次号
string batch_no = DateTime.Now.ToString("yyyyMMdd") + order.OrderId.Substring(6, order.OrderId.Length - 6) + "C";
//必填,每进行一次即时到账批量退款,都需要提供一个批次号,必须保证唯一性
//退款请求时间
string refund_date = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss");
//必填,格式为:yyyy-MM-dd hh:mm:ss
//退款总笔数
string batch_num = "1";
//必填,即参数detail_data的值中,“#”字符出现的数量加1,最大支持1000笔(即“#”字符出现的最大数量999个)
//单笔数据集
string detail_data = order.spBillno + "^" + order.Amount + "^协商退款";
//必填,格式详见“4.3 单笔数据集参数说明”
//Log(detail_data);
////////////////////////////////////////////////////////////////////////////////////////////////
//把请求参数打包成数组
SortedDictionary<string, string> sParaTemp = new SortedDictionary<string, string>();
sParaTemp.Add("partner", partner);
sParaTemp.Add("_input_charset", _input_charset);
sParaTemp.Add("service", "refund_fastpay_by_platform_nopwd");
sParaTemp.Add("notify_url", notify_url);
sParaTemp.Add("batch_no", batch_no);
sParaTemp.Add("refund_date", refund_date);
sParaTemp.Add("batch_num", batch_num);
sParaTemp.Add("detail_data", detail_data);
//建立请求
string sHtmlText = AlipaySubmit.BuildRequest(sParaTemp);
//请在这里加上商户的业务逻辑程序代码
//——请根据您的业务逻辑来编写程序(以下代码仅作参考)——
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(sHtmlText);
Log(sHtmlText);
string status = xmlDoc.SelectSingleNode("/alipay/is_success").InnerText;
if (status == "F")
{
message = "退款失败:" + xmlDoc.SelectSingleNode("/alipay/error").InnerText;
return false;
}
else
{
if (status == "T")
{
message = "退款成功";
BaseRefundOrder(order);
return true;
}
else if (status == "P")
{
message = "退款处理中";
//退款通知会用及时到帐接口发过来
return true;
}
return false;
}
}