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

Django集成PayPal沙箱API创建订单后,下一步操作该如何进行?

PayPal沙箱集成后续支付流程操作说明

我正在项目中使用PayPal沙箱账户(商家账户与个人账户),结合Django后端(前端为React.js)集成PayPal API,目前已完成以下操作:

已完成操作

1. 实现Access Token获取逻辑

import requests
import base64

def PaypalToken(client_ID, client_Secret):
    url = "https://api.sandbox.paypal.com/v1/oauth2/token"
    data = {
        "client_id": client_ID,
        "client_secret": client_Secret,
        "grant_type": "client_credentials"
    }
    headers = {
        "Content-Type": "application/x-www-form-urlencoded",
        "Authorization": "Basic {0}".format(base64.b64encode((client_ID + ":" + client_Secret).encode()).decode())
    }

    token = requests.post(url, data, headers=headers)
    return token

x = PaypalToken(my_client_ID, my_client_Secret)
print(x.text)

2. 调用接口创建订单

headers = {"Content-Type": "application/json", "Authorization": 'Bearer ' + token}  # 注意Bearer后需加空格
url = "https://api.sandbox.paypal.com/v2/checkout/orders"
data = '''{
    "intent": "CAPTURE",
    "application_context": {
        "return_url": "https://www.example.com",
        "cancel_url": "https://www.example.com",
        "brand_name": "EXAMPLE INC",
        "landing_page": "BILLING",
        "shipping_preference": "SET_PROVIDED_ADDRESS",
        "user_action": "CONTINUE"
    },
    "purchase_units": [
        {
            "reference_id": "PUHF",
            "description": "Sporting Goods",
            "custom_id": "CUST-HighFashions",
            "soft_descriptor": "HighFashions",
            "amount": {
                "currency_code": "USD",
                "value": "220.00",
                "breakdown": {
                    "item_total": {
                        "currency_code": "USD",
                        "value": "180.00"
                    },
                    "shipping": {
                        "currency_code": "USD",
                        "value": "20.00"
                    },
                    "handling": {
                        "currency_code": "USD",
                        "value": "10.00"
                    },
                    "tax_total": {
                        "currency_code": "USD",
                        "value": "20.00"
                    },
                    "shipping_discount": {
                        "currency_code": "USD",
                        "value": "10"
                    }
                }
            },
            "items": [
                {
                    "name": "T-Shirt",
                    "description": "Green XL",
                    "sku": "sku01",
                    "unit_amount": {
                        "currency_code": "USD",
                        "value": "90.00"
                    },
                    "tax": {
                        "currency_code": "USD",
                        "value": "10.00"
                    },
                    "quantity": "1",
                    "category": "PHYSICAL_GOODS"
                },
                {
                    "name": "Shoes",
                    "description": "Running, Size 10.5",
                    "sku": "sku02",
                    "unit_amount": {
                        "currency_code": "USD",
                        "value": "45.00"
                    },
                    "tax": {
                        "currency_code": "USD",
                        "value": "5.00"
                    },
                    "quantity": "2",
                    "category": "PHYSICAL_GOODS"
                }
            ],
            "shipping": {
                "method": "United States Postal Service",
                "name": {
                    "full_name":"John Doe"
                },
                "address": {
                    "address_line_1": "123 Townsend St",
                    "address_line_2": "Floor 6",
                    "admin_area_2": "San Francisco",
                    "admin_area_1": "CA",
                    "postal_code": "94107",
                    "country_code": "US"
                }
            }
        }
    ]
}'''
result = requests.post(url, data, headers=headers)  # 修正原代码中header为headers

创建订单后得到的响应:

{
  "id": "5O190127TN364715T",
  "status": "CREATED",
  "links": [
    {
      "href": "https://api.paypal.com/v2/checkout/orders/5O190127TN364715T",
      "rel": "self",
      "method": "GET"
    },
    {
      "href": "https://www.paypal.com/checkoutnow?token=5O190127TN364715T",
      "rel": "approve",
      "method": "GET"
    },
    {
      "href": "https://api.paypal.com/v2/checkout/orders/5O190127TN364715T/capture",
      "rel": "capture",
      "method": "POST"
    }
  ]
}

下一步操作流程

1. 前端集成支付授权入口

  • 方式一:在React前端添加支付按钮,点击后跳转到响应中rel: approve对应的PayPal沙箱授权页面,引导用户使用沙箱个人账户登录并完成授权;
  • 方式二:集成PayPal官方React SDK(@paypal/react-paypal-js),渲染内嵌的PayPal支付按钮,通过createOrder回调调用Django后端接口获取订单ID,onApprove回调触发后续捕获流程,避免页面跳转,提升用户体验。

2. 后端处理授权回调与金额捕获

用户完成授权后,PayPal会跳转到你设置的return_url并携带token(即订单ID)参数:

  1. 在Django后端编写视图函数接收该token;
  2. 调用PayPal的捕获订单接口完成金额收取,示例代码:
import requests

def capture_order(order_id, access_token):
    url = f"https://api.sandbox.paypal.com/v2/checkout/orders/{order_id}/capture"
    headers = {
        "Content-Type": "application/json",
        "Authorization": f"Bearer {access_token}"
    }
    response = requests.post(url, headers=headers)
    return response.json()
  1. 捕获成功后(响应状态为COMPLETED),更新数据库中对应订单的支付状态,并执行后续业务逻辑(如发送订单确认通知、标记可发货等)。

3. 处理支付取消场景

若用户在授权页面取消支付,PayPal会跳转到cancel_url,此时需在对应的Django视图中处理订单取消逻辑,比如将订单标记为已取消,或引导用户重新发起支付。

4. 沙箱环境测试验证

使用PayPal沙箱提供的测试个人账户完成全流程测试,验证:

  • 订单状态是否正确更新;
  • 捕获金额与订单金额是否一致;
  • 商家沙箱账户是否收到对应测试款项(可在沙箱商家后台查看交易记录)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 12:15:39