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

PayPal API返回invalid_client:Flask部署Lightsail后支付失败排查

PayPal支付在AWS Lightsail部署后401认证失败排查思路

问题背景

用Flask(Python)开发的网页,本地VS Code环境中PayPal支付流程可正常运行,但部署到AWS Lightsail后,调用捕获订单API时返回401错误,具体信息如下:

HTTPError: Status Code 401, Response Text: {"error":"invalid_client","error_description":"Client Authentication failed"}

已确认PAYPAL_CLIENT_ID和paypal_secret正确,Lightsail开放端口包括SSH(TCP 22)、DNS(TCP/UDP 53)、HTTP(TCP 80)、HTTPS(TCP 443),且PayPal控制台未显示这些失败的API调用,怀疑是网络问题。

相关代码:

def approve_payment(order_id):
    print("approve_payment", order_id)
    try:
        api_link = f"https://api-m.sandbox.paypal.com/v2/checkout/orders/{order_id}/capture"

        headers = {
            "Content-Type": "application/json",
        }
        print("Headers: ", headers)
        print("api_link", api_link)

        response = requests.post(url=api_link, headers=headers, auth=(paypal_client_id, paypal_secret))
        response.raise_for_status()
        json_data = response.json()
        print("json_data", json_data)
        return json_data
    except requests.exceptions.HTTPError as err:
        # Handle HTTP errors
        status_code = err.response.status_code
        response_text = err.response.text
        # Log or print the details for debugging
        print(f"HTTPError: Status Code {status_code}, Response Text: {response_text}")
        return {"error": "HTTPError", "status_code": status_code, "response_text": response_text}
        
    except Exception as e:
        # Handle other exceptions
        return {"error": "Exception", "message": str(e)}

排查思路

  • 验证环境变量加载:在Lightsail服务器上输出paypal_client_id和paypal_secret的实际值(注意脱敏),确认部署环境的凭据与本地一致,排查是否存在环境变量配置错误(如大小写、多余引号、未正确注入等)。
  • 测试网络连通性:在Lightsail服务器终端执行curl命令直接调用PayPal API,验证是否能正常通信:
    # 测试基础连通性
    curl -v https://api-m.sandbox.paypal.com/v2/checkout/orders/{替换为实际order_id}/capture
    # 带认证信息测试
    curl -v -u "你的Client ID:你的Secret" https://api-m.sandbox.paypal.com/v2/checkout/orders/{替换为实际order_id}/capture
    
    如果curl也返回认证失败或无法连接,说明网络层面存在限制,需检查Lightsail安全组的出站规则是否允许访问PayPal的443端口。
  • 确认沙盒环境一致性:确保本地和部署环境使用的都是PayPal沙盒环境的凭据,避免生产/沙盒凭据混用。
  • 检查请求认证头:在代码中添加日志,打印实际发送的Authorization头:
    print("Authorization Header:", response.request.headers.get('Authorization'))
    
    验证该头是否为Basic 开头的Base64编码字符串,且解码后与Client ID:Secret一致。
  • 排查DNS解析:在Lightsail服务器上执行nslookup api-m.sandbox.paypal.com,确认能解析到正确的IP地址,排查DNS配置是否异常。
  • 检查服务器内部防火墙:确认Lightsail服务器的本地防火墙(如iptables)未限制出站HTTPS请求,必要时临时关闭防火墙测试。
  • 抓包验证请求传输:使用tcpdump工具在服务器上抓包,检查请求是否成功发送到PayPal服务器,是否收到响应,进一步定位网络问题。

内容的提问来源于stack exchange,提问作者Diego Emilio Morales Ramírez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 20:28:18