如何为PayPal.me支付创建PayPal WebHook对接Flask服务器?
PayPal WebHook 问题解答
PayPal.me 支付对应的事件类型
PayPal.me 是简化的个人收款链接,支付完成后触发的核心事件是 PAYMENT.SALE.COMPLETED——当付款确认到账时就会触发这个事件。如果后续有退款操作,还会触发 PAYMENT.SALE.REFUNDED 这类关联事件。
个人账户能否创建接收直接支付的WebHook
可以,但普通个人账户不行,得先升级成高级账户(Premier Account)或者企业账户(Business Account)。升级后,去PayPal开发者后台创建WebHook,订阅收款相关的事件即可。
Flask 对接WebHook的关键注意点
- 你的Flask端点必须是公网可访问的,本地调试可以用ngrok之类的工具转成公网地址,localhost没法被PayPal调用
- 一定要验证WebHook签名,防止伪造请求,给你一段Flask示例代码:
from flask import Flask, request import paypalrestsdk app = Flask(__name__) # 配置PayPal信息,生产环境把mode改成"live" paypalrestsdk.configure({ "mode": "sandbox", "client_id": "你的Client ID", "client_secret": "你的Client Secret" }) @app.route('/paypal-webhook', methods=['POST']) def handle_paypal_webhook(): # 验证WebHook事件的合法性 try: webhook_event = paypalrestsdk.WebhookEvent.verify(request.headers, request.data) except Exception as e: print(f"WebHook验证失败: {e}") return '', 400 # 处理收款完成事件 if webhook_event.event_type == 'PAYMENT.SALE.COMPLETED': sale_details = webhook_event.resource print(f"收到付款,交易ID: {sale_details.id},金额: {sale_details.amount.total}") # 这里可以加你自己的业务逻辑,比如更新订单状态、发通知等 # 必须返回200,否则PayPal会重复发送请求 return '', 200 if __name__ == '__main__': app.run(host='0.0.0.0', port=5000)
- 记住给PayPal返回
200 OK,不然它会不断重试发送WebHook请求
内容的提问来源于stack exchange,提问作者cartier
相关产品推荐
相关产品推荐

