PayPal.ConnectionException:无效的HTTP响应:请求已中止:无法创建SSL / TLS安全通道

时间:2015-10-01 21:10:37

标签: ssl paypal

我遇到了PayPal REST Api的问题,有时它工作正常! (并且在沙箱上它可以100%工作)但是在连接到现场PayPal系统时在实时系统上。我有时会得到跟随错误。

PayPal.ConnectionException: Invalid HTTP response: The request was aborted: Could not create SSL/TLS secure channel. at 
PayPal.Api.HttpConnection.Execute(String payLoad, HttpWebRequest 
    httpRequest) at PayPal.Api.PayPalResource.ConfigureAndExecute[T]
    (APIContext apiContext, HttpMethod httpMethod, String resource, String 
    payload, String endpoint, Boolean setAuthorizationHeader) at 
    PayPal.Api.OAuthTokenCredential.GenerateOAuthToken() at 
    PayPal.Api.OAuthTokenCredential.GetAccessToken()

基本上只是在尝试从PayPal获取访问令牌时不断崩溃

我已将SDK更新到最新版本,代码已经愉快地工作了3个月。

4 个答案:

答案 0 :(得分:13)

在某些情况下,由于某种原因,PayPal连接似乎没有被释放。这会产生错误,因为.Net对任何单个主机的并发Web连接数有限制,该限制为2.

在尝试连接到PayPal之前添加此项,请记住它需要在每次连接之前进行,例如,如果您使用的是SDK和快速结账。

//call Facebook onclick on your customized button on click by the following

FacebookSdk.sdkInitialize(this.getApplicationContext());

        callbackManager = CallbackManager.Factory.create();

        LoginManager.getInstance().registerCallback(callbackManager,
                new FacebookCallback<LoginResult>() {
                    @Override
                    public void onSuccess(LoginResult loginResult) {
                        Log.d("Success", "Login");

                    }

                    @Override
                    public void onCancel() {
                        Toast.makeText(MainActivity.this, "Login Cancel", Toast.LENGTH_LONG).show();
                    }

                    @Override
                    public void onError(FacebookException exception) {
                        Toast.makeText(MainActivity.this, exception.getMessage(), Toast.LENGTH_LONG).show();
                    }
                });

        setContentView(R.layout.activity_main);

        Button mycustomizeedbutton=(Button)findViewById(R.id.mycustomizeedbutton);

        mycustomizeedbutton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                  LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("public_profile", "user_friends"));
            }
        });

    }

答案 1 :(得分:9)

发生此错误是因为PayPal已开始放弃对SSLv3的支持。关于接受的答案,只需要Tls12设置即可使PayPal连接再次运行。

我不想在我的代码中实现此设置。我发现将此设置放在Application_Start()文件的global.asax方法中是最佳解决方案。

另外,我的4.0版.NET框架不允许我使用SecurityProtocolType.Tls12标志 - 但是如果我像这样投射它会有效:

protected void Application_Start()
{
    ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072; // This is equivalent to SecurityProtocolType.Tls12
}

答案 2 :(得分:2)

我在Paypal测试帐户中遇到类似的问题,并且只需要从上一个答案中找到一行:

  REGION_ID       date   var   stat      value
1         1 2012-08-14 ari-1 median         NA
2         2 2012-08-14 ari-1 median         NA
3         3 2012-08-14 ari-1 median 108.190330
4         4 2012-08-14 ari-1 median  20.388762
5         5 2012-08-14 ari-1 median  25.483303
6         6 2012-08-14 ari-1 median   8.646864

答案 3 :(得分:1)

在我的第一个回答中,我建议添加

ServicePointManager.SecurityProtocol =  SecurityProtocolType.Tls12;

但我的项目也使用亚马逊服务,而且它不能与TLS12一起使用。当我在协议包上替换它时,它工作正常:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;