-
Notifications
You must be signed in to change notification settings - Fork 919
paypal_支付回调消息回复
精致的吴彦祖 edited this page Dec 14, 2020
·
1 revision
PayOrder payOrder = new PayOrder("subject say something", "Order payment", new BigDecimal(4),
StringUnits.getUUID(),
PayPalTransactionType.sale);
payOrder.setCurType(DefaultCurType.USD);
// orderInfo函数是做一个给paypal发送预订单的操作 具体逻辑请看orderInfo函数源码
Map orderInfo = paypalService.orderInfo(payOrder);
// buildRequest校验请求是否正确,具体逻辑请看buildRequest函数,返回的是一个发起支付的url。
String result=paypalService.buildRequest(orderInfo, MethodType.POST);
return result;
public Map<String, Object> orderInfo(PayOrder order) {
if (null == order.getTransactionType()) {
order.setTransactionType(PayPalTransactionType.sale);
}
Amount amount = new Amount();
if (null == order.getCurType()) {
order.setCurType(DefaultCurType.USD);
}
amount.setCurrency(order.getCurType().getType());
amount.setTotal(Util.conversionAmount(order.getPrice()).toString());
Transaction transaction = new Transaction();
if (!StringUtils.isEmpty(order.getSubject())) {
transaction.setDescription(order.getSubject());
} else {
transaction.setDescription(order.getBody());
}
transaction.setAmount(amount);
List<Transaction> transactions = new ArrayList();
transactions.add(transaction);
Payer payer = new Payer();
payer.setPaymentMethod("paypal");
Payment payment = new Payment();
payment.setIntent(order.getTransactionType().getType());
payment.setPayer(payer);
payment.setTransactions(transactions);
RedirectUrls redirectUrls = new RedirectUrls();
redirectUrls.setCancelUrl(((PayPalConfigStorage)this.payConfigStorage).getNotifyUrl());
redirectUrls.setReturnUrl(((PayPalConfigStorage)this.payConfigStorage).getReturnUrl());
payment.setRedirectUrls(redirectUrls);
HttpStringEntity entity = new HttpStringEntity(JSON.toJSONString(payment), ContentType.APPLICATION_JSON);
entity.setHeaders(this.authHeader());
JSONObject resp = (JSONObject)this.getHttpRequestTemplate().postForObject(this.getReqUrl(order.getTransactionType()), entity, JSONObject.class, new Object[0]);
if ("created".equals(resp.getString("state")) && StringUtils.isNotEmpty(resp.getString("id"))) {
order.setOutTradeNo(resp.getString("id"));
}
return this.preOrderHandler(resp, order);
}
public String buildRequest(Map<String, Object> orderInfo, MethodType method) {
if (orderInfo instanceof JSONObject) {
Payment payment = (Payment)((JSONObject)orderInfo).toJavaObject(Payment.class);
Iterator var4 = payment.getLinks().iterator();
while(var4.hasNext()) {
Links links = (Links)var4.next();
if (links.getRel().equals("approval_url")) {
return String.format("<script type=\"text/javascript\">location.href=\"%s\"</script>", links.getHref());
}
}
}
return "<script type=\"text/javascript\">location.href=\"/\"</script>";
}