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