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