使用PayPal Orders API v2支付获批后退款,需额外调用API吗?
PayPal Orders API v2 款项退回问题解决
是的,你必须调用订单捕获API,这是你缺失的关键步骤。
当你在创建订单时设置intent: 'CAPTURE',整个支付流程分为两步:
- 第一步:创建订单并引导用户完成授权,此时订单状态变为
APPROVED,银行账户扣款只是临时授权,资金并未实际转入你的账户 - 第二步:调用捕获API,将授权的资金正式转入你的账户
如果跳过第二步,PayPal会在一段时间后(通常数小时内)自动取消这笔授权,导致款项退回至用户账户。
捕获API调用示例(适配你的代码风格)
def capture_paypal_order(token, order_id): capture_headers = { 'Content-Type': 'application/json', 'Authorization': f'Bearer {token}' } response = requests.post(f"https://{paypal_url}/v2/checkout/orders/{order_id}/capture", headers=capture_headers, data=json.dumps({})) # 空请求体即可 return response
完整流程补充
- 调用你已有的
create_paypal_payment函数,从响应中提取id字段(即order_id) - 用户通过返回的
payer_action链接完成支付,查询订单状态确认变为APPROVED - 立即调用上述
capture_paypal_order函数,传入token和order_id - 检查捕获接口的响应,确认订单状态变为
COMPLETED,此时资金会正式留存,不会被退回
注意:捕获操作需在订单APPROVED状态后尽快执行,避免因超时自动取消授权。
内容的提问来源于stack exchange,提问作者Ali Joghataee
相关产品推荐
相关产品推荐

