所以我正在使用 PayPal API。他们要求大公司随每个 SOAP API 请求一起发送 X509Certificate。我从未听说过使用证书,它一直只是将 API 签名与 API 请求一起发送。
所以我首先创建了一个Cerficate
实现 .NET的类ICerfiticatePolicy
。成员方法之一,实际上您必须实现的唯一方法是:
System.Net.ICertificatePolicy.CheckValidationResult(System.Net.ServicePoint, System.Security.Cryptography.X509Certificates.X509Certificate, System.Net.WebRequest, int)
到目前为止,我很难真正理解传递给这个方法的内容。我猜该方法只是验证证书是否有效。所以我不确定ServicePoint是什么以及传递给它的内容。我认为这是我的 Web 服务引用和代理类,例如PayPalAPIAAInterfaceClient
我还看到一个使用 ServicePointManager.S 的非常古老的示例,但我不明白,即使在查看 MSDN 之后也是如此。所以我猜你要使用 ServicePointManager.ServerCertificateValidationCallback 并且我想将回调设置为 CheckValidationResult?如果是这样,你什么时候这样做?这让我很困惑。
另外,所以我想我创建了我的证书类的一个实例,并通过从我的磁盘读取 P12 证书来设置证书属性,然后将其传递给这个方法以检查它是否有效?我想这是对的。
我仍在试图弄清楚这整个事情,我真的被困在 ServicePoint 和 WebRequest 上,因为我真的在 PayPal 中使用了一个代理类,它在引擎盖下发送请求。所以我看不出我怎么能传入类型 WebRequest ,因为无论如何我都在使用代理方法。那么我什至会为 WebRequest 参数传递什么?我在这里使用的是 SOAP API WSDL,而不是 NVP,因此我不会像使用 REST 服务那样创建一个 HttpWebRequest 变量,以便通过 Http 发送 API 请求。
到目前为止,这是我尝试过的:
PayPalAPIAAInterfaceClient client = new PayPalAPIAAInterfaceClient();
Certificate x509Certificate = new Certificate();
ServicePointManager.ServerCertificateValidationCallback = x509Certificate.CheckValidationResult();
client.ClientCredentials.ClientCertificate.Certificate = x509Certificate;
问题是,我应该为 ServicePiont 和 CheckValidationResult 的其余参数传递什么?我什至不知道我说得对不对。