//直接上代码 public class PaypalRefundConfig { private String clientId; private String clientSecret; private String endpointMode; // public String getClientId() { return clientId; } public void setClientId(String clientId) { this.clientId = clientId; } public String getClientSecret() { return clientSecret; } public void setClientSecret(String clientSecret) { this.clientSecret = clientSecret; } public String getEndpointMode() { return endpointMode; } public void setEndpointMode(String endpointMode) { this.endpointMode = endpointMode; } } public class PaypalRefundRequest { private String currency = "USD"; private String tradeNo; // 交易号 private String saleId; // Transaction ID private BigDecimal amount; // 退款总金额 private String reason; // 退款理由 public String getTradeNo() { return tradeNo; } public void setTradeNo(String tradeNo) { this.tradeNo = tradeNo; } public String getSaleId() { return saleId; } public void setSaleId(String saleId) { this.saleId = saleId; } public String getCurrency() { return currency; } public void setCurrency(String currency) { this.currency = currency; } public BigDecimal getAmount() { return amount; } public void setAmount(BigDecimal amount) { this.amount = amount; } public String getReason() { return reason; } public void setReason(String reason) { this.reason = reason; } } //下面帮助类 public class PaypalRefundHelper { public static PaypalRefundReturn refundSale(PaypalRefundConfig config, PaypalRefundRequest request) { APIContext apiContext = new APIContext(config.getClientId(), config.getClientSecret(), config.getEndpointMode()); // ###Sale // A sale transaction. // Create a Sale object with the // given sale transaction id. // ###Refund // A refund transaction. // Use the amount to create // a refund object RefundRequest refund = new RefundRequest(); // ###Amount // Create an Amount object to // represent the amount to be // refunded. Create the refund object, if the refund is partial Amount amount = new Amount(); amount.setCurrency(request.getCurrency()); amount.setTotal(PayUtil.format(request.getAmount())); refund.setAmount(amount); refund.setReason(request.getReason()); try { if(request.getSaleId() == null) { //注意这段代码,获取saleId Payment payment = Payment.get(apiContext, request.getTradeNo()); Transaction transaction = payment.getTransactions().get(0); RelatedResources resources = transaction.getRelatedResources().get(0); String id = resources.getSale().getId(); request.setSaleId(id); } // ### Api Context // Pass in a `ApiContext` object to authenticate // the call and to send a unique request id // (that ensures idempotency). The SDK generates // a request id if you do not pass one explicitly. // Refund by posting to the APIService // using a valid AccessToken Sale sale = new Sale(); sale.setId(request.getSaleId()); DetailedRefund res = sale.refund(apiContext, refund); PaypalRefundReturn r = new PaypalRefundReturn(); r.setState(res.getState()); r.setAmount(res.getAmount().getTotal()); r.setCurrency(res.getAmount().getCurrency()); return r; } catch (PayPalRESTException e) { throw new IllegalStateException("failed to refund saleId=" + request.getTradeNo(), e); } } } //下面测试代码 public static void main(String[] args) { //paypal退款很简单,只需要回去saleId就OK了(详见PaypalRefundHelper类) PaypalRefundConfig config = new PaypalRefundConfig(); config.setClientId("******"); config.setClientSecret("****"); config.setEndpointMode("**"); PaypalRefundRequest req = new PaypalRefundRequest(); req.setCurrency("USD"); req.setAmount(new BigDecimal("0.01"));//测试为0.01 req.setReason("测试"); //交易单号 req.setTradeNo("121212"); PaypalRefundReturn refund = PaypalRefundHelper.refundSale(config, req); System.out.println(refund); }