Django集成PayPal Standard Checkout遇TypeError问题求助
问题排查与解决
核心错误原因
TypeError: 'NoneType' object is not callable 出现在 order.create() 行,说明你创建的order不是有效的paypalrestsdk.Order实例——最关键的原因是SDK未完成初始化配置,导致paypalrestsdk.Order()无法生成具备create()方法的实例,反而返回了原始字典或None。此外你的支付捕获逻辑也不符合SDK规范,需要同步修正。
具体解决步骤
1. 完成PayPal SDK初始化
你只导入了SDK但未配置Client ID和Secret,这是遗漏的核心步骤。在视图文件开头添加配置代码:
import paypalrestsdk # 配置SDK,mode根据环境选sandbox(测试)或live(生产) paypalrestsdk.configure({ "mode": "sandbox", "client_id": "你的PayPal Client ID", "client_secret": "你的PayPal Client Secret" })
2. 修正Order创建的参数结构
添加items数组更符合PayPal V2 API规范,可避免SDK解析异常,调整create_order视图:
def create_order(request): transaction = json.loads(request.body) print('Transaction:', transaction) order = paypalrestsdk.Order({ "intent": "CAPTURE", "purchase_units": [{ "amount": { "currency_code": transaction['amount']['currency_code'], "value": transaction['amount']['value'] }, "description": transaction['description'], # 添加items数组,符合PayPal API要求 "items": [ { "name": transaction['description'], "quantity": "1", "unit_amount": { "currency_code": transaction['amount']['currency_code'], "value": transaction['amount']['value'] } } ] }] }) print('Order:', order) # 现在应打印SDK实例,而非原始字典 if order.create(): return JsonResponse({"orderID": order.id}) else: return JsonResponse({"error": str(order.error)}, status=400)
3. 修复支付捕获逻辑
你当前用paypalrestsdk.Capture单独创建捕获对象的方式错误,应通过已找到的Order实例调用capture()方法:
def capture_payment(request): order_id = json.loads(request.body)['orderID'] order = paypalrestsdk.Order.find(order_id) if order and order.status == "CREATED": # 直接调用order的capture方法完成支付捕获 capture_result = order.capture() if capture_result.success(): return JsonResponse({"status": "Payment captured successfully."}) else: return JsonResponse({"error": str(capture_result.error)}, status=400) else: return JsonResponse({"error": "Invalid order ID or order not ready for capture."}, status=400)
4. 额外验证项
- 确认Client ID和Secret对应正确环境(沙箱ID不能用于生产环境,反之亦然)
- 检查PayPal账号是否开启了Standard Checkout的API权限
- 测试时确保服务器可正常访问PayPal API(无防火墙/代理拦截)
内容的提问来源于stack exchange,提问作者David Henson
相关产品推荐
相关产品推荐

