/// <summary> /// 微信退支付申请接口结果 /// </summary> /// <param name="xml">xml</param> /// <returns>微信退支付申请接口结果</returns> public static RefundPayResult ConvertToRefundPayResult(string xml) { RefundPayResult refundPayResult = new RefundPayResult(); XElement doc = XElement.Parse(xml); if (doc.Element("return_code").GetString() == "SUCCESS") { if (doc.Element("result_code").GetString() == "SUCCESS") { refundPayResult.IsSuccess = true; refundPayResult.TransactionId = doc.Element("transaction_id").GetString(); refundPayResult.OutTradeNo = doc.Element("out_trade_no").GetString(); refundPayResult.OutRefundNo = doc.Element("out_refund_no").GetString(); refundPayResult.RefundId = doc.Element("refund_id").GetString(); refundPayResult.RefundFee = doc.Element("refund_fee").GetInt(); } else { refundPayResult.IsSuccess = false; refundPayResult.Message = doc.Element("err_code_des").GetString(); } } else { refundPayResult.IsSuccess = false; refundPayResult.Message = doc.Element("return_msg").GetString(); } return(refundPayResult); }
public ServiceRequestResult RefundPay(RefundPay request, out RefundPayResult result) { return(ServiceRequest(EventNames.Pay_Refund, request, out result)); }
/// <summary> /// 退款信息 /// </summary> /// <param name="request">退款参数</param> /// <param name="config">配置</param> /// <returns>退款结果</returns> public static RefundPayResult RefundPay(RefundPayRequest request, Config config) { var result = new RefundPayResult(); var orderqueryResult = OrderQuery(new OrderQueryRequest { OutTradeNo = request.OutTradeNo, TransactionId = request.TransactionId }, config); if (orderqueryResult.TradeState == "SUCCESS" || orderqueryResult.TradeState == "REFUND") { if (request.RefundFee > orderqueryResult.TotalFee) { result.IsSuccess = false; result.Message = "退款金额大于总订单金额"; return(result); } else { // 转入退款的订单先去查询退款金额够不够 if (orderqueryResult.TradeState == "REFUND") { var refundQueryResult = RefundPayQuery(new RefundQueryRequest { OutTradeNo = request.OutTradeNo }, config); if (refundQueryResult.IsSuccess) { // 已退款金额 var oldRefundAmount = refundQueryResult.Details.Sum(item => item.RefundFee); if (request.RefundFee > orderqueryResult.TotalFee - oldRefundAmount) { result.IsSuccess = false; result.Message = "退款金额大于总订单金额"; return(result); } var refundOrder = refundQueryResult.Details.FirstOrDefault(item => item.OutRefundNo == request.OutRefundNo); if (refundOrder != null) { if (refundOrder.RefundStatus == "SUCCESS" || refundOrder.RefundStatus == "PROCESSING") { result.IsSuccess = true; result.TransactionId = orderqueryResult.TransactionId; result.OutTradeNo = request.OutTradeNo; result.OutRefundNo = request.OutRefundNo; result.RefundId = refundOrder.RefundId; result.RefundFee = refundOrder.RefundFee; return(result); } } } else { result.Message = "退款查询失败"; result.IsSuccess = false; return(result); } } request.TotalFee = orderqueryResult.TotalFee; var requestStr = TenpayUtil.GetRefundPayRequestXml(request, config); var response = HttpHelp.PostXmlToUrl(Config.RefundPayUrl, requestStr, config.GetRefundCert(), config.GetPid()); result = TenpayUtil.ConvertToRefundPayResult(response); } } else { result.IsSuccess = false; result.Message = orderqueryResult.Message; } return(result); }