public async Task <T> ExecuteAsync <T>(HttpRequest request, WeChatPayOptions options) where T : WeChatPayNotify { if (request == null) { throw new ArgumentNullException(nameof(request)); } if (options == null) { throw new ArgumentNullException(nameof(options)); } if (string.IsNullOrEmpty(options.Key)) { throw new ArgumentNullException(nameof(options.Key)); } var body = await new StreamReader(request.Body, Encoding.UTF8).ReadToEndAsync(); var parser = new WeChatPayXmlParser <T>(); var notify = parser.Parse(body); if (notify is WeChatPayRefundNotify) { var key = MD5.Compute(options.Key).ToLowerInvariant(); var data = AES.Decrypt((notify as WeChatPayRefundNotify).ReqInfo, key, CipherMode.ECB, PaddingMode.PKCS7); notify = parser.Parse(body, data); } else { CheckNotifySign(notify, options); } return(notify); }
public Task <T> ExecuteAsync <T>(string body, WeChatPayOptions options) where T : WeChatPayNotify { if (string.IsNullOrEmpty(body)) { throw new ArgumentNullException(nameof(body)); } if (options == null) { throw new ArgumentNullException(nameof(options)); } if (string.IsNullOrEmpty(options.Key)) { throw new WeChatPayException("options.Key is Empty!"); } var parser = new WeChatPayNotifyXmlParser <T>(); var notify = parser.Parse(body); if (notify is Notify.WeChatPayRefundNotify) { var key = MD5.Compute(options.Key).ToLowerInvariant(); var data = AES.Decrypt((notify as Notify.WeChatPayRefundNotify).ReqInfo, key, CipherMode.ECB, PaddingMode.PKCS7); notify = parser.Parse(body, data); } else { CheckNotifySign(notify, options); } return(Task.FromResult(notify)); }
/// <summary> /// 计算指定证书的序列号 /// </summary> /// <param name="certificate">证书</param> public static string GetCertSN(X509Certificate2 certificate) { // 删除逗号后面的空格 var issuer = certificate.Issuer.Replace(", ", ","); //提取出的证书的issuerDN本身是以CN开头的,则无需逆序,直接返回 if (issuer.StartsWith("CN", StringComparison.Ordinal)) { return(MD5.Compute(issuer + BigInteger.Parse(certificate.SerialNumber, NumberStyles.HexNumber).ToString()).ToLowerInvariant()); } else { var attributes = issuer.Split(',').ToList(); attributes.Reverse(); return(MD5.Compute(string.Join(",", attributes.ToArray()) + BigInteger.Parse(certificate.SerialNumber, NumberStyles.HexNumber).ToString()).ToLowerInvariant()); } }
public async Task <T> ExecuteAsync <T>(HttpRequest request, string optionsName) where T : WeChatPayNotify { var options = string.IsNullOrEmpty(optionsName) ? _optionsSnapshotAccessor.Value : _optionsSnapshotAccessor.Get(optionsName); var body = await new StreamReader(request.Body, Encoding.UTF8).ReadToEndAsync(); _logger.Log(options.LogLevel, "Request:{body}", body); var parser = new WeChatPayXmlParser <T>(); var notify = parser.Parse(body); if (notify is WeChatPayRefundNotify) { var key = MD5.Compute(options.Key).ToLower(); var data = AES.Decrypt((notify as WeChatPayRefundNotify).ReqInfo, key, CipherMode.ECB, PaddingMode.PKCS7); _logger.Log(options.LogLevel, "Decrypt Content:{data}", data); // AES-256-ECB 解密内容 notify = parser.Parse(body, data); } else { CheckNotifySign(notify, options); } return(notify); }