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

Django集成PayPal SDK出现HttpResponse无get属性报错咨询

解决方案

核心原因

PayPal SDK返回的paypalhttp.http_response.HttpResponse是SDK自定义的独立响应类,未继承Django/DRF要求的django.http.HttpResponse类,所以直接返回会触发视图的返回类型校验报错。

具体操作步骤

1. 提取PayPal响应数据

PayPal SDK返回的响应对象包含3个可直接读取的核心属性:

  • result:结构化业务数据,包含交易状态、捕获ID、金额等业务字段
  • status_code:PayPal接口返回的HTTP状态码
  • headers:PayPal接口返回的响应头信息

2. 封装为DRF标准响应返回

示例代码如下:

from rest_framework.views import APIView
from rest_framework.response import Response
from paypalcheckoutsdk.orders import OrdersCaptureRequest
from paypalhttp.http_error import HttpError

class CaptureOrderView(APIView):
    def post(self, request, order_id):
        # 构造PayPal捕获请求
        capture_request = OrdersCaptureRequest(order_id)
        try:
            # 执行请求获取PayPal SDK返回的响应
            paypal_resp = self.client.execute(capture_request)
        except HttpError as e:
            # 捕获接口调用异常,封装错误信息返回
            return Response(
                data={
                    "error": "交易捕获失败",
                    "error_details": e.result.__dict__
                },
                status=e.status_code
            )
        
        # 提取业务数据封装为返回值
        return Response(
            data={
                "status": paypal_resp.result.status,
                "capture_id": paypal_resp.result.purchase_units[0].payments.captures[0].id,
                "amount": paypal_resp.result.purchase_units[0].amount.value,
                "raw_result": paypal_resp.result.__dict__
            },
            status=paypal_resp.status_code
        )

补充说明

如果不需要使用DRF的Response,也可以用Django原生的JsonResponse封装提取到的业务数据,只要符合Django视图的返回类型要求即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 08:54:05