From a0659d86a2af7ba638630e54a1221ce9b4541616 Mon Sep 17 00:00:00 2001 From: AlienJunX Date: Thu, 25 Nov 2021 12:29:54 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=BE=AE=E4=BF=A1H5?= =?UTF-8?q?=E6=94=AF=E4=BB=98=E5=AE=8C=E6=88=90=E5=90=8E=E5=9B=9E=E8=B0=83?= =?UTF-8?q?500=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../io/jpress/commons/pay/PayConfigUtil.java | 9 +++ .../io/jpress/web/front/PayController.java | 65 +++++++++++++------ 2 files changed, 53 insertions(+), 21 deletions(-) diff --git a/jpress-commons/src/main/java/io/jpress/commons/pay/PayConfigUtil.java b/jpress-commons/src/main/java/io/jpress/commons/pay/PayConfigUtil.java index 0aae0188f..9f62c3c67 100644 --- a/jpress-commons/src/main/java/io/jpress/commons/pay/PayConfigUtil.java +++ b/jpress-commons/src/main/java/io/jpress/commons/pay/PayConfigUtil.java @@ -20,6 +20,9 @@ import com.egzosn.pay.ali.api.AliPayService; import com.egzosn.pay.paypal.api.PayPalPayService; import com.egzosn.pay.wx.api.WxPayService; import com.jfinal.core.Controller; +import io.jboot.utils.StrUtil; + +import java.util.Map; public class PayConfigUtil { @@ -49,6 +52,12 @@ public class PayConfigUtil { return config.isEnable() && config.isConfigOk() ? new WxPayService(config.toConfigStorage()) : null; } + public static WxPayService getWxPayService(Map paras) { + String queryString = StrUtil.mapToQueryString(paras); + WechatPayConfig config = getWechatPayConfig(); + config.setReturnUrl(config.getReturnUrl() + "?" + queryString); + return config.isEnable() && config.isConfigOk() ? new WxPayService(config.toConfigStorage()) : null; + } public static AliPayService getAlipayService() { AlipayPayConfig config = getAlipayPayConfig(); diff --git a/jpress-web/src/main/java/io/jpress/web/front/PayController.java b/jpress-web/src/main/java/io/jpress/web/front/PayController.java index fb791cc10..1e04a26d1 100644 --- a/jpress-web/src/main/java/io/jpress/web/front/PayController.java +++ b/jpress-web/src/main/java/io/jpress/web/front/PayController.java @@ -37,10 +37,12 @@ import io.jpress.web.commons.finance.PrePayNotifytKit; import io.jpress.web.interceptor.UserMustLoginedInterceptor; import io.jpress.web.interceptor.WechatInterceptor; +import javax.servlet.http.HttpServletRequest; import java.awt.image.BufferedImage; import java.io.IOException; import java.math.BigDecimal; import java.util.Date; +import java.util.HashMap; import java.util.Map; @RequestMapping(value = "/pay") @@ -123,12 +125,16 @@ public class PayController extends TemplateControllerBase { return; } - PayService service = PayConfigUtil.getWxPayService(); - render404If(service == null); - PaymentRecord payment = paymentService.findByTrxNo(getPara()); render404If(payment == null); + Map para = new HashMap<>(); + para.put("trxNo",payment.getTrxNo()); + + PayService service = PayConfigUtil.getWxPayService(para); + render404If(service == null); + + if (payment.isPaySuccess()) { redirect("/pay/success/" + payment.getTrxNo()); return; @@ -592,26 +598,25 @@ public class PayController extends TemplateControllerBase { PayService service = getPayService(); render404If(service == null); - Map params = getParams(service); - if (Jboot.isDevMode()) { - LOG.debug("back:" + JSON.toJSONString(params)); - } - - String trxNo = getTrxNo(service, params); - if (StrUtil.isBlank(trxNo)){ - redirect("/pay/fail"); - return; - } - - if (params == null || !service.verify(params)) { - redirect("/pay/fail/" + trxNo); - return; - } + String trxNo = null; + PaymentRecord payment = null; // paypal 不走异步回调,需要在这进行处理,只要 service.verify(params) 验证通过 // 就代表 paypal 支付成功了 - PaymentRecord payment = paymentService.findByTrxNo(trxNo); - if (service instanceof PayPalPayService){ + if (service instanceof PayPalPayService) { + Map params = getParams(service); + if (Jboot.isDevMode()) { + LOG.debug("back:" + JSON.toJSONString(params)); + } + + trxNo = getTrxNo(service, params); + + if (params == null || !service.verify(params)) { + redirect("/pay/fail/" + trxNo); + return; + } + + payment = paymentService.findByTrxNo(trxNo); if (payment.getPaySuccessAmount() == null) { payment.setPaySuccessAmount(payment.getPayAmount()); @@ -630,6 +635,14 @@ public class PayController extends TemplateControllerBase { if (paymentService.update(payment)) { paymentService.notifySuccess(payment.getId()); } + } else { + trxNo = getPara("trxNo"); + if (StrUtil.isBlank(trxNo)) { + redirect("/pay/fail"); + return; + } + + payment = paymentService.findByTrxNo(trxNo); } @@ -643,7 +656,17 @@ public class PayController extends TemplateControllerBase { private Map getParams(PayService service) { try { - return service.getParameter2Map(getRequest().getParameterMap(), getRequest().getInputStream()); + HttpServletRequest request = getOrginalRequest();// + int available = request.getInputStream().available(); + if (available > 0) { + return service.getParameter2Map(request.getParameterMap(), request.getInputStream()); + } else { + Map ret = new HashMap<>(); + for (String key : getParas().keySet()) { + ret.put(key,getPara(key)); + } + return ret; + } } catch (IOException e) { e.printStackTrace(); } -- Gitee From d2efac6aee20d27cdf42b685852438cfb465bc5e Mon Sep 17 00:00:00 2001 From: AlienJunX Date: Thu, 25 Nov 2021 14:40:40 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E6=94=AF=E4=BB=98=E5=8F=91=E5=B8=830?= =?UTF-8?q?=E5=85=83=E7=9A=84=E5=95=86=E5=93=81=EF=BC=8C=E6=94=AF=E4=BB=98?= =?UTF-8?q?=E9=87=91=E9=A2=9D=E4=B8=BA=200=20=E6=97=B6=EF=BC=8C=E7=9B=B4?= =?UTF-8?q?=E6=8E=A5=E6=94=AF=E4=BB=98=E6=88=90=E5=8A=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jpress/web/front/CheckoutController.java | 52 +++++++++++++++---- 1 file changed, 43 insertions(+), 9 deletions(-) diff --git a/jpress-web/src/main/java/io/jpress/web/front/CheckoutController.java b/jpress-web/src/main/java/io/jpress/web/front/CheckoutController.java index fd0ca2f87..1871f4511 100644 --- a/jpress-web/src/main/java/io/jpress/web/front/CheckoutController.java +++ b/jpress-web/src/main/java/io/jpress/web/front/CheckoutController.java @@ -27,9 +27,11 @@ import io.jpress.core.finance.ProductManager; import io.jpress.model.*; import io.jpress.service.*; import io.jpress.web.base.UcenterControllerBase; +import io.jpress.web.commons.finance.PayNotifytKit; import java.math.BigDecimal; import java.util.ArrayList; +import java.util.Date; import java.util.List; import java.util.StringJoiner; @@ -381,7 +383,6 @@ public class CheckoutController extends UcenterControllerBase { payment.setPayerUserId(getLoginedUser().getId()); payment.setPayerName(getLoginedUser().getNickname()); payment.setPayerFee(BigDecimal.ZERO); - payment.setPayStatus(PayStatus.UNPAY.getStatus());//预支付 payment.setPayAmount(userOrder.getOrderRealAmount()); payment.setPayType(getPara("paytype")); @@ -390,20 +391,53 @@ public class CheckoutController extends UcenterControllerBase { payment.setOrderRefererUrl(getReferer()); - payment.setStatus(PaymentRecord.STATUS_PAY_PRE); //预支付 + // 支付的金额为0,直接跳转支付成功,不调用第三方支付 + if (payment.getPayAmount().compareTo(BigDecimal.ZERO) == 0) { + payment.setStatus(PaymentRecord.STATUS_PAY_SUCCESS); //支付成功 + payment.setPayStatus(PayStatus.getSuccessIntStatusByType(payment.getPayType())); + payment.setPaySuccessAmount(payment.getPayAmount()); + payment.setPaySuccessTime(new Date()); + payment.setPayCompleteTime(new Date()); + //保存 或 更新 payment + paymentService.saveOrUpdate(payment); - //保存 或 更新 payment - paymentService.saveOrUpdate(payment); + //更新 order 的 payment id + if (userOrder.getPaymentId() == null) { + userOrder.setPaymentId(payment.getId()); + userOrderService.update(userOrder); + } + + // 订单支付成功 + paymentService.notifySuccess(payment.getId()); + + + PayNotifytKit.notify(payment, getLoginedUser()); + + if (payment.isPaySuccess()) { + redirect("/pay/success/" + payment.getTrxNo()); + } else { + redirect("/pay/fail/" + payment.getTrxNo()); + } + } else { + //预支付 + payment.setStatus(PaymentRecord.STATUS_PAY_PRE); + payment.setPayStatus(PayStatus.UNPAY.getStatus()); + + //保存 或 更新 payment + paymentService.saveOrUpdate(payment); + + //更新 order 的 payment id + if (userOrder.getPaymentId() == null) { + userOrder.setPaymentId(payment.getId()); + userOrderService.update(userOrder); + } + + PayKit.redirect(payment.getPayType(), payment.getTrxNo()); - //更新 order 的 payment id - if (userOrder.getPaymentId() == null) { - userOrder.setPaymentId(payment.getId()); - userOrderService.update(userOrder); } - PayKit.redirect(payment.getPayType(), payment.getTrxNo()); } -- Gitee