paypal java
- IT科技
- 關注:6.44K次
<link rel="stylesheet" href="https://js.how234.com/third-party/SyntaxHighlighter/shCoreDefault.css" type="text/css" /><script type="text/javascript" src="https://js.how234.com/third-party/SyntaxHighlighter/shCore.js"></script><script type="text/javascript"> SyntaxHighlighter.all(); </script>
java paypal是什麼,讓我們一起了解一下?
paypal支付的IPN和PDT兩種通知方式,IPN異步通知,可能會有時延,但可靠性高,當接入方主機不可達時,有重試機制保證IPN通知儘量抵達接入方服務器。接入方收到IPN通知後,需要對其確認。
接入方收到IPN通知後,需要對其確認。確認方法為,把接收到的IPN通知原封不動的作為請求體,調用IPN確認接口。PDT通知是是實時的,但可靠性不高,因為只會通知一次,沒有重試機制,一旦接入方出現主機不可達,這樣的消息將會被丟失。官方推薦,IPN通知和PDT通知最好混合使用,以滿足時效性和可靠性的保證。我們採用了IPN和PDT兩種通知機制。
paypal流程有如下幾步:
1、創建應用程序
2、啟用與palPal的連接
3、應用評論
4、構建按鈕
5、獲取授權碼
6、獲取訪問令牌
7、為access_token交換refresh_token
8、獲取客户信息
9、測試集成
10、上線
通過springboot環境,java如下:
@Controller@RequestMapping("/paypal")public class PaymentController { private Logger log = LoggerFactory.getLogger(getClass()); @Autowired private PaypalService paypalService; // 回調地址 private static Integer orderId = null; private static String SUCCESS_URL = "https://www.baidu.com"; private static String FAIL_URL = "http://www.163.com"; private static String CANCEL_URL = "https://www.autohome.com.cn/shenzhen/?pvareaid=1001299"; @RequestMapping(method = RequestMethod.GET) public String index(){ return "index"; } /** * 訂單支付 * @param * @return */ @RequestMapping(method = RequestMethod.POST, value = "/payment") public String payment(HttpServletRequest request, @RequestBody PaymentEx paymentEx){ if (null == paymentEx || null == paymentEx.getOrderId() || null == paymentEx.getOrderAddressEx() || null == paymentEx.getOrderItemExList()) { return "redirect:" + FAIL_URL; } orderId = paymentEx.getOrderId(); SUCCESS_URL = paymentEx.getSuccessUrl(); FAIL_URL = paymentEx.getFailUrl(); CANCEL_URL = paymentEx.getCancelUrl(); // 調用本地 successPay方法 String successUrl = URLUtils.getBaseURl(request) + "/" + "paypal/successPay"; // 調用本地 cancel方法 String cancelUrl = URLUtils.getBaseURl(request) + "/" + "paypal/cancelPay"; try { Payment payment = paypalService.createPayment(paymentEx, successUrl,cancelUrl); for(Links links : payment.getLinks()){ if(links.getRel().equals("approval_url")){ // 客户付款登陸地址 return "redirect:" + links.getHref(); } } } catch (PayPalRESTException e) { log.error(e.getMessage()); return "redirect:" + FAIL_URL; } return "redirect:" + FAIL_URL; } /** * 取消支付 * @return */ @RequestMapping(method = RequestMethod.GET, value = "/cancelPay") public String cancelPay(){ return "redirect:" + CANCEL_URL; } /** * 支付成功 * @param paymentId * @param payerId * @return */ @RequestMapping(method = RequestMethod.GET, value = "/successPay") public String successPay(@RequestParam("paymentId") String paymentId, @RequestParam("PayerID") String payerId){ try { /** * 支付 */ Payment payment = paypalService.executePayment(paymentId, payerId); /** * 保存支付信息 */ ShopOrderPayment orderPayment = new ShopOrderPayment(); orderPayment.setOrderId(orderId); // 訂單總價 String total = payment.getTransactions().get(0).getAmount().getTotal(); orderPayment.setAmountPaid(new BigDecimal(total)); // 交易號 String transationId = payment.getTransactions().get(0).getRelatedResources().get(0).getSale().getId(); orderPayment.setTransactionId(transationId); paypalService.savePayment(orderPayment); /** * 支付成功重定向頁面 */ if(payment.getState().equals("approved")){ return "redirect:" + SUCCESS_URL; } } catch (PayPalRESTException e) { log.error(e.getMessage()); return "redirect:" + FAIL_URL; } return "redirect:" + FAIL_URL; }}
- 文章版權屬於文章作者所有,轉載請註明 https://shqsg.com/zh-hk/dianzi/41oe33.html