Django服务器调用Google Pay API实现自动退款:找不到可用开放API
在Django中实现Google Pay自动退款的方案
1. 对应API说明
你要找的是Google Pay REST API的退款接口,这个完全支持服务器端(包括Django)调用,专门处理已完成支付的自动退款。前提是你的支付流程是通过Google Pay完成的,且已经在Google商家后台完成了商家认证和API权限配置。
2. 先搞定身份验证
Django服务器需要通过OAuth2服务账号完成API身份验证,步骤如下:
- 去Google Cloud Console创建服务账号,下载JSON格式的密钥文件
- 给该服务账号分配
payments.refunds.create等相关退款权限 - 在Django项目里用
google-auth和google-auth-oauthlib库生成认证令牌
Django视图中的示例代码:
from google.oauth2 import service_account import requests from django.http import JsonResponse # 加载服务账号密钥 SCOPES = ['https://www.googleapis.com/auth/payments_refund'] SERVICE_ACCOUNT_FILE = '/path/to/your/service-account-key.json' credentials = service_account.Credentials.from_service_account_file( SERVICE_ACCOUNT_FILE, scopes=SCOPES) auth_token = credentials.token
3. 调用退款API实现自动退款
在Django视图中构建退款请求,发送POST请求到Google Pay的API端点:
def process_google_pay_refund(request): # 从请求获取必要参数(根据你的业务逻辑调整来源,比如订单模型) payment_order_id = request.POST.get('payment_order_id') refund_amount = request.POST.get('refund_amount') # 注意:单位是最小货币单位,比如人民币分、美元分 currency_code = 'CNY' # 替换成你实际使用的货币代码 # 构建退款请求体 refund_payload = { "paymentOrderId": payment_order_id, "amount": { "value": refund_amount, "currencyCode": currency_code }, "reason": "Customer initiated refund request" } # Google Pay退款API端点 api_url = 'https://payments.googleapis.com/v1/refunds' headers = { 'Authorization': f'Bearer {auth_token}', 'Content-Type': 'application/json' } response = requests.post(api_url, json=refund_payload, headers=headers) if response.status_code == 200: # 退款成功,更新本地订单状态等逻辑 return JsonResponse({'status': 'success', 'refund_details': response.json()}) else: # 处理错误,比如记录日志、返回错误信息 return JsonResponse({'status': 'failed', 'error_msg': response.text}, status=response.status_code)
4. 重要注意事项
- 只有原支付订单的归属商家才能发起退款请求,权限不足会返回403错误
- 退款金额不能超过原支付金额,且货币代码必须与原支付一致
- 建议用Celery等异步任务框架处理退款请求,避免阻塞HTTP响应
- 务必处理API返回的各种错误码,比如404表示订单不存在,400表示请求参数错误
内容的提问来源于stack exchange,提问作者SevanDY
相关产品推荐
相关产品推荐

