Files
juipnet/Services/Hncore.Pass.PaymentCenter/Pay/WeiFuTong/Refund/WeiFuTongRefundQueryResponse.cs
wanyongkang d318014316 初始提交
2020-10-07 20:25:03 +08:00

168 lines
5.4 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Xml;
using System.Xml.Serialization;
using Hncore.Infrastructure.Extension;
namespace Hncore.Pass.PaymentCenter.WeiFuTong.Refund
{
/// <summary>
/// 威富通退款查询响应
/// </summary>
[XmlRoot("xml", Namespace = "")]
public class WeiFuTongRefundQueryResponse : WeiFuTongResponseBase
{
/// <summary>
/// 平台交易号
/// </summary>
[XmlElement("transaction_id")]
public string TransactionId { get; set; }
/// <summary>
/// 商户系统内部的订单号
/// </summary>
[XmlElement("out_trade_no")]
public string OutTradeNo { get; set; }
/// <summary>
/// 退款记录数
/// </summary>
[XmlElement("refund_count")]
public int RefundCount { get; set; }
/// <summary>
/// 多笔退款详情
/// </summary>
public List<RefundQueryItem> RefundQueryItems { get; set; } = new List<RefundQueryItem>();
public WeiFuTongRefundQueryResponse ParseItemsFromXml(string xmlText)
{
if (RefundCount <= 0)
{
return this;
}
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.XmlResolver = null;
xmlDoc.LoadXml(xmlText);
XmlNode root = xmlDoc.SelectSingleNode("xml");
for (int i = 0; i < RefundCount; i++)
{
RefundQueryItems.Add(new RefundQueryItem()
{
OutRefundNo = root.SelectSingleNode("out_refund_no_" + i).InnerText,
RefundId = root.SelectSingleNode("refund_id_" + i).InnerText,
RefundChannel = root.SelectSingleNode("refund_channel_" + i).InnerText,
RefundFee = root.SelectSingleNode("refund_fee_" + i).InnerText.ToInt(),
RefundTime = root.SelectSingleNode("refund_time_" + i).InnerText,
RefundStatus = root.SelectSingleNode("refund_status_" + i).InnerText
});
}
return this;
}
/// <summary>
/// 是否是退款成功
/// </summary>
/// <returns></returns>
public bool IsRefundSuccess()
{
return !HasError()
&& RefundQueryItems.Any()
&& RefundQueryItems.First().RefundStatus == "SUCCESS";
}
/// <summary>
/// 是否是退款失败
/// </summary>
/// <returns></returns>
public bool IsRefundFail()
{
return !HasError()
&& RefundQueryItems.Any()
&& RefundQueryItems.First().RefundStatus == "FAIL";
}
/// <summary>
/// 是否是已撤销
/// </summary>
/// <returns></returns>
public bool IsCancel()
{
return RefundCount == 0
&& ErrCode == "REFUND_FAIL"
&& ErrMsg.Contains("已撤销");
}
/// <summary>
/// 退款不存在
/// </summary>
/// <returns></returns>
public bool IsNotExists()
{
return HasError() &&
(
ErrCode.ToLower().Contains("refund not exists")
|| ErrCode.ToLower().Contains("order not exists")
|| ErrMsg.Contains("退款不存在")
|| ErrMsg.Contains("订单不存在")
);
}
public DateTime GetRefundSuccessTime()
{
DateTime.TryParseExact(RefundQueryItems.First().RefundTime, "yyyyMMddHHmmss", null, DateTimeStyles.None,
out var paySuccessTime);
return paySuccessTime;
}
}
public class RefundQueryItem
{
/// <summary>
/// 商户退款单号
/// </summary>
[XmlElement("out_refund_no")]
public string OutRefundNo { get; set; }
/// <summary>
/// 平台退款单号
/// </summary>
[XmlElement("refund_id")]
public string RefundId { get; set; }
/// <summary>
/// 退款渠道 ORIGINAL—原路退款默认
/// </summary>
[XmlElement("refund_channel")]
public string RefundChannel { get; set; }
/// <summary>
/// 退款总金额,单位为分,可以做部分退款
/// </summary>
[XmlElement("refund_fee")]
public int RefundFee { get; set; }
/// <summary>
/// 退款时间 yyyyMMddHHmmss
/// </summary>
[XmlElement("refund_time")]
public string RefundTime { get; set; }
/// <summary>
/// SUCCESS—退款成功
/// FAIL—退款失败
/// PROCESSING—退款处理中
/// NOTSURE—未确定 需要商户原退款单号重新发起
/// CHANGE—转入代发退款到银行发现用户的卡作废或者冻结了导致原路退款银行卡失败资金回流到商户的现金帐号需要商户人工干预通过线下或者平台转账的方式进行退款。
/// </summary>
[XmlElement("refund_status")]
public string RefundStatus { get; set; }
}
}