You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Plaid连接失败:本地正常PythonAnywhere无法建立连接及产品列表异常

Plaid部署至PythonAnywhere后的连接异常问题

核心问题

本地localhost运行正常,但部署到PythonAnywhere后无法创建Plaid链接令牌,错误日志显示连接被拒绝;同时发现产品列表和国家代码的解析逻辑存在错误。

错误日志

Traceback (most recent call last): 
File "/home/leehrat/.virtualenvs/my-virtualenv/lib/python3.10/site-packages/flask/app.py", line 2525, in wsgi_app 
response = self.full_dispatch_request() 
File "/home/leehrat/.virtualenvs/my-virtualenv/lib/python3.10/site-packages/flask/app.py", line 1822, in full_dispatch_request 
rv = self.handle_user_exception(e) 
File "/home/leehrat/.virtualenvs/my-virtualenv/lib/python3.10/site-packages/flask/app.py", line 1820, in full_dispatch_request 
rv = self.dispatch_request() 
File "/home/leehrat/.virtualenvs/my-virtualenv/lib/python3.10/site-packages/flask/app.py", line 1796, in dispatch_request 
return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args) 
File "/home/leehrat/BudgetApp/website/banking.py", line 182, in create_link_token 
response = client.link_token_create(request) 
File "/home/leehrat/.virtualenvs/my-virtualenv/lib/python3.10/site-packages/plaid/api_client.py", line 769, in __call__ 
return self.callable(self, *args, **kwargs) 
File "/home/leehrat/.virtualenvs/my-virtualenv/lib/python3.10/site-packages/plaid/api/plaid_api.py", line 10492, in __link_token_create 
return self.call_with_http_info(**kwargs) 
File "/home/leehrat/.virtualenvs/my-virtualenv/lib/python3.10/site-packages/plaid/api_client.py", line 831, in call_with_http_info 
return self.api_client.call_api( 
File "/home/leehrat/.virtualenvs/my-virtualenv/lib/python3.10/site-packages/plaid/api_client.py", line 406, in call_api 
return self.__call_api(resource_path, method, 
File "/home/leehrat/.virtualenvs/my-virtualenv/lib/python3.10/site-packages/plaid/api_client.py", line 193, in __call_api 
response_data = self.request( 
File "/home/leehrat/.virtualenvs/my-virtualenv/lib/python3.10/site-packages/plaid/api_client.py", line 452, in request 
return self.rest_client.POST(url, 
File "/home/leehrat/.virtualenvs/my-virtualenv/lib/python3.10/site-packages/plaid/rest.py", line 264, in POST 
return self.request("POST", url, 
File "/home/leehrat/.virtualenvs/my-virtualenv/lib/python3.10/site-packages/plaid/rest.py", line 150, in request 
r = self.pool_manager.request( 
File "/home/leehrat/.virtualenvs/my-virtualenv/lib/python3.10/site-packages/urllib3/request.py", line 78, in request 
return self.request_encode_body( 
File "/home/leehrat/.virtualenvs/my-virtualenv/lib/python3.10/site-packages/urllib3/request.py", line 170, in request_encode_body 
return self.urlopen(method, url, **extra_kw) 
File "/home/leehrat/.virtualenvs/my-virtualenv/lib/python3.10/site-packages/urllib3/poolmanager.py", line 376, in urlopen 
response = conn.urlopen(method, u.request_uri, **kw) 
File "/home/leehrat/.virtualenvs/my-virtualenv/lib/python3.10/site-packages/urllib3/connectionpool.py", line 815, in urlopen 
return self.urlopen( 
File "/home/leehrat/.virtualenvs/my-virtualenv/lib/python3.10/site-packages/urllib3/connectionpool.py", line 815, in urlopen 
return self.urlopen( 
File "/home/leehrat/.virtualenvs/my-virtualenv/lib/python3.10/site-packages/urllib3/connectionpool.py", line 815, in urlopen 
return self.urlopen( 
File "/home/leehrat/.virtualenvs/my-virtualenv/lib/python3.10/site-packages/urllib3/connectionpool.py", line 787, in urlopen 
retries = retries.increment( 
File "/home/leehrat/.virtualenvs/my-virtualenv/lib/python3.10/site-packages/urllib3/util/retry.py", line 592, in increment 
raise MaxRetryError(_pool, url, error or ResponseError(cause)) 
urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='production.plaid.com', port=443): Max retries exceeded with url: /link/token/create (Caused by NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x7f0245b24940>: Failed to establish a new connection: [Errno 111] Connection refused'))

代码解析错误

问题代码

PLAID_PRODUCTS = 'auth,transactions'
products = []
print(f"PLAID_PRODUCTS: {PLAID_PRODUCTS}")
for product in PLAID_PRODUCTS:
    products.append(Products(product))
print(f"products: {products}")

实际输出

2023-07-26 19:22:08 PLAID_PRODUCTS: auth,transactions
2023-07-26 19:22:08 products: [a, u, t, h, ,, t, r, a, n, s, a, c, t, i, o, n, s]

预期输出

PLAID_PRODUCTS: ['auth', 'transactions']
products: [auth, transactions]

国家代码PLAID_COUNTRY_CODES存在同样的遍历解析错误。

创建链接令牌的核心代码

def create_link_token():

    try:
        request = LinkTokenCreateRequest(
            products=products,
            client_name="xxxx",
            country_codes=list(map(lambda x: CountryCode(x), PLAID_COUNTRY_CODES)),
            language='en',
            user=LinkTokenCreateRequestUser(
                client_user_id=current_user.get_id()
            )
        )
        if PLAID_REDIRECT_URI!=None:
            request['redirect_uri']=PLAID_REDIRECT_URI

        # create link token
        response = client.link_token_create(request)
        return jsonify(response.to_dict())
    except plaid.ApiException as e:
        print(f"LinkTokenCreateRequest just didn't work. {e}")
        return json.loads(e.body)

已尝试的排查动作

  • 硬编码产品和国家代码值
  • 添加打印语句调试
  • 切换Plaid sandbox/development/production环境,均失败
  • 已在Plaid控制台配置redirect URL,PythonAnywhere已配置SSL

解决建议

  1. 修复产品和国家代码的解析逻辑
    将字符串按逗号分割后再遍历,避免逐个字符解析的错误:

    # 处理产品列表
    PLAID_PRODUCTS = 'auth,transactions'
    products = [Products(p.strip()) for p in PLAID_PRODUCTS.split(',')]
    
    # 处理国家代码(假设PLAID_COUNTRY_CODES是类似'US,CA'的字符串)
    PLAID_COUNTRY_CODES = 'US,CA'
    country_codes = [CountryCode(c.strip()) for c in PLAID_COUNTRY_CODES.split(',')]
    
  2. 排查PythonAnywhere的网络连接限制

    • 在PythonAnywhere控制台执行curl https://sandbox.plaid.com/link/token/create测试网络连通性
    • 确认Plaid的API域名(如production.plaid.com、sandbox.plaid.com)是否在PythonAnywhere的出站允许列表中
    • 若存在限制,联系PythonAnywhere支持团队开通对应域名的访问权限
  3. 验证Plaid客户端配置
    确保部署环境中的Plaid密钥(client_id、secret)、环境配置与本地一致,且对应环境的权限已正确配置。


内容的提问来源于stack exchange,提问作者Rick Walter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 19:11:03