刚开始,准备使用RestTemplate 直接调用接口的方式来实现,但是一直出错,后来就使用API集成的方式来实现,用起来也发现挺简单的。
pom文件
<!-- https://mvnrepository.com/artifact/com.paypal.sdk/rest-api-sdk -->
<dependency>
<groupId>com.paypal.sdk</groupId>
<artifactId>rest-api-sdk</artifactId>
<version>1.13.1</version>
</dependency>
发起支付实现文件:
我只放进去了一些发起支付需要的基本参数,更多参数请参考官方示例:https://github.com/paypal/PayPal-Java-SDK/blob/master/rest-api-sample/src/main/java/com/paypal/api/payments/servlet/PaymentWithPayPalServlet.java
其中clientID, clientSecret为String字符串,请自己定义,mode测试环境为sandbox,正式环境为live(String类型)
APIContext apiContext = new APIContext(clientID, clientSecret, mode);
Payment createdPayment = null;
//建立金额与币种
Amount amount = new Amount();
amount.setCurrency("USD");
amount.setTotal("7.00");
Transaction transaction = new Transaction();
transaction.setAmount(amount);
transaction.setInvoiceNumber("988676777787989");//我只是为了找个点放订单号,可为空
List<Transaction> transactions = new ArrayList<Transaction>();
transactions.add(transaction);
//建立支付方式
Payer payer = new Payer();
payer.setPaymentMethod("paypal");
Payment payment = new Payment();
payment.setIntent("sale");
payment.setPayer(payer);
payment.setTransactions(transactions);
payment.setNoteToPayer("Pay Order ");
RedirectUrls redirectUrls = new RedirectUrls();
redirectUrls.setCancelUrl("hooks/payments/paypal/cancel");
redirectUrls.setReturnUrl("hooks/payments/paypal");//回调路径
payment.setRedirectUrls(redirectUrls);
try {
createdPayment = payment.create(apiContext);
} catch (PayPalRESTException e) {
return "failure";//发起支付失败
}
return "SUCC";//发起支付完成
回调文件:
其中paymentId会给你传回来,根据paymentId获取支付详情并做相应处理
if (paymentId==null)
return ResponseEntity.badRequest().build();
try {
APIContext apiContext = new APIContext(clientID, clientSecret, mode);
Payment payment = Payment.get(apiContext, paymentId);
//根据实际情况自行处理部分
*******
}catch (Exception e){
return "failure";
}
return"SUCC";
其实就是这么简单,哈哈!