public async Task <T> ExecuteAsync <T>(IWeChatPayCertRequest <T> request, WeChatPayOptions options) where T : WeChatPayResponse { if (options == null) { throw new ArgumentNullException(nameof(options)); } if (string.IsNullOrEmpty(options.AppId)) { throw new ArgumentNullException(nameof(options.AppId)); } if (string.IsNullOrEmpty(options.MchId)) { throw new ArgumentNullException(nameof(options.MchId)); } if (string.IsNullOrEmpty(options.Key)) { throw new ArgumentNullException(nameof(options.Key)); } if (string.IsNullOrEmpty(options.Certificate)) { throw new ArgumentNullException(nameof(options.Certificate)); } var signType = request.GetSignType(); var sortedTxtParams = new WeChatPayDictionary(request.GetParameters()); request.PrimaryHandler(options, signType, sortedTxtParams); var hash = options.GetCertificateHash(); if (!_certificateManager.Contains(hash)) { var certificate = File.Exists(options.Certificate) ? new X509Certificate2(options.Certificate, options.CertificatePassword, X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.MachineKeySet) : new X509Certificate2(Convert.FromBase64String(options.Certificate), options.CertificatePassword, X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.MachineKeySet); _certificateManager.TryAdd(hash, certificate); } var client = _httpClientFactory.CreateClient(Prefix + hash); var body = await client.PostAsync(request.GetRequestUrl(), sortedTxtParams); var parser = new WeChatPayXmlParser <T>(); var response = parser.Parse(body); if (request.GetNeedCheckSign()) { CheckResponseSign(response, options, signType); } return(response); }
public async Task <T> ExecuteAsync <T>(IWeChatPayCertRequest <T> request, WeChatPayOptions options) where T : WeChatPayResponse { if (options == null) { throw new ArgumentNullException(nameof(options)); } if (string.IsNullOrEmpty(options.AppId)) { throw new WeChatPayException($"options.{nameof(WeChatPayOptions.AppId)} is Empty!"); } if (string.IsNullOrEmpty(options.MchId)) { throw new WeChatPayException($"options.{nameof(WeChatPayOptions.MchId)} is Empty!"); } if (string.IsNullOrEmpty(options.APIKey)) { throw new WeChatPayException($"options.{nameof(WeChatPayOptions.APIKey)} is Empty!"); } if (string.IsNullOrEmpty(options.Certificate)) { throw new WeChatPayException($"options.{nameof(WeChatPayOptions.Certificate)} is Empty!"); } var sortedTxtParams = new WeChatPayDictionary(request.GetParameters()); request.PrimaryHandler(sortedTxtParams, options); if (!_clientCertificateManager.ContainsKey(options.CertificateSerialNo)) { _clientCertificateManager.TryAdd(options.CertificateSerialNo, options.Certificate2); } var client = _httpClientFactory.CreateClient(Prefix + options.CertificateSerialNo); var body = await client.PostAsync(request, sortedTxtParams); var parser = new WeChatPayResponseXmlParser <T>(); var response = parser.Parse(body); if (request.GetNeedCheckSign()) { var signType = request.GetSignType(); CheckResponseSign(response, options, signType); } return(response); }