请求中止:无法创建SSL/TLS安全通道。

3
我希望能够在我的网站上实现Paypal dodirect方法,让用户可以直接在我的网站上进行付款,而不是跳转到其他页面。
为此,我已经将以下URL添加为https://www.sandbox.paypal.com/wsdl/PayPalSvc.wsdl
我正在使用以下代码:
PayPalAPIAAInterfaceClient objpaypalapiaainterfaceclient = new PayPalAPIAAInterfaceClient("paypalapiaa");
        CustomSecurityHeaderType objcustomsecurityheadertype = new CustomSecurityHeaderType();
        objcustomsecurityheadertype.Credentials = new UserIdPasswordType();
        objcustomsecurityheadertype.Credentials.Signature = "a8ft-8ji.2tzocnfshfjj4ahgxn4avlxzply8bmsbupxafkbty2--c6p";
        objcustomsecurityheadertype.Credentials.Username = "fred_1350925179_biz_api1.gmail.com";
        objcustomsecurityheadertype.Credentials.Password = "1350925199";

        DoDirectPaymentReq objdodirectpaymentreq = new DoDirectPaymentReq();
        objdodirectpaymentreq.DoDirectPaymentRequest = new DoDirectPaymentRequestType();
        objdodirectpaymentreq.DoDirectPaymentRequest.DoDirectPaymentRequestDetails = new DoDirectPaymentRequestDetailsType();
        objdodirectpaymentreq.DoDirectPaymentRequest.DoDirectPaymentRequestDetails.PaymentAction = new PaymentActionCodeType();
        objdodirectpaymentreq.DoDirectPaymentRequest.DoDirectPaymentRequestDetails.PaymentAction = PaymentActionCodeType.Sale;
        objdodirectpaymentreq.DoDirectPaymentRequest.DoDirectPaymentRequestDetails.PaymentDetails = new PaymentDetailsType();
        objdodirectpaymentreq.DoDirectPaymentRequest.DoDirectPaymentRequestDetails.CreditCard = new CreditCardDetailsType();
        //objdodirectpaymentreq.DoDirectPaymentRequest.DoDirectPaymentRequestDetails.PaymentDetails.InvoiceID = "1";
        objdodirectpaymentreq.DoDirectPaymentRequest.DoDirectPaymentRequestDetails.IPAddress = Request.ServerVariables["remote_addr"].ToString();

        objdodirectpaymentreq.DoDirectPaymentRequest.DoDirectPaymentRequestDetails.CreditCard.CreditCardType = CreditCardTypeType.MasterCard;

        objdodirectpaymentreq.DoDirectPaymentRequest.DoDirectPaymentRequestDetails.PaymentDetails.OrderTotal = new BasicAmountType();
        objdodirectpaymentreq.DoDirectPaymentRequest.DoDirectPaymentRequestDetails.CreditCard.CardOwner = new PayerInfoType();
        objdodirectpaymentreq.DoDirectPaymentRequest.DoDirectPaymentRequestDetails.CreditCard.CardOwner.PayerName = new PersonNameType();
        objdodirectpaymentreq.DoDirectPaymentRequest.DoDirectPaymentRequestDetails.PaymentDetails.OrderTotal.currencyID = CurrencyCodeType.USD;
        objdodirectpaymentreq.DoDirectPaymentRequest.DoDirectPaymentRequestDetails.CreditCard.CardOwner.Address = new AddressType();
        objdodirectpaymentreq.DoDirectPaymentRequest.DoDirectPaymentRequestDetails.PaymentDetails.OrderTotal.Value = "120";
        objdodirectpaymentreq.DoDirectPaymentRequest.DoDirectPaymentRequestDetails.CreditCard.CreditCardNumber ="1111222233334444";
        objdodirectpaymentreq.DoDirectPaymentRequest.DoDirectPaymentRequestDetails.CreditCard.CVV2 = "258";
        objdodirectpaymentreq.DoDirectPaymentRequest.DoDirectPaymentRequestDetails.CreditCard.ExpMonth = 9;
        objdodirectpaymentreq.DoDirectPaymentRequest.DoDirectPaymentRequestDetails.CreditCard.ExpYear = 2013;
        objdodirectpaymentreq.DoDirectPaymentRequest.DoDirectPaymentRequestDetails.CreditCard.CardOwner.Payer = "rahularyansharma@gmail.com";
        objdodirectpaymentreq.DoDirectPaymentRequest.DoDirectPaymentRequestDetails.CreditCard.CardOwner.PayerName.FirstName = "Shakti";
        objdodirectpaymentreq.DoDirectPaymentRequest.DoDirectPaymentRequestDetails.CreditCard.CardOwner.PayerName.LastName = "Kapoor";
        objdodirectpaymentreq.DoDirectPaymentRequest.DoDirectPaymentRequestDetails.CreditCard.CardOwner.Address.Street1 ="test address";
        objdodirectpaymentreq.DoDirectPaymentRequest.DoDirectPaymentRequestDetails.CreditCard.CardOwner.Address.CityName = "Atlanta";
        objdodirectpaymentreq.DoDirectPaymentRequest.DoDirectPaymentRequestDetails.CreditCard.CardOwner.Address.StateOrProvince = "ga";
        objdodirectpaymentreq.DoDirectPaymentRequest.DoDirectPaymentRequestDetails.CreditCard.CardOwner.Address.Country = CountryCodeType.US;
        objdodirectpaymentreq.DoDirectPaymentRequest.DoDirectPaymentRequestDetails.CreditCard.CardOwner.Address.PostalCode = "12345";
        DoDirectPaymentResponseType objdodirectpaymentresponsetype = objpaypalapiaainterfaceclient.DoDirectPayment(ref objcustomsecurityheadertype, objdodirectpaymentreq);

现在当我运行这段代码时,会抛出以下异常:

"请求被中止: 无法创建 SSL/TLS 安全通道。 描述: 在当前 Web 请求执行期间,发生了一个未经处理的异常。请查看堆栈跟踪以获取有关错误的更多信息以及其在代码中的位置。 异常详细信息: System.Net.WebException: 请求被中止: 无法创建 SSL/TLS 安全通道。"

2个回答

1
您可以使用https://www.sandbox.paypal.com来确认SSL协议,使用https://www.ssllabs.com/ssltest。截图显示它支持TLS 1.2 enter image description here。在进行httpclient调用时,您需要添加以下两行代码:

ServicePointManager.Expect100Continue = true; ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

示例:enter image description here 实现应该解决问题。


0

抱歉,我无法将此添加为评论/问题。

看起来 PayPal 的证书列表中缺少一个受信任的证书。

您可以尝试下载 PayPal 根证书并将其安装为受信任的 CA 吗?

我认为这两个链接可以帮助您: https://www.sslshopper.com/ssl-certificate-not-trusted-error.htmlhttp://raysilvadotnet.wordpress.com/2014/02/13/problema-system-net-webexception-the-request-was-aborted-could-not-create-ssltls-secure-channel/ (抱歉,无法插入超过 2 个链接作为普通链接)

此外,请确保您通过登录/密码进行身份验证,而不是使用证书。如果您正在使用 API 的证书,则应遵循 this link 的最后一段。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接