From 403df2b2870b74a7623d2f5a7310ab9d1d539f28 Mon Sep 17 00:00:00 2001 From: liuyingfang <1357764963@qq.com> Date: Wed, 12 Apr 2023 10:27:55 +0800 Subject: [PATCH] =?UTF-8?q?pos=E6=9C=BA=E9=83=A8=E5=88=86=E9=80=BB?= =?UTF-8?q?=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/MerchantOrderController.java | 89 +++++++++++++++++-- .../interceptor/TokenRegistryInterceptor.java | 1 + .../cn/pluss/platform/util/TokenUtil.java | 6 +- .../MerchantChannelStatusController.java | 2 +- 4 files changed, 88 insertions(+), 10 deletions(-) diff --git a/pluss-api-page/src/main/java/cn/pluss/platform/controller/MerchantOrderController.java b/pluss-api-page/src/main/java/cn/pluss/platform/controller/MerchantOrderController.java index 95b4738..24fecb4 100644 --- a/pluss-api-page/src/main/java/cn/pluss/platform/controller/MerchantOrderController.java +++ b/pluss-api-page/src/main/java/cn/pluss/platform/controller/MerchantOrderController.java @@ -28,6 +28,7 @@ import cn.pluss.platform.userApp.UserAppService; import cn.pluss.platform.util.StringUtil; import cn.pluss.platform.util.TokenUtil; import cn.pluss.platform.vo.MemberScanVO; +import cn.pluss.platform.vo.MerchantOrderPosVO; import cn.pluss.platform.vo.MerchantOrderVO; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -49,6 +50,8 @@ import javax.validation.Valid; import java.text.SimpleDateFormat; import java.util.*; +import static cn.hutool.poi.excel.sax.AttributeName.s; + @Slf4j @RestController @RequiredArgsConstructor @@ -436,10 +439,7 @@ public class MerchantOrderController { @PostMapping("/posScanPay") public Result posScanPay(@RequestBody MerChantOrderDTO merchantOrderDTO) { //首先验签 - Map token = TokenUtil.getToken(merchantOrderDTO.getTimestamp(), merchantOrderDTO.getRequestId()); - boolean sign = token.get("TOKEN").equals(merchantOrderDTO.getToken()); - System.out.println(token); - MsgException.check(!sign,"签名错误"); + verify(merchantOrderDTO.getTimestamp(), merchantOrderDTO.getRequestId(), merchantOrderDTO.getAppId(), merchantOrderDTO.getToken()); //通过后查询商户信息 DeviceStock deviceStock = deviceStockService.checkBind(merchantOrderDTO.getSn()); MerchantBaseInfo merchantBaseInfoById = merchantBaseInfoService.getMerchantBaseInfoById(Integer.valueOf(deviceStock.getActMercId())); @@ -451,14 +451,19 @@ public class MerchantOrderController { } //进行支付操作 try { - return merchantOrderService.toActivePay(merchantOrderDTO); + Result activePay = merchantOrderService.toActivePay(merchantOrderDTO); + String result = activePay.toString(); + JSONObject jsonData = JSONObject.parseObject(result); + Object orderNumber = jsonData.getJSONObject("data").get("orderNumber"); + HashMap map = new HashMap<>(); + map.put("orderNumber", orderNumber); + return ResultGenerator.genSuccessResult(map); } catch (Exception e){ e.printStackTrace(); return ResultGenerator.genFailResult(e.getMessage()); } } - /** * 主扫会员支付 * @param memberScanPayDTO @@ -775,6 +780,69 @@ public class MerchantOrderController { } return ResultGenerator.genSuccessResult("获取成功",order); } + @GetMapping("/pos/tradeQuery/{orderNumber}") + @ApiOperation(value = "pos交易订单支付结果查询", notes = "交易订单支付结果查询", httpMethod = "GET") + @ApiImplicitParams({ + @ApiImplicitParam(name = "orderNumber", value = "查询的orderNumber", paramType = "orderNumber", required = true, dataType = "String")}) + public Result posTradeQuery(@PathVariable String orderNumber, String timestamp, + String requestId, String token, String appId) throws Exception { + //首先验签 + verify(timestamp, requestId, appId, token); + // 校验参数是否完整 + if (StringUtil.isEmpty(orderNumber)) { + return ResultGenerator.genFailResult("无订单号"); + } + QueryWrapper queryWrapper = new QueryWrapper() + .eq("orderNumber",orderNumber); + MerchantOrder order = merchantOrderService.getOne(queryWrapper); + if(order == null){ + return ResultGenerator.genFailResult("订单数据异常"); + } + MerchantOrderPosVO orderPosVO = new MerchantOrderPosVO(); + //支付成功 + if("1".equals(order.getStatus())){ + orderPosVO.setConsumeFee(order.getConsumeFee()); + orderPosVO.setStatus(order.getStatus()); + orderPosVO.setPayTypeCode(order.getPayTypeCode()); + return ResultGenerator.genSuccessResult("获取成功",orderPosVO); + } + String aisleSwitch = order.getAisleSwitch(); + MerchantChannelStatus channel = null; + switch (aisleSwitch){ + case "2": + channel = merchantChannelStatusMapper.getByMerchantCode(order.getMerchantCode(),1); + break; + default: + channel = merchantChannelStatusMapper.getByMerchantCode(order.getMerchantCode(),Integer.valueOf(aisleSwitch)); + break; + } + if(channel != null){ + JSONObject result = null; + switch (channel.getChannel()){ + case 1: + result = sxfPayService.tradeQuery(order,channel.getMerchantId()); + break; + case 3: + result = ryxPayService.tradeQuery(order,channel.getMerchantId()); + break; + case 4: + result = ysPayOldService.tradeQuery(order,channel.getMerchantId()); + break; + } + + if(result != null){ + merchantOrderService.updateOrderStatus(result,order); + String status = result.getString("payStatus"); + if("1".equals(status)){ + order.setStatus("1"); + } + } + orderPosVO.setConsumeFee(order.getConsumeFee()); + orderPosVO.setStatus(order.getStatus()); + orderPosVO.setPayTypeCode(order.getPayTypeCode()); + } + return ResultGenerator.genSuccessResult("获取成功", orderPosVO); + } @GetMapping("/closeOrder") @ApiOperation(value = "订单关闭", notes = "订单关闭", httpMethod = "POST") @@ -1233,4 +1301,13 @@ public class MerchantOrderController { List> couponList = merchantOrderService.getCouponList(orderNumber); return ResultGenerator.genSuccessResult(couponList); } + + public void verify(String timestamp, String requestId, String appId, + String token){ + //首先验证签 + Map tokenMap = TokenUtil.getToken(timestamp, requestId, appId); + boolean sign = tokenMap.get("TOKEN").equals(token); + System.out.println(token); + MsgException.check(!sign,"签名错误"); + } } diff --git a/pluss-api-page/src/main/java/cn/pluss/platform/interceptor/TokenRegistryInterceptor.java b/pluss-api-page/src/main/java/cn/pluss/platform/interceptor/TokenRegistryInterceptor.java index 03b8f76..d3fc99c 100644 --- a/pluss-api-page/src/main/java/cn/pluss/platform/interceptor/TokenRegistryInterceptor.java +++ b/pluss-api-page/src/main/java/cn/pluss/platform/interceptor/TokenRegistryInterceptor.java @@ -56,6 +56,7 @@ public class TokenRegistryInterceptor extends HandlerInterceptorAdapter { limitUri.add("/api/open/login"); limitUri.add("/api/index.html"); limitUri.add("/api/merchantOrder/posScanPay"); + limitUri.add("/api/merchantOrder/pos/tradeQuery"); boolean passFlag = limitUri.stream().anyMatch(s -> s.equals(requestUri) || requestUri.startsWith(s)); if (passFlag) { return true; diff --git a/pluss-common-bundle/src/main/java/cn/pluss/platform/util/TokenUtil.java b/pluss-common-bundle/src/main/java/cn/pluss/platform/util/TokenUtil.java index c8dd1c0..d6ac987 100644 --- a/pluss-common-bundle/src/main/java/cn/pluss/platform/util/TokenUtil.java +++ b/pluss-common-bundle/src/main/java/cn/pluss/platform/util/TokenUtil.java @@ -34,11 +34,11 @@ public class TokenUtil { * @param requestId 请求ID,自定义 * @return */ - public static Map getToken(String timestamp, String requestId) { + public static Map getToken(String timestamp, String requestId,String appId) { String token = ""; String encode = ""; SortedMap map = new TreeMap(); - map.put("appId", APP_ID); + map.put("appId", appId); map.put("timestamp", timestamp); map.put("requestId", requestId); Iterator> iterator = map.entrySet().iterator(); @@ -62,7 +62,7 @@ public class TokenUtil { System.out.println(s); String s1 = UUID.randomUUID().toString(); System.out.println(s1); - Map token = getToken(s, s1); + Map token = getToken(s, s1,APP_SECRET); System.out.println(token); } diff --git a/pluss-manage-page/src/main/java/cn/pluss/platform/controller/merchant/MerchantChannelStatusController.java b/pluss-manage-page/src/main/java/cn/pluss/platform/controller/merchant/MerchantChannelStatusController.java index 7f502d1..dc1d450 100644 --- a/pluss-manage-page/src/main/java/cn/pluss/platform/controller/merchant/MerchantChannelStatusController.java +++ b/pluss-manage-page/src/main/java/cn/pluss/platform/controller/merchant/MerchantChannelStatusController.java @@ -62,7 +62,7 @@ public class MerchantChannelStatusController { @ResponseBody public Result openOnlinePay(String merchantCode) { MerchantChannelStatus mcs = mcsService.getByMerchantCode(merchantCode, 4); - ((YsAuditServiceImpl) ysAuditServiceV3).openOnlinePay(mcs); + ysAuditServiceV3.openOnlinePay(mcs); return ResultGenerator.genSuccessResult("操作成功", null); }