2017-10-17 22 views
2

后进行Stripe电话如stripe.Customer.create(email = email)错误与谷歌App Engine的条纹通话甚至升级到最新

APIError: Stripe no longer supports API requests made with TLS 1.0. 
Please initiate HTTPS connections with TLS 1.2 or later. 
You can learn more about this at https://stripe.com/blog/upgrading-tls. 

此错误显示了只在本地开发服务器上时,但不能在我收到这样的运行时错误生产。我当然有升级我带库这样的:

pip install -t lib --upgrade stripe==1.19.1 

为了消除这种是与pip upgrade的问题,我也试图卸下旧的lib /条目录的可能性和它的相关性,其次是全新安装。但这并没有什么区别。

+1

那么很可能需要完全重新安装Python的OpenSSL的一次已经更新。您还需要确保编译Python * AGAINST *即OpenSSL版本。我对Google App Engine的工作原理并不熟悉,看到他们事实上的python安装不会更新,这有些令人惊讶。在这里接触他们的开发者支持可能是明智的。 – korben

回答

2

请问您的appengine_config.py有这个吗?

import os 

from google.appengine.ext import vendor 
from google.appengine.ext.appstats import recording 

appstats_CALC_RPC_COSTS = True 

# Add any libraries installed in the "lib" folder. 
vendor.add('lib') 


def webapp_add_wsgi_middleware(app): 
    app = recording.appstats_wsgi_middleware(app) 
    return app 

# if on localhost 
if os.environ.get('SERVER_SOFTWARE', '').startswith('Development'): 
    import imp 
    import os.path 
    import inspect 
    from google.appengine.tools.devappserver2.python import sandbox 

    sandbox._WHITE_LIST_C_MODULES += ['_ssl', '_socket'] 
    # Use the system socket. 

    real_os_src_path = os.path.realpath(inspect.getsourcefile(os)) 
    psocket = os.path.join(os.path.dirname(real_os_src_path), 'socket.py') 
    imp.load_source('socket', psocket) 
else: 
    # Doing this on dev_appserver/localhost seems to cause outbound https requests to fail 
    from lib import requests 
    from lib.requests_toolbelt.adapters import appengine as requests_toolbelt_appengine 

    # Use the App Engine Requests adapter. This makes sure that Requests uses 
    # URLFetch. 
    requests_toolbelt_appengine.monkeypatch() 

我复制了我的整个文件,因为我不确定你已经有哪些部分,但关键部分是最终的if-else。我经历了一大堆麻烦,让TLS 1.2在prod上工作,主要归结于为App Engine的特殊ssl库& requests_toolbelt_appengine.monkeypatch()指定版本2.7.11

像你这样在我的本地主机上打破了SSL,所以现在我只在产品上做requests_toolbelt_appengine.monkeypatch(),并且在本地主机上我做了'白名单本地套接字库'的技巧,你可能已经看到了。部分原因是你使用的是什么样的组合版本。希望这有助于。

从我app.yaml值得注意的项目:

env_variables: 
    theme: 'default' 
    GAE_USE_SOCKETS_HTTPLIB : 'true' # TLS 1.2 

libraries: 
- name: jinja2 
    version: "2.6" 
- name: webapp2 
    version: "2.5.2" 
- name: markupsafe 
    version: "0.15" 
- name: ssl 
    version: "2.7.11" # TLS 1.2 
- name: pycrypto 
    version: "2.6" 
- name: lxml 
    version: latest 

而且我使用python-请求2.18.2

编辑: 在我~/.bash_profile,谷歌云SDK加入到我的路径:

export PATH="/Users/alex/google-cloud-sdk/platform/google_appengine/:$PATH"

如果我去那个文件夹,我可以跟着进口from google.appengine.tools.devappserver2.python import sandbox一路贯穿。 (包括下面的截图)

from google.appengine.tools.devappserver2.python import sandbox

+0

我明白你的意思了。但我现在卡住了,因为导入'沙箱'失败。我是否需要做一些特殊的事情来从tools.devappserver2导入?快速搜索没有透露太多。 –

+0

对我来说,这是在我的谷歌云SDK中,我编辑了我的答案,包括一个截图。你有没有试过在你的文件系统中搜索'devappserver2'?如果你能找到它,你应该只需要修复你的路径。如果它是你的路径,那么我会想象你无法从命令行使用'appcfg.py','dev_appserver.py'和'remote_api_shell.py'。我几年前安装了google-cloud-sdk,可能他们重组了一些东西...... – Alex

+0

这是一个很好的帮助。在我的系统上,它位于'path/upto/python/runtime'下 - 所以现在可以访问这个'sandbox'。但是我仍然无法获得tls1.2的开发环境工作。我认为罪魁祸首是我系统上的旧图书馆。让我再看看这一点,当我得到这个工作时我会更新。 –