C# Paypal API登录已停止工作

C# Paypal API登录已停止工作,c#,curl,oauth-2.0,paypal,C#,Curl,Oauth 2.0,Paypal,我无法使用oauth2登录Paypal以获取承载令牌,获取HTTP 500-我的C#代码中的内部服务器错误,cUrl显示SSL错误。我需要在我的机器上安装任何证书吗?如果需要,从哪里获得证书 当我直接在浏览器中键入“”时,会显示绿色挂锁,单击它会显示站点的SSL证书有效 服务器和单元测试都是C#,但我也看到了使用cUrl调用时出现的问题: curl https://api.sandbox.paypal.com/v1/oauth2/token -H "Accept: applicatio

我无法使用oauth2登录Paypal以获取承载令牌,获取HTTP 500-我的C#代码中的内部服务器错误,cUrl显示SSL错误。我需要在我的机器上安装任何证书吗?如果需要,从哪里获得证书

当我直接在浏览器中键入“”时,会显示绿色挂锁,单击它会显示站点的SSL证书有效

服务器和单元测试都是C#,但我也看到了使用cUrl调用时出现的问题:

curl https://api.sandbox.paypal.com/v1/oauth2/token 
    -H "Accept: application/json"  
    -H "Accept-Language: en_US" 
    -u "SOMELONGB64CONTENTHERE/USER:PASSWORD"
    -d "grant_type=client_credentials" -v
此调用显示与SSL相关的错误:

* About to connect() to api.sandbox.paypal.com port 443 (#0)
*   Trying 173.0.82.78... connected
* SSLv3, TLS handshake, Client hello (1):
* SSLv3, TLS handshake, Server hello (2):
* SSLv3, TLS handshake, CERT (11):
* SSLv3, TLS alert, Server hello (2):
* SSL certificate problem, verify that the CA cert is OK. Details:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify faile
d
* Closing connection #0
curl: (60) SSL certificate problem, verify that the CA cert is OK. Details:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify faile
d
当我添加
--unsecure
选项来cUrl时,调用将返回预期结果

*更新:*当我在Mac上运行完全相同的cUrl命令时,响应正常,并且具有我期望的承载令牌

C#(截断的错误处理和日志记录)中的单元测试代码:

*更新:*使用Fiddler捕获时,来自该单元测试的原始流量如下所示:

请求:

POST https://api.sandbox.paypal.com/v1/oauth2/token HTTP/1.1
Accept: application/json
Accept-Language: en_US
Authorization: Basic SOMELONGB64CONTENTHERE/USER:PASSWORD
Host: api.sandbox.paypal.com
Content-Length: 29
Expect: 100-continue
Connection: Keep-Alive

grant_type=client_credentials
答复:

HTTP/1.1 500 Internal Server Error
Server: Apache-Coyote/1.1
Content-Type: application/json
Content-Length: 118
Date: Sun, 30 Jun 2013 22:21:53 GMT
Connection: close

{"name":"INTERNAL_SERVICE_ERROR","information_link":"https://api.sandbox.paypal.com/docs/api/#INTERNAL_SERVICE_ERROR"}

该证书似乎正常有效,由VeriSign颁发,于2016年到期。有没有可能cUrl就是不能正确处理它

我认为您的代码是错误的,请参见此处:

应用程序不能为特定请求混合使用同步和异步方法。如果调用GetRequestStream方法,则必须使用GetResponse方法检索响应


显然,这是由于贝宝的API发生了突破性的变化。Paypal自己的另一条线索,在第80行左右,您可以看到ContentType标题设置为两个值之一:

httpRequest.ContentType=“application/x-www-form-urlencoded”

httpRequest.ContentType=“application/json”


最近引入了突破性的更改,修复时间为2013年6月20日。

不幸的是,这两个声明都没有帮助-我确信Paypal的证书是有效的,更可能的是我的机器缺少一些根证书。单元测试代码在一个月前就开始工作了,异步并不重要;我将其更改为所有同步调用,但异常仍然是相同的。这是来自PayPal或您的应用程序的异常吗?看起来PayPal在抱怨什么,Fiddler显示HTTP 500,因此这不是.NET内部错误;请参阅帖子中的更新。感谢您的帮助(+1)。你的最后一个问题让我找了其他地方,我发现Paypal打破了他们的底线,需要内容类型标题集。很高兴我能提供一些间接帮助D
HTTP/1.1 500 Internal Server Error
Server: Apache-Coyote/1.1
Content-Type: application/json
Content-Length: 118
Date: Sun, 30 Jun 2013 22:21:53 GMT
Connection: close

{"name":"INTERNAL_SERVICE_ERROR","information_link":"https://api.sandbox.paypal.com/docs/api/#INTERNAL_SERVICE_ERROR"}