| | |
| | | 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; |
| | |
| | | @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).replaceAll("\n","").replaceAll("\r",""); |
| | | 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()); |
| | |
| | | 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); |
| | |
| | | } |
| | | } |
| | | 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验证签名 |