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

Django中PayPal REST SDK授权与执行流程疑问求助

PayPal授权与执行的完整流程(Django + paypalrestsdk)

我来帮你把授权和执行的完整链路理清楚,结合你已经写的代码继续往下走:

1. 你已经完成的:创建支付订单

首先你已经成功创建了Payment对象,这一步是定义支付的金额、货币、回调地址等核心信息,为后续的授权做准备。

2. 引导用户跳转至PayPal授权页面

你写的代码片段已经在提取PayPal的授权跳转链接,补全后的代码应该是这样的:

for link in payment.links:
    if link.rel == "approval_url":
        # 转换为字符串避免GAE的Unicode问题
        approval_url = str(link.href)
        # 在Django里重定向到这个授权页面
        return redirect(approval_url)

用户点击跳转后会进入PayPal的登录/授权页面,完成授权操作后,PayPal会自动跳转到你创建Payment时指定的return_url,并且在URL里带回两个关键参数:paymentId和PayerID。

3. 关键步骤:接收授权参数并执行支付

接下来你需要写一个Django视图来处理PayPal的回调请求,获取这两个参数后执行支付:

from paypalrestsdk import Payment
from django.http import HttpResponseBadRequest, HttpResponse

def paypal_execute(request):
    payment_id = request.GET.get('paymentId')
    payer_id = request.GET.get('PayerID')

    if not payment_id or not payer_id:
        return HttpResponseBadRequest("缺少必要的支付参数")

    # 根据payment_id找到对应的支付对象
    payment = Payment.find(payment_id)

    # 执行支付操作
    if payment.execute({"payer_id": payer_id}):
        # 支付成功后的逻辑:比如更新订单状态、记录支付日志等
        return HttpResponse("支付成功!")
    else:
        # 支付失败的逻辑:打印错误信息、提示用户等
        print(payment.error)
        return HttpResponse("支付失败,请重试")

几个重要的注意事项

  • 确保你在创建Payment对象时,已经正确设置了return_url和cancel_url,这两个地址需要是公网可访问的(测试环境可以用端口映射工具把本地服务暴露出去)。
  • 测试阶段一定要用PayPal的沙箱环境,避免产生真实交易。
  • 执行支付时要做好异常捕获,比如网络请求失败、PayPal返回错误等情况,给用户友好的提示。
  • 支付成功后,建议再次调用Payment.find(payment_id)确认支付状态,确保系统数据一致性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:34:21