如何通过Python桌面应用创建PayPal付款请求并追踪进度
解决方案:用Python创建PayPal个人付款请求并追踪进度
PayPal REST SDK主要面向商家交易场景(比如在线结账),确实不支持创建个人用户网页端的那种标准付款请求(Request Money)。你可以通过PayPal Classic NVP API来实现需求,具体方法如下:
一、使用Classic API创建付款请求
Classic API的RequestMoney操作专门用于生成个人付款请求,步骤如下:
1. 获取Classic API凭证
登录PayPal开发者平台,在你的REST应用详情页中找到「Classic API凭证」,复制对应的用户名、密码和签名(沙箱与生产环境的凭证需分开使用)。
2. Python请求示例代码
用requests库直接构造POST请求即可:
import requests from urllib.parse import parse_qs # 配置凭证与环境 PAYPAL_USERNAME = "你的Classic API用户名" PAYPAL_PASSWORD = "你的Classic API密码" PAYPAL_SIGNATURE = "你的Classic API签名" PAYPAL_ENV = "sandbox" # 生产环境改为"production" # 构造付款请求参数 request_params = { "METHOD": "RequestMoney", "VERSION": "124.0", "EMAIL": "收款方的PayPal邮箱", "CURRENCYCODE": "USD", # 支持CNY、EUR等标准货币代码 "AMT": "50.00", # 请求金额,字符串格式 "SUBJECT": "朋友聚餐分摊费用", "NOTE": "2024年5月15日聚餐费用" } # 发送请求 api_url = f"https://api-3t.{PAYPAL_ENV}.paypal.com/nvp" response = requests.post(api_url, auth=(PAYPAL_USERNAME, PAYPAL_PASSWORD), data=request_params) response_data = parse_qs(response.text) # 处理响应 if response_data.get("ACK") == ["Success"]: request_id = response_data["REQUESTID"][0] print(f"付款请求创建成功,请求ID: {request_id}") else: error_msg = response_data.get("L_LONGMESSAGE0", ["未知错误"])[0] print(f"创建失败: {error_msg}")
二、追踪付款请求进度
用Classic API的GetTransactionDetails操作,传入创建时拿到的REQUESTID即可查询状态:
def get_request_status(request_id): status_params = { "METHOD": "GetTransactionDetails", "VERSION": "124.0", "TRANSACTIONID": request_id } response = requests.post(api_url, auth=(PAYPAL_USERNAME, PAYPAL_PASSWORD), data=status_params) response_data = parse_qs(response.text) if response_data.get("ACK") == ["Success"]: payment_status = response_data["PAYMENTSTATUS"][0] print(f"当前状态: {payment_status}") # 可额外获取付款时间、付款方信息等字段 return payment_status else: error_msg = response_data.get("L_LONGMESSAGE0", ["未知错误"])[0] print(f"查询失败: {error_msg}") return None # 使用示例 # get_request_status("你的请求ID")
常见付款状态说明:
Completed:付款已完成Pending:付款待确认Denied:付款请求被拒绝Cancelled:付款请求已取消
注意事项
- 测试时必须使用PayPal沙箱账号,避免产生真实交易
- 个人PayPal账号默认支持Classic API,无需额外申请权限
- 确保参数格式正确(比如金额为字符串类型,货币代码符合PayPal规范)
内容的提问来源于stack exchange,提问作者Plero
相关产品推荐
相关产品推荐

