通过PayPal REST API V2用交易ID获取捐赠者信息的技术疑问
解决方案:通过PayPal REST API V2用Transaction ID获取捐赠者信息
正确的API端点与调用方式
你需要使用V2交易报告API来通过Transaction ID精准查询交易详情,获取捐赠者的姓名和邮箱:
端点地址:
- 沙箱环境:
GET https://api-m.sandbox.paypal.com/v2/reporting/transactions - 生产环境:
GET https://api-m.paypal.com/v2/reporting/transactions
- 沙箱环境:
必填请求参数:
transaction_id: 你从JS响应中获取的交易ID- 可选参数
fields: 可以指定返回的字段,比如payer_email,payer_name,transaction_info,避免返回冗余数据
请求示例(Postman):
在请求URL中拼接参数:https://api-m.sandbox.paypal.com/v2/reporting/transactions?transaction_id=你的交易ID&fields=payer_email,payer_name头部带上
Authorization: Bearer 你的OAuth2令牌
为什么之前的尝试失败?
/checkout/orders端点仅用于查询订单资源,而捐赠按钮的即时交易属于「捕获(Capture)」类操作,Order ID和Transaction ID是完全不同的资源标识,所以用Transaction ID调用该端点会返回「资源不存在」。- V1的
/payments/sale端点确实已被废弃,V2中没有直接对应的单一资源端点,但交易报告API完全可以实现按Transaction ID查询特定交易的需求。
更高效的替代方案
如果你的捐赠按钮是基于PayPal JS SDK实现的,其实可以在前端的onApprove回调中直接获取到Order ID,再通过/checkout/orders/{order_id}端点查询payer信息,无需后续二次调用:
paypal.Buttons({ onApprove: function(data, actions) { // 获取orderID console.log(data.orderID); return actions.order.get().then(function(orderDetails) { // 直接提取捐赠者信息 const payerName = `${orderDetails.payer.name.given_name} ${orderDetails.payer.name.surname}`; const payerEmail = orderDetails.payer.email_address; // 执行后续存储逻辑 }); } }).render('#paypal-button-container');
内容的提问来源于stack exchange,提问作者awrd
相关产品推荐
相关产品推荐

