我遇到了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个月。
答案 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;