mirror of
https://github.com/Varorbc/PaySharp.git
synced 2026-10-17 04:41:20 +08:00
增加签名验证
This commit is contained in:
@@ -44,8 +44,6 @@ namespace ICanPay.Alipay
|
||||
|
||||
public new Notify Notify => (Notify)base.Notify;
|
||||
|
||||
protected override bool IsWaitPay => Notify.TradeStatus == Constant.WAIT_BUYER_PAY;
|
||||
|
||||
protected override bool IsSuccessPay => Notify.TradeStatus == Constant.TRADE_SUCCESS;
|
||||
|
||||
protected override string[] NotifyVerifyParameter => new string[]
|
||||
@@ -123,7 +121,6 @@ namespace ICanPay.Alipay
|
||||
TradeNo = tradeNo
|
||||
});
|
||||
var queryResponse = NetExecute(queryRequest);
|
||||
//TODO:检测签名
|
||||
if (queryResponse.TradeStatus == Constant.TRADE_SUCCESS)
|
||||
{
|
||||
return true;
|
||||
@@ -166,11 +163,16 @@ namespace ICanPay.Alipay
|
||||
return false;
|
||||
}
|
||||
|
||||
private string BuildSign(GatewayData gatewayData)
|
||||
protected override string BuildSign(GatewayData gatewayData)
|
||||
{
|
||||
return EncryptUtil.RSA(gatewayData.ToUrl(false), Merchant.Privatekey, Merchant.SignType);
|
||||
}
|
||||
|
||||
protected override bool CheckSign(string data, string sign)
|
||||
{
|
||||
return EncryptUtil.RSAVerifyData(data, sign, Merchant.AlipayPublicKey, Merchant.SignType);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 是否是已成功支付的支付通知
|
||||
/// </summary>
|
||||
@@ -231,10 +233,18 @@ namespace ICanPay.Alipay
|
||||
GatewayData.FromJson(body);
|
||||
string sign = GatewayData.GetStringValue(Constant.SIGN);
|
||||
GatewayData.Remove(Constant.SIGN);
|
||||
GatewayData.FromJson(GatewayData[0].Value.ToString());
|
||||
string data = GatewayData[0].Value.ToString();
|
||||
|
||||
if (!CheckSign(data, sign))
|
||||
{
|
||||
throw new GatewayException("签名验证失败");
|
||||
}
|
||||
|
||||
GatewayData.FromJson(data);
|
||||
GatewayData.Add(Constant.SIGN, sign);
|
||||
GatewayData.Add(BODY, body);
|
||||
|
||||
//TODO:待优化
|
||||
return GatewayData.ToObject<TResponse>(StringCase.Snake);
|
||||
}
|
||||
|
||||
|
||||
@@ -92,11 +92,6 @@ namespace ICanPay.Core
|
||||
/// </summary>
|
||||
protected internal abstract bool IsSuccessPay { get; }
|
||||
|
||||
/// <summary>
|
||||
/// 是否等待支付
|
||||
/// </summary>
|
||||
protected abstract bool IsWaitPay { get; }
|
||||
|
||||
/// <summary>
|
||||
/// 需要验证的参数名称数组,用于识别不同的网关类型。
|
||||
/// 商户号(AppId)必须放第一位
|
||||
@@ -130,8 +125,30 @@ namespace ICanPay.Core
|
||||
HttpUtil.Write(FAILURE);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 执行请求
|
||||
/// </summary>
|
||||
/// <typeparam name="TModel">数据模型</typeparam>
|
||||
/// <typeparam name="TResponse">返回模型</typeparam>
|
||||
/// <param name="request">请求</param>
|
||||
/// <returns></returns>
|
||||
public abstract TResponse Execute<TModel, TResponse>(Request<TModel, TResponse> request) where TResponse : IResponse;
|
||||
|
||||
/// <summary>
|
||||
/// 生成签名
|
||||
/// </summary>
|
||||
/// <param name="gatewayData">网关数据</param>
|
||||
/// <returns></returns>
|
||||
protected abstract string BuildSign(GatewayData gatewayData);
|
||||
|
||||
/// <summary>
|
||||
/// 检验签名
|
||||
/// </summary>
|
||||
/// <param name="data">待验证数据</param>
|
||||
/// <param name="sign">签名</param>
|
||||
/// <returns></returns>
|
||||
protected abstract bool CheckSign(string data, string sign);
|
||||
|
||||
#endregion
|
||||
|
||||
#endregion
|
||||
|
||||
@@ -484,10 +484,16 @@ namespace ICanPay.Core
|
||||
if (!string.IsNullOrEmpty(json))
|
||||
{
|
||||
var jObject = JObject.Parse(json);
|
||||
var list = jObject.Children().OfType<JProperty>();
|
||||
foreach (var item in list)
|
||||
foreach (var item in jObject)
|
||||
{
|
||||
Add(item.Name, item.Value.ToString());
|
||||
if (item.Value.Type == JTokenType.Object)
|
||||
{
|
||||
Add(item.Key, item.Value.ToString(Newtonsoft.Json.Formatting.None));
|
||||
}
|
||||
else
|
||||
{
|
||||
Add(item.Key, item.Value.ToString());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,20 +9,11 @@ namespace ICanPay.Core
|
||||
/// </summary>
|
||||
public class NullGateway : BaseGateway
|
||||
{
|
||||
public override string GatewayUrl { get; set; }
|
||||
|
||||
#region 属性
|
||||
protected internal override bool IsSuccessPay { get; }
|
||||
|
||||
public override string GatewayUrl { get; set; } = string.Empty;
|
||||
|
||||
protected internal override bool IsSuccessPay => false;
|
||||
|
||||
protected override bool IsWaitPay => false;
|
||||
|
||||
protected internal override string[] NotifyVerifyParameter => new string[0];
|
||||
|
||||
#endregion
|
||||
|
||||
#region 方法
|
||||
protected internal override string[] NotifyVerifyParameter { get; }
|
||||
|
||||
protected internal override async Task<bool> ValidateNotifyAsync()
|
||||
{
|
||||
@@ -34,7 +25,14 @@ namespace ICanPay.Core
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
#endregion
|
||||
protected override string BuildSign(GatewayData gatewayData)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
protected override bool CheckSign(string data, string sign)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -43,6 +43,7 @@ namespace ICanPay.Unionpay
|
||||
: base(merchant, new GatewayData(StringComparer.Ordinal))
|
||||
{
|
||||
_merchant = merchant;
|
||||
//TODO:测试同时读取是否有问题
|
||||
_merchant.CertId = Util.GetCertId(merchant.CertPath, merchant.CertPwd);
|
||||
_merchant.CertKey = Util.GetCertKey(merchant.CertPath, merchant.CertPwd);
|
||||
//_merchant.EncryptCertId = Util.GetEncryptCertId();
|
||||
|
||||
Reference in New Issue
Block a user