.NET下面的 .netfromwork使用和asp.net core下使用方式不一樣
配置文件中代碼:
public const string API_URL = "https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers";
/// <summary> /// 本地或者服務器的證書位置 /// </summary> public const string CertPath = @"D:\apiclient_cert.p12"; /// <summary> /// 本地或者服務器的證書密碼 /// </summary> public const string CApassword = "9999999";
Build_Content()
這個主要是傳遞的參數封裝值
public async Task<bool> Send_Transfer() { //HttpClient請求,在handler里添加X509Certificate2 證書,數據data是byte[] 類型,所以需要使用ByteArrayContent傳入 var handler = new HttpClientHandler(); handler.ClientCertificateOptions = ClientCertificateOption.Manual; handler.SslProtocols = SslProtocols.Tls12; //獲取證書路徑 //商戶私鑰證書,用於對請求報文進行簽名 try { handler.ClientCertificates.Add(new X509Certificate2(WeixinPay.CertPath, WeixinPay.CApassword, X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.MachineKeySet)); } catch (Exception e) { _logger.LogError(e.Message); } handler.SslProtocols = SslProtocols.Tls12 | SslProtocols.Tls11 | SslProtocols.Tls; handler.ServerCertificateCustomValidationCallback = (message, cert, chain, errors) => true; //post請求 var client = new HttpClient(handler); /////////////////////////////////////////////////////////// //以下屬於在.netfromwork環境下寫法 // ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult); //調用證書 //X509Certificate2 cer = new X509Certificate2(WeixinPay.CertPath, WeixinPay.CApassword, X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.MachineKeySet); //handler.ClientCertificates.Add(cer); /////////////////////////////////////////////////////////// response = await client.PostAsync(WeixinPay.API_URL, Build_Content()); /////////////////////////////////////////////////////////// return response.IsSuccessStatusCode; }