setExpressCheckout和SSL/TLS错误

inf*_*oop 11 c# asp.net paypal paypal-sandbox

我正在尝试开发一个简单的应用程序,使用户能够通过Paypal API从网站上购买服务.此应用程序在带有C#的ASP.NET上运行.

我试图让Paypal API合作的运气很少.我正在调用的方法是SetExpressCheckout,包含所有适当的变量.

我做了我的研究并发现,因为我在Localhost中测试,它可能会影响Paypal与应用程序通信的能力.所以我接下来尝试的是通过开放端口和可公开访问的IP地址访问我的应用程序,但是在调用SetExpressCheckout时会出现同样的错误.

这是错误:

Exception Details: System.Net.WebException: The request was aborted: Could not create SSL/TLS secure channel.

Source Error: 


Line 1790:        [return: System.Xml.Serialization.XmlElementAttribute("SetExpressCheckoutResponse", Namespace="urn:ebay:api:PayPalAPI")]
Line 1791:        public SetExpressCheckoutResponseType SetExpressCheckout([System.Xml.Serialization.XmlElementAttribute(Namespace="urn:ebay:api:PayPalAPI")] SetExpressCheckoutReq SetExpressCheckoutReq) {
Line 1792:            object[] results = this.Invoke("SetExpressCheckout", new object[] {
Line 1793:                        SetExpressCheckoutReq});
Line 1794:            return ((SetExpressCheckoutResponseType)(results[0]));

Source File: c:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\anan_p2\730602d6\31a8d74e\App_WebReferences.c8vgyrf8.2.cs    Line: 1792 
Run Code Online (Sandbox Code Playgroud)

我也尝试使用OpenSSL生成证书并将其上传到Paypal帐户的加密卖家选项,但仍然无效.

非常感谢您阅读我的问题!

更新:这里要求的是正在使用的代码.

        String hostingOn = ConfigurationManager.AppSettings["default_site_url"];
        reqDetails.ReturnURL = hostingOn + "marketplace_confirm.aspx";
        reqDetails.CancelURL = hostingOn + "marketplace.aspx";
        reqDetails.NoShipping = "1";
        reqDetails.ReqConfirmShipping = "0";

        reqDetails.OrderTotal = new BasicAmountType()
        {
            currencyID = CurrencyCodeType.CAD,
            Value = payment_amt.Value,
        };

        SetExpressCheckoutReq req = new SetExpressCheckoutReq()
        {
            SetExpressCheckoutRequest = new SetExpressCheckoutRequestType()
            {
                Version = UtilPayPalAPI.Version,
                SetExpressCheckoutRequestDetails = reqDetails
            }

        };

        PayPalAPIAASoapBinding paypal = new PayPalAPIAASoapBinding();

        paypal.SetExpressCheckout(req);
Run Code Online (Sandbox Code Playgroud)

我也使用https://api-aa-3t.paypal.com/2.0/ url来访问API

Mar*_*oll 19

自2016年初以来,Paypal开始要求TLS 1.2协议用于Sandbox中的通信,并将从6月17日开始为实时环境强制执行.请参阅此处以供参考.

在大多数.NET应用程序中,默认情况下 TLS 1.2将被禁用,因此您需要启用它.

您需要添加以下行,例如,在Application_Start方法的开头:

public class Site : HttpApplication
{
    protected void Application_Start()
    {
        ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
        // other configuration
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 上帝祝福你!你救了我的一天.:) (4认同)
  • 对于使用旧版MVC(3)或.NET Framework(<4.5)的用户,可以使用以下命令实现上述目的:`ServicePointManager.SecurityProtocol =(SecurityProtocolType)3072; (3认同)

Rob*_*ert 5

您可能正在连接到api.paypal.com或api.sandbox.paypal.com,而不是发送您的API证书.API证书是用于完成SSL链的客户端SSL证书.

如果您没有或未使用API​​证书,则应分别连接到api-3t.paypal.com或api-3t.sandbox.paypal.com以获取Live或Sandbox.