Так что я использую PayPal API. Им требуется, чтобы крупные компании отправляли сертификат X509 вместе с каждым запросом SOAP API. Я никогда не слышал об использовании сертификата, он всегда отправлял подпись API вместе с запросом API.
Итак, я сначала создал класс с именем Cerficate
, который реализует .NET ICerfiticatePolicy
. Один из методов-членов, действительно единственный, который вам нужно реализовать:
System.Net.ICertificatePolicy.CheckValidationResult(System.Net.ServicePoint, System.Security.Cryptography.X509Certificates.X509Certificate, System.Net.WebRequest, int)
Пока у меня проблемы с пониманием того, что перейти к этому методу. Я предполагаю, что метод просто подтверждает, что Сертификат действителен. Поэтому я не уверен, что такое ServicePoint и что в него передать. Я предположил, что это была моя ссылка на веб-сервис и прокси-класс внутри, такой как PayPalAPIAAInterfaceClient
Я также вижу очень старый пример, использующий ServicePointManager.S для чего-то, но я не понимаю этого, даже после просмотра MSDN. Так что я думаю, что вы должны использовать ServicePointManager.ServerCertificateValidationCallback, и я полагаю, установить обратный вызов для CheckValidationResult? Если да, то когда ты это делаешь? Это меня очень смущает.
Кроме того, я предполагаю, что я создаю экземпляр своего класса Certificate и устанавливаю свойства сертификата, считывая сертификат P12 с моего диска, а затем передаю его этому методу, чтобы проверить, действителен ли он? Я думаю, это правильно.
Я все еще пытаюсь выяснить все это, и я действительно застрял в ServicePoint, а также в WebRequest, потому что в действительности я использую прокси-класс в PayPal, который выполняет скрытую отправку запроса. Так что я не вижу, как я могу даже передать тип WebRequest, потому что я все равно использую метод прокси для этого. Так что бы я даже принял за параметр WebRequest? Я использую SOAP API WSDL, а не NVP, поэтому я, например, не создаю переменную HttpWebRequest, как вы делаете со службами REST, чтобы отправить запрос API через Http.
пока вот что я пробовал:
PayPalAPIAAInterfaceClient client = new PayPalAPIAAInterfaceClient();
Certificate x509Certificate = new Certificate();
ServicePointManager.ServerCertificateValidationCallback = x509Certificate.CheckValidationResult();
client.ClientCredentials.ClientCertificate.Certificate = x509Certificate;
проблема в том, что мне передать для ServicePiont и остальные параметры для CheckValidationResult ?? Я даже не знаю, правильно ли я это называю.