PayPal API问题:使用Java如何从PayPal支付记录中获取sale_id?
Java环境获取PayPal交易sale_id方案
前置依赖
确保项目引入PayPal官方Java REST SDK,Maven依赖配置如下:
<dependency> <groupId>com.paypal.sdk</groupId> <artifactId>rest-api-sdk</artifactId> <version>1.14.0</version> </dependency>
具体实现步骤
- 初始化API调用上下文,替换为你自己的客户端凭证和环境参数
import com.paypal.api.payments.*; import com.paypal.base.rest.APIContext; import com.paypal.base.rest.PayPalRESTException; // 初始化上下文,生产环境将第三个参数改为live APIContext apiContext = new APIContext("你的ClientID", "你的ClientSecret", "sandbox");
- 用你已有的PAYID开头的支付ID调用支付查询接口,获取完整支付资源
// 替换为你拿到的PAY开头的支付ID String payId = "PAY-XXXXXXXXXXXXXX"; Payment payment = Payment.get(apiContext, payId);
- 遍历支付资源提取sale_id
String saleId = null; for (Transaction txn : payment.getTransactions()) { for (RelatedResources res : txn.getRelatedResources()) { Sale sale = res.getSale(); if (sale != null) { saleId = sale.getId(); break; } } if (saleId != null) break; }
- 拿到sale_id后即可执行退款操作,示例代码如下:
// 构造退款参数 Amount refundAmount = new Amount(); refundAmount.setCurrency("USD"); refundAmount.setTotal("9.99"); // 退款金额需与支付币种一致,支持部分退款 Refund refundRequest = new Refund(); refundRequest.setAmount(refundAmount); // 执行退款 Sale sale = new Sale(); sale.setId(saleId); Refund refundResult = sale.refund(apiContext, refundRequest);
补充说明
如果你使用的是PayPal v2版本的订单接口,支付成功后返回的是O开头的订单ID,不需要再查询sale_id:直接调用订单查询接口后,从
purchase_units下的payments.captures数组中提取capture_id,使用该ID即可直接发起退款。
内容的提问来源于stack exchange,提问作者Ulyses Evans
相关产品推荐
相关产品推荐

