1

我在我的AppEngine项目中集成了paypalrestsdk。当,使用我的本地dev_appserver,我尝试创建的PayPal沙箱中的付款,我有以下错误:AppEngine Paypal集成在本地主机上给SSLCertificateError,使用Python

SSLCertificateError: Invalid and/or missing SSL certificate for URL: https://api.sandbox.paypal.com/v1/oauth2/token 

所以,我试图提供正确的PEM文件,从here下载它,并建立正确的ssl_option属性:

# Setting up the correct path to the .pem file 
cert = os.path.join(ROOT, 'certs/api.sandbox.paypal.com_SHA-2_01132018.pem') 
logger.info("Using SSL certificate: %s", cert) 
return Api(
    mode=get_paypal_environment(), # sandbox or live 
    client_id=flask.current_app.config["PAYPAL_CLIENT_ID"], 
    client_secret=flask.current_app.config["PAYPAL_CLIENT_SECRET"], 
    ssl_options={"cert": cert} 
) 

Here存在PayPalRestSDK文件是对如何提供证书的详细信息。我已经仔细检查了创建的路径是否正确。

我发现了一个有关类似问题的错误报告here

此外,我已经尝试了解决方案建议here仍然无法正常工作。

在实例上,在appspot上,这一切都很完美

这里是我的requirements.txt的相关部分:

Flask==0.10.1 
itsdangerous==0.24 
paramiko==1.15.1 
pycrypto==2.6.1 
Flask-OAuthlib==0.9.1 
google-api-python-client==1.4.0 
paypalrestsdk==1.11.1 
requests[security]==2.9.1 

是具有相同问题的人?

+0

我遇到同样的问题。它绝对用于在我的设置中工作,并且我没有改变任何在我的代码区域打破它。 – Codiak

回答

4

好的,我相信我已经解决了这个问题,至少在我的情况下,我将在下面描述。

这似乎是由于两个问题:

问题#1)贝宝被迁移到仅支持TLS 1.2,并且已经开始通过切换沙箱的网址,以及生产的网址还在后面。这就解释了为什么只有从沙盒连接时才会破坏事情,为什么事情会过去,但现在不行。更多关于here

问题2)我的本地Python安装不支持TLS 1.2。这里是一个简单的方法来检查:

$ python 
>>> import ssl 
>>> print ssl._PROTOCOL_NAMES 

如果你没有看到PROTOCOL_TLSv1_2列出,这肯定是问题。就我而言,我在Mac OS X 10.11上使用Python的内置版本,在OpenSSL中内置了一个相当旧的版本。

那么如何解决它?好了,于我而言,这工作得很好(复制大多来自here):

$ brew update 
$ brew install openssl 
$ brew link openssl --force 
$ brew install python --with-brewed-openssl 
$ sudo ln -s /usr/local/Cellar/python/2.7.11/bin/python /usr/local/bin/python 

现在,如果你运行我上面列出的测试,你应该看到列出了1.2协议。

这应该使所有的工作再次,祝你好运!