如何通过PayPal API获取用户当前有效的定期付款数据?
可以通过PayPal API获取用户有效定期付款(订阅)数据
你当前的代码仅完成了OAuth2授权流程的第一步——生成用户授权URL,还需完成后续令牌获取和订阅数据查询步骤,具体操作如下:
1. 确认权限范围
你的SCOPES配置方向正确,若仅需读取数据,建议使用更严格的只读权限,避免不必要的权限风险:
SCOPES = 'openid profile email https://uri.paypal.com/services/subscriptions/read'
2. 处理授权回调,获取访问令牌
用户访问授权URL完成授权后,PayPal会将授权码(code参数)回调到你配置的REDIRECT_URL。需新增Lambda函数处理该回调,用授权码换取访问令牌:
import json import base64 import requests def lambda_callback_handler(event, context): CLIENT_ID = '*********' CLIENT_SECRET = '*********' # 需从PayPal开发者平台获取客户端密钥 REDIRECT_URL = '....' # 从回调请求中提取授权码 code = event['queryStringParameters']['code'] # 构造令牌请求 token_url = 'https://api-m.sandbox.paypal.com/v1/oauth2/token' headers = { 'Content-Type': 'application/x-www-form-urlencoded', 'Authorization': 'Basic ' + base64.b64encode(f"{CLIENT_ID}:{CLIENT_SECRET}".encode()).decode() } data = { 'grant_type': 'authorization_code', 'code': code, 'redirect_uri': REDIRECT_URL } response = requests.post(token_url, headers=headers, data=data) token_data = response.json() # 保存access_token和refresh_token(建议存入数据库或缓存) access_token = token_data['access_token'] refresh_token = token_data['refresh_token'] # 调用订阅查询接口(见下一步) active_subs = get_active_subscriptions(access_token) return { 'statusCode': 200, 'body': json.dumps(active_subs) }
3. 查询用户有效订阅数据
拿到access_token后,调用PayPal Subscriptions API的列表接口,筛选状态为ACTIVE的有效订阅:
def get_active_subscriptions(access_token): subscriptions_url = 'https://api-m.sandbox.paypal.com/v1/billing/subscriptions' headers = { 'Authorization': f'Bearer {access_token}', 'Content-Type': 'application/json' } params = { 'status': 'ACTIVE' # 可选值还包括INACTIVE、CANCELLED等,按需筛选 } response = requests.get(subscriptions_url, headers=headers, params=params) return response.json()
返回结果包含有效订阅的详细信息,比如订阅ID、计费周期、金额、创建时间等。
关键注意事项
REDIRECT_URL必须与PayPal开发者平台中应用配置的回调地址完全一致,否则授权会失败。- 沙箱环境(
sandbox.paypal.com)和生产环境(paypal.com)的API URL要严格区分,不可混用。 - 访问令牌(
access_token)有效期为8小时,过期后可使用refresh_token重新获取,无需用户再次授权。
内容的提问来源于stack exchange,提问作者Davide Paolillo
相关产品推荐
相关产品推荐

