Skip to content

paypal_支付回调消息回复

精致的吴彦祖 edited this page Dec 14, 2020 · 1 revision

paypal的发送消息

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;

PayPalService.orderInfo 源码

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);
    }

PayPalService.buildRequest 源码

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>";
    }