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; ????} }
以上就是小編今天的分享了,希望可以幫助到大家。