From e0395c5454534e7cf657b10045d00e4042dc7e71 Mon Sep 17 00:00:00 2001 From: houruijun <411269194@kidgrow.com> Date: Mon, 28 Sep 2020 15:51:08 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/pay_master' into pay_master --- kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-server/src/main/java/com/kidgrow/oprationcenter/controller/alipay/AlipayController.java | 127 +++++++++++++++++++++++------------------- 1 files changed, 70 insertions(+), 57 deletions(-) diff --git a/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-server/src/main/java/com/kidgrow/oprationcenter/controller/alipay/AlipayController.java b/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-server/src/main/java/com/kidgrow/oprationcenter/controller/alipay/AlipayController.java index eab0b5c..d653cb6 100644 --- a/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-server/src/main/java/com/kidgrow/oprationcenter/controller/alipay/AlipayController.java +++ b/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-server/src/main/java/com/kidgrow/oprationcenter/controller/alipay/AlipayController.java @@ -13,8 +13,9 @@ import com.kidgrow.common.utils.DateUtils; import com.kidgrow.common.utils.QRCodeUtil; import com.kidgrow.common.utils.StringUtils; -import com.kidgrow.oprationcenter.config.alipay.AlipayProperties; +import com.kidgrow.oprationcenter.alipay.AlipayProperties; import com.kidgrow.oprationcenter.model.SaasClientPay; +import com.kidgrow.oprationcenter.service.AlipayService; import com.kidgrow.oprationcenter.service.ISaasClientPayService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -34,102 +35,112 @@ @RestController @RequestMapping("alipay") @Api(tags = "支付宝的支付controller") -public class AlipayController { - +public class AlipayController { + @Resource private AlipayClient alipayClient; @Resource private AlipayProperties alipayProperties; @Autowired private ISaasClientPayService saasClientPayService; + @Autowired + private AlipayService alipayService; @ApiOperation(value = "调用预支付的接口,生成二维码") @PostMapping("/precreate") - public ResultBody precreate(HttpServletResponse response) throws Exception{ //商户预创建支付订单,生成二维码 + public ResultBody precreate(HttpServletResponse response) throws Exception { //商户预创建支付订单,生成二维码 - String outTradeNo = UUID.randomUUID().toString().replaceAll("_", ""); + String outTradeNo = UUID.randomUUID().toString().replaceAll("-", ""); QueryWrapper queryWrapper = new QueryWrapper(); - queryWrapper.eq("dia_id","1"); - queryWrapper.eq("pay_status",0); - AlipayTradePrecreateModel model=new AlipayTradePrecreateModel(); + queryWrapper.eq("dia_id", "1"); + queryWrapper.eq("pay_status", 0); + AlipayTradePrecreateModel model = new AlipayTradePrecreateModel(); model.setProductCode("FACE_TO_FACE_PAYMENT"); //销售产品码 List<SaasClientPay> list = saasClientPayService.list(queryWrapper); if (!list.isEmpty()) { SaasClientPay saasClientPay = list.get(0); model.setOutTradeNo(outTradeNo); //商户订单号 model.setSubject("海贼王"); //订单标题 - model.setTotalAmount(Double.valueOf(saasClientPay.getPayPrice())/100+""); //订单总金额 - }else { + model.setTotalAmount(Double.valueOf(saasClientPay.getPayPrice()) / 100 + ""); //订单总金额 + } else { model.setOutTradeNo(outTradeNo); //商户订单号 model.setSubject("海贼王"); //订单标题 model.setTotalAmount("0.01"); //订单总金额 SaasClientPay saasClientPay = this.fengData(model); boolean b = saasClientPayService.saveOrUpdate(saasClientPay); } - AlipayTradePrecreateRequest request=new AlipayTradePrecreateRequest(); + AlipayTradePrecreateRequest request = new AlipayTradePrecreateRequest(); request.setBizModel(model); //兼容pkcs1 编码; java.security.Security.addProvider( new org.bouncycastle.jce.provider.BouncyCastleProvider() ); - AlipayTradePrecreateResponse alipayTradePrecreateResponse=alipayClient.execute(request); + request.setNotifyUrl(alipayProperties.getNotifyUrl()); + request.setReturnUrl(alipayProperties.getReturnUrl()); + AlipayTradePrecreateResponse alipayTradePrecreateResponse = alipayClient.execute(request); if (StringUtils.isBlank(alipayTradePrecreateResponse.getQrCode())) { return ResultBody.failed().data("生成二维码失败"); } - String content=alipayTradePrecreateResponse.getQrCode(); - String base64 = QRCodeUtil.creatRrCode(content, 200, 200, 0); + String content = alipayTradePrecreateResponse.getQrCode(); + String base64 = QRCodeUtil.creatRrCode(content, 200, 200, 0).replaceAll("\n", "").replaceAll("\r", ""); System.out.println(base64); return ResultBody.ok().data(base64); } + //数据封装 - public SaasClientPay fengData(AlipayTradePrecreateModel model){ + public SaasClientPay fengData(AlipayTradePrecreateModel model) { SaasClientPay saasClientPay = new SaasClientPay(); - saasClientPay.setCreateHospitalDepartment(""); - saasClientPay.setCreateHospitalDepartid(""); - saasClientPay.setCreateHospitalId(Long.valueOf(1L)); saasClientPay.setPayPrice(1); saasClientPay.setOutTradeNo(model.getOutTradeNo()); saasClientPay.setPayStatus(0); saasClientPay.setPayMethod(1); saasClientPay.setDiaId("1"); - saasClientPay.setId( UUID.randomUUID().toString().replaceAll("_", "")); + saasClientPay.setId(UUID.randomUUID().toString().replaceAll("-", "")); saasClientPay.setCreateTime(new Date()); - saasClientPay.setCreateUserId(Long.valueOf(1L)); - saasClientPay.setCreateUserName(""); return saasClientPay; } + @ApiOperation(value = "取消订单,支付超时、支付结果未知是可撤销,超过24小时不可撤销-------暂时没有配置") @PostMapping("/cancel") - public ResultBody cancel() throws Exception{ //取消订单,支付超时、支付结果未知是可撤销,超过24小时不可撤销 - AlipayTradeCancelModel model=new AlipayTradeCancelModel(); + public ResultBody cancel() throws Exception { //取消订单,支付超时、支付结果未知是可撤销,超过24小时不可撤销 + AlipayTradeCancelModel model = new AlipayTradeCancelModel(); model.setOutTradeNo("300"); - - AlipayTradeCancelRequest request=new AlipayTradeCancelRequest(); + + AlipayTradeCancelRequest request = new AlipayTradeCancelRequest(); request.setBizModel(model); - - AlipayTradeCancelResponse response=alipayClient.execute(request); + + AlipayTradeCancelResponse response = alipayClient.execute(request); return ResultBody.ok().data(response.getBody()); } @ApiOperation(value = "trade_success状态下异步通知接口,端口异常的接口") @PostMapping("/notify") - public ResultBody notify(HttpServletRequest request) throws Exception{ //trade_success状态下异步通知接口 - if (check(request.getParameterMap())){ + public String notify(HttpServletRequest request) throws Exception { //trade_success状态下异步通知接口 + if (check(request.getParameterMap())) { System.out.println(request.getParameter("trade_status")); Map<String, String> requestMap = this.getRequestMap(request.getParameterMap()); log.error("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"); - log.error(request.toString()); - log.error("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"); - System.out.println("异步通知 "+ Instant.now()); - }else { + log.error(requestMap.toString()); + log.error("eeeeeeeeeeeeeeeewwwwwwwwwwww:"); + if (requestMap.get("trade_status").equals("TRADE_SUCCESS")) { + log.error("wwwwwwwwwww"); + //更新状态 out_trade_no + log.error("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"); + System.out.println("异步通知 " + Instant.now()); + return alipayService.notify(requestMap); + }else { + return "fail"; + } + } else { System.out.println("验签失败"); + return "fail"; } - return ResultBody.ok().data("订单失败"); } + @ApiOperation(value = "订单支付成功后同步返回地址") @PostMapping("/return") - public ResultBody returnUrl(HttpServletRequest request, Map<String,Object> map) throws Exception{ //订单支付成功后同步返回地址 - if (check(request.getParameterMap())){ + public ResultBody returnUrl(HttpServletRequest request, Map<String, Object> map) throws Exception { //订单支付成功后同步返回地址 + if (check(request.getParameterMap())) { Map<String, String> requestMap = this.getRequestMap(request.getParameterMap()); log.error("wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww"); log.error(request.toString()); @@ -137,15 +148,15 @@ log.error(map.toString()); log.error("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"); String trade_status = requestMap.get("trade_status"); - if(StringUtils.isNotBlank(trade_status)){ + if (StringUtils.isNotBlank(trade_status)) { //支付成功 - if(trade_status.equals("TRADE_SUCCESS")){ + if (trade_status.equals("TRADE_SUCCESS")) { //更新状态 out_trade_no QueryWrapper queryWrapper = new QueryWrapper(); - queryWrapper.eq("out_trade_no",requestMap.get("out_trade_no")); - queryWrapper.eq("pay_status",0); + queryWrapper.eq("out_trade_no", requestMap.get("out_trade_no")); + queryWrapper.eq("pay_status", 0); List<SaasClientPay> list = saasClientPayService.list(queryWrapper); - if(!list.isEmpty()){ + if (!list.isEmpty()) { SaasClientPay saasClientPay = list.get(0); saasClientPay.setPayTime(DateUtils.parseDate(requestMap.get("gmt_payment"))); saasClientPay.setPayStatus(2); @@ -155,25 +166,27 @@ } } return ResultBody.ok().data("success"); - }else { + } else { return ResultBody.failed().data("false"); } } - private Map<String,String> getRequestMap(Map<String,String[]> requestParams){ - Map<String,String> params = new HashMap<>(); - for (String name : requestParams.keySet()) { - String[] values = requestParams.get(name); - String valueStr = ""; - for (int i = 0; i < values.length; i++) { - valueStr = (i == values.length - 1) ? valueStr + values[i] - : valueStr + values[i] + ","; - } - params.put(name, valueStr); - System.out.println(name+" ==> "+valueStr); - } - return params; - } - private boolean check(Map<String,String[]> requestParams) throws Exception{ //对return、notify参数进行验签 + + private Map<String, String> getRequestMap(Map<String, String[]> requestParams) { + Map<String, String> params = new HashMap<>(); + for (String name : requestParams.keySet()) { + String[] values = requestParams.get(name); + String valueStr = ""; + for (int i = 0; i < values.length; i++) { + valueStr = (i == values.length - 1) ? valueStr + values[i] + : valueStr + values[i] + ","; + } + params.put(name, valueStr); + System.out.println(name + " ==> " + valueStr); + } + return params; + } + + private boolean check(Map<String, String[]> requestParams) throws Exception { //对return、notify参数进行验签 Map<String, String> requestMap = this.getRequestMap(requestParams); return AlipaySignature.rsaCheckV1(requestMap, alipayProperties.getAlipayPublicKey(), alipayProperties.getCharset(), alipayProperties.getSignType()); //调用SDK验证签名 -- Gitblit v1.8.0