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
相关产品推荐
相关产品推荐

