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

Flask集成PayPal遇无限加载异常求助(仅使用Python开发)

解决Flask集成PayPal标准结账无限加载问题

排查前端Promise错误

  1. 打开浏览器开发者工具(F12)切换到控制台标签,查看是否有未捕获的Promise异常或网络请求失败:
    • 确认PayPal JS脚本加载正常,未被浏览器拦截
    • 检查createOrder和onApprove函数的报错信息,这两个Promise函数静默失败会导致按钮无限加载
  2. 给Promise添加错误捕获逻辑,避免静默失败:
    paypal.Buttons({
      createOrder: function(data, actions) {
        return actions.order.create({
          purchase_units: [{
            amount: { value: '10.00' }
          }]
        }).catch(err => {
          console.error('创建订单失败:', err);
          throw err; // 抛出错误让PayPal处理,避免加载卡住
        });
      },
      onApprove: function(data, actions) {
        return actions.order.capture().then(function(details) {
          fetch('/paypal-success', {
            method: 'POST',
            body: JSON.stringify({orderID: data.orderID}),
            headers: {'Content-Type': 'application/json'}
          });
        }).catch(err => {
          console.error('捕获订单失败:', err);
        });
      }
    }).render('#paypal-button-container');
    

校验Flask后端配置

  1. 确认PayPal密钥环境匹配:
    • 沙箱环境用沙箱密钥,生产环境用生产密钥,禁止混用
    • 用环境变量加载密钥,避免硬编码:
      import os
      from flask import Flask
      
      app = Flask(__name__)
      app.config['PAYPAL_CLIENT_ID'] = os.getenv('PAYPAL_CLIENT_ID')
      app.config['PAYPAL_CLIENT_SECRET'] = os.getenv('PAYPAL_CLIENT_SECRET')
      
  2. 解决跨域问题:若前后端域名不同,安装flask-cors并配置:
    from flask_cors import CORS
    CORS(app)
    

验证PayPal API访问

  1. 确认账号权限:沙箱账号需创建测试商家/买家账号,且启用标准结账功能
  2. 测试API请求连通性:在Flask中添加测试代码排查接口返回:
    import requests
    
    def get_paypal_token():
      url = 'https://api-m.sandbox.paypal.com/v1/oauth2/token'
      auth = (app.config['PAYPAL_CLIENT_ID'], app.config['PAYPAL_CLIENT_SECRET'])
      response = requests.post(url, auth=auth, data={'grant_type': 'client_credentials'})
      return response.json().get('access_token')
    
    def test_create_order():
      token = get_paypal_token()
      url = 'https://api-m.sandbox.paypal.com/v2/checkout/orders'
      headers = {
        'Content-Type': 'application/json',
        'Authorization': f'Bearer {token}'
      }
      payload = {
        "intent": "CAPTURE",
        "purchase_units": [{"amount": {"currency_code": "USD", "value": "10.00"}}]
      }
      response = requests.post(url, json=payload, headers=headers)
      print(response.json()) # 查看API返回的具体错误信息
    

其他注意事项

  • 本地测试用localhost域名,PayPal沙箱对其兼容性更好
  • 页面中仅渲染一个PayPal按钮实例,避免重复渲染冲突

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 06:40:42