初始提交

This commit is contained in:
wanyongkang
2020-10-07 20:25:03 +08:00
commit d318014316
3809 changed files with 263103 additions and 0 deletions

View File

@@ -0,0 +1,45 @@
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using Hncore.Infrastructure.Common;
using Hncore.Infrastructure.Serializer;
using Hncore.Pass.PaymentCenter.WeiFuTong.AliJsPay;
namespace Hncore.Pass.PaymentCenter.WeiFuTong.ClientExtension
{
public static class AliJsPay
{
/// <summary>
/// 支付宝支付窗支付下单
/// </summary>
/// <param name="weiFuTongClient"></param>
/// <param name="request"></param>
/// <returns></returns>
public static async Task<AliJsPayResponse> AliJsPayCreateOrderAsync(this WeiFuTongClient weiFuTongClient
, AliJsPayRequest request)
{
StringBuilder log = new StringBuilder();
var body = request.ToXml();
log.Append("请求:\r\n" + body);
var response = await weiFuTongClient.CreateHttpClient()
.PostAsync(request.PaymentChannel.GetUrl(), new StringContent(body));
var resText = await response.Content.ReadAsStringAsync();
log.Append("\r\n响应" + resText);
LogHelper.Trace($"威富通-支付宝支付窗支付下单", log.ToString());
Util.CheckSignFromXml(resText, request.MchInfo);
var res = XML.XmlDeserialize<AliJsPayResponse>(resText);
res.HandleError();
return res;
}
}
}

View File

@@ -0,0 +1,56 @@
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using Hncore.Infrastructure.Common;
using Hncore.Infrastructure.Serializer;
using Hncore.Pass.PaymentCenter.WeiFuTong.QrPay;
namespace Hncore.Pass.PaymentCenter.WeiFuTong.ClientExtension
{
public static class QrPay
{
/// <summary>
/// 扫码支付下单
/// </summary>
/// <param name="weiFuTongClient"></param>
/// <param name="request"></param>
/// <returns></returns>
public static async Task<QrPayCreateOrderResponse> QrPayCreateOrderAsync(this WeiFuTongClient weiFuTongClient
, QrPayCreateOrderRequest request)
{
StringBuilder log = new StringBuilder();
var body = request.ToXml();
log.Append("请求:\r\n" + body);
var response = await weiFuTongClient.CreateHttpClient()
.PostAsync(request.PaymentChannel.GetUrl(), new StringContent(body));
var resText = await response.Content.ReadAsStringAsync();
log.Append("\r\n响应" + resText);
string target = "";
if (request.Service == "pay.weixin.native")
{
target = "微信";
}
else if (request.Service == "pay.alipay.native")
{
target = "支付宝";
}
LogHelper.Trace($"威富通-{target}扫码支付下单", log.ToString());
Util.CheckSignFromXml(resText, request.MchInfo);
var res = XML.XmlDeserialize<QrPayCreateOrderResponse>(resText);
res.HandleError();
return res;
}
}
}

View File

@@ -0,0 +1,49 @@
using System.Net;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using Hncore.Infrastructure.Common;
using Hncore.Infrastructure.Data;
using Hncore.Infrastructure.Serializer;
using Hncore.Pass.PaymentCenter.WeiFuTong.QueryOrder;
using Hncore.Pass.PaymentCenter.WeiFuTong.SwipeCard;
namespace Hncore.Pass.PaymentCenter.WeiFuTong.ClientExtension
{
public static class QueryOrderExt
{
/// <summary>
/// 支付订单查询
/// </summary>
/// <param name="weiFuTongClient"></param>
/// <param name="request"></param>
/// <returns></returns>
public static async Task<WeiFuTongQueryOrderResponse> QueryOrderAsync(this WeiFuTongClient weiFuTongClient
, WeiFuTongQueryOrderRequest request)
{
StringBuilder log = new StringBuilder();
var body = request.ToXml();
log.Append("请求:\r\n" + body);
var response = await weiFuTongClient.CreateHttpClient()
.PostAsync(request.PaymentChannel.GetUrl(), new StringContent(body));
var resText = await response.Content.ReadAsStringAsync();
log.Append("\r\n响应" + resText);
//LogHelper.Trace("威富通支付订单查询", log.ToString());
if (response.StatusCode != HttpStatusCode.OK)
{
throw new HttpException(response.StatusCode) {Content = resText};
}
Util.CheckSignFromXml(resText, request.MchInfo);
return XML.XmlDeserialize<WeiFuTongQueryOrderResponse>(resText);
}
}
}

View File

@@ -0,0 +1,81 @@
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using Hncore.Infrastructure.Common;
using Hncore.Infrastructure.Serializer;
using Hncore.Pass.PaymentCenter.WeiFuTong.Refund;
namespace Hncore.Pass.PaymentCenter.WeiFuTong.ClientExtension
{
public static class RefundExt
{
/// <summary>
/// 退款请求
/// </summary>
/// <param name="weiFuTongClient"></param>
/// <param name="request"></param>
/// <returns></returns>
public static async Task<WeiFuTongRefundResponse> RefundAsync(this WeiFuTongClient weiFuTongClient,
WeiFuTongRefundRequest request)
{
StringBuilder log = new StringBuilder();
var body = request.ToXml();
log.Append("请求:\r\n" + body);
var response = await weiFuTongClient.CreateHttpClient()
.PostAsync(request.PaymentChannel.GetUrl(), new StringContent(body));
var resText = await response.Content.ReadAsStringAsync();
log.Append("\r\n响应" + resText);
LogHelper.Trace($"威富通发起退款", log.ToString());
Util.CheckSignFromXml(resText, request.MchInfo);
var res = XML.XmlDeserialize<WeiFuTongRefundResponse>(resText);
res.HandleError();
return res;
}
/// <summary>
/// 退款查询
/// </summary>
/// <param name="weiFuTongClient"></param>
/// <param name="request"></param>
/// <returns></returns>
public static async Task<WeiFuTongRefundQueryResponse> QueryRefundAsync(this WeiFuTongClient weiFuTongClient,
WeiFuTongRefundQueryRequest request)
{
StringBuilder log = new StringBuilder();
var body = request.ToXml();
log.Append("请求:\r\n" + body);
var response = await weiFuTongClient.CreateHttpClient()
.PostAsync(request.PaymentChannel.GetUrl(), new StringContent(body));
var resText = await response.Content.ReadAsStringAsync();
log.Append("\r\n响应" + resText);
//LogHelper.Trace($"威富通-退款查询", log.ToString());
Util.CheckSignFromXml(resText, request.MchInfo);
var res = XML.XmlDeserialize<WeiFuTongRefundQueryResponse>(resText).ParseItemsFromXml(resText);
if (!(res.IsCancel() || res.IsNotExists()) && res.HasError())
{
res.HandleError();
}
return res;
}
}
}

View File

@@ -0,0 +1,56 @@
using System.Net;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using Hncore.Infrastructure.Common;
using Hncore.Infrastructure.Data;
using Hncore.Infrastructure.Serializer;
using Hncore.Pass.PaymentCenter.WeiFuTong.SwipeCard;
namespace Hncore.Pass.PaymentCenter.WeiFuTong.ClientExtension
{
public static class SwipeCard
{
/// <summary>
/// 刷卡支付下单
/// </summary>
/// <param name="weiFuTongClient"></param>
/// <param name="request"></param>
/// <returns>need_query为Y时需要轮询查询支付状态不为Y则支付成功</returns>
public static async Task<SwipeCardCreateOrderResponse> SwipeCardCreateOrderAsync(
this WeiFuTongClient weiFuTongClient
, SwipeCardCreateOrderRequest request)
{
StringBuilder log = new StringBuilder();
var body = request.ToXml();
log.Append("请求:\r\n" + body);
var response = await weiFuTongClient.CreateHttpClient()
.PostAsync(request.PaymentChannel.GetUrl(), new StringContent(body));
var resText = await response.Content.ReadAsStringAsync();
log.Append("\r\n响应" + resText);
LogHelper.Trace("威富通-刷卡支付下单", log.ToString());
if (response.StatusCode != HttpStatusCode.OK)
{
throw new HttpException(response.StatusCode) {Content = resText};
}
Util.CheckSignFromXml(resText, request.MchInfo);
var res = XML.XmlDeserialize<SwipeCardCreateOrderResponse>(resText);
if (res.HasError() && res.NeedQuery != "Y" && res.NeedQuery != "")
{
res.HandleError();
}
return res;
}
}
}

View File

@@ -0,0 +1,57 @@
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using Hncore.Infrastructure.Common;
using Hncore.Infrastructure.Serializer;
using Hncore.Pass.PaymentCenter.WeiFuTong.WechatJsPay;
namespace Hncore.Pass.PaymentCenter.WeiFuTong.ClientExtension
{
public static class WechatJsPay
{
/// <summary>
/// 微信小程序或公众号支付
/// </summary>
/// <param name="weiFuTongClient"></param>
/// <param name="request"></param>
/// <returns></returns>
public static async Task<WechatJsPayCreateOrderResponse> WechatJsPayCreateOrderAsync(
this WeiFuTongClient weiFuTongClient
, WechatJsPayCreateOrderRequest request)
{
StringBuilder log = new StringBuilder();
var body = request.ToXml();
log.Append("请求:\r\n" + body);
var response = await weiFuTongClient.CreateHttpClient()
.PostAsync(request.PaymentChannel.GetUrl(), new StringContent(body));
var resText = await response.Content.ReadAsStringAsync();
log.Append("\r\n响应" + resText);
string appEnv = "";
if (request.IsMinipg == "1")
{
appEnv = "小程序";
}
else
{
appEnv = "公众号";
}
LogHelper.Trace($"威富通-微信{appEnv}支付下单", log.ToString());
Util.CheckSignFromXml(resText, request.MchInfo);
var res = XML.XmlDeserialize<WechatJsPayCreateOrderResponse>(resText);
res.HandleError();
return res;
}
}
}