JavaEE PayPal退款流程
- 要求:
-
- 交易状态必须结算或结算。
-
- 退款金额不得超过原始交易的剩余未退款金额。
-
- 交易完全退还后不能退款。
-
- 在托管中进行的交易只能全额退还。尝试部分退还托管交易将导致验证错误
退款中的the_transaction_id:即为下单时成功返回的transaction.getId()
1. 请求退款
您可以退款具有结算或结算状态的交易。如果交易尚未开始结算,请Transaction.void()改用。如果您未指定退款金额,则整笔交易金额将退还。
退款参数:
参数 | 是否必须 | 说明 |
---|---|---|
transactionId | 是 | 唯一的事务标识符 |
.amount(…) | 否 | 退款金额。该值必须大于0,并且不能超过交易的总金额。如果您未指定退款金额,则整笔交易金额将退还。 |
orderId(…) | 否 | 如果您想通过getOrderId()与原始交易不同的交易,请使用此参数。否则,原始交易的orderId()价值将被复制到退款。在PayPal交易中,此字段映射到PayPal发票号码。PayPal帐单号码必须在您的PayPal商业帐户中唯一。PayPal交易的最大长度为255个字符或127个字符。 |
Result<Transaction> result = gateway.transaction().refund("the_transaction_id");
复制代码
注⚠️:如果交易无法找到,它会抛出一个NotFoundException。
2. 部分退款(只退其中一部分)
如果只想退还部分交易,请指定退款金额(即上述参数:.amount(…)):
Result<Transaction> result = gateway.transaction().refund(
"a_transaction_id",
new BigDecimal("50.00")
);
result.isSuccess();
// true
Transaction refund = result.getTarget();
refund.getType();
// Transaction.Type.CREDIT
refund.getAmount();
// 50.00
Result<Transaction> result = gateway.transaction().refund(
"a_transaction_id",
new BigDecimal("10.00")
);
result.isSuccess();
// true
Transaction refund = result.getTarget();
refund.getType();
// Transaction.Type.CREDIT
refund.getAmount();
// 10.00
复制代码
-
PayPal支持给定交易的单个和多个部分退款。只要退款金额小于初始交易金额,可以随时随地多次退款交易。
-
如果已经部分退款交易,并且没有指定余额而执行其他退款,那么PayPal将退还剩余未退款的交易金额。
注⚠️:最好的做法是在创建更多相同交易之前,允许每个部分退款呼叫成功完成。如果单个事务有太多的同时退款请求,有些可能会失败,从网关返回一个错误。
3. 退款结果
如果处理器拒绝退款交易的捕获,则交易对象将具有processorSettlementResponseCode可用。
Transaction transaction = result.getTransaction();
transaction.getStatus();
// Transaction.Status.SETTLEMENT_DECLINED
transaction.getProcessorSettlementResponseCode();
// e.g. "4001"
transaction.getProcessorSettlementResponseText();
// e.g. "Settlement Declined"
复制代码