From 5f88c35dc7abf5aa4e1279013046687795ac6220 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=9F=A9=E9=B9=8F=E8=BE=89?= <18322780655@163.com> Date: Wed, 15 May 2024 15:16:17 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=96=B0=E7=89=88=E5=BC=80?= =?UTF-8?q?=E6=94=BE=E5=B9=B3=E5=8F=B0=E6=94=AF=E4=BB=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cashierservice/service/PayService.java | 855 +++++++----------- .../thirdpay/constants/SignTypeEnum.java | 16 + .../thirdpay/req/MainScanReq.java | 41 + .../thirdpay/req/OrderRefundReq.java | 32 + .../thirdpay/req/OrderReturnQueryReq.java | 18 + .../thirdpay/req/OrderStatusQueryReq.java | 18 + .../thirdpay/req/PublicParam.java | 33 + .../thirdpay/req/WxScanPayReq.java | 49 + .../thirdpay/resp/MainScanResp.java | 47 + .../thirdpay/resp/OderReturnQueyResp.java | 36 + .../thirdpay/resp/OrderReturnResp.java | 33 + .../thirdpay/resp/OrderStatusQueryResp.java | 49 + .../thirdpay/resp/PublicResp.java | 22 + .../thirdpay/resp/WxScanPayResp.java | 51 ++ .../thirdpay/service/ThirdPayService.java | 300 ++++++ src/main/resources/application-hph.yml | 2 + src/main/resources/application.yml | 9 +- 17 files changed, 1091 insertions(+), 520 deletions(-) create mode 100644 src/main/java/com/chaozhanggui/system/cashierservice/thirdpay/constants/SignTypeEnum.java create mode 100644 src/main/java/com/chaozhanggui/system/cashierservice/thirdpay/req/MainScanReq.java create mode 100644 src/main/java/com/chaozhanggui/system/cashierservice/thirdpay/req/OrderRefundReq.java create mode 100644 src/main/java/com/chaozhanggui/system/cashierservice/thirdpay/req/OrderReturnQueryReq.java create mode 100644 src/main/java/com/chaozhanggui/system/cashierservice/thirdpay/req/OrderStatusQueryReq.java create mode 100644 src/main/java/com/chaozhanggui/system/cashierservice/thirdpay/req/PublicParam.java create mode 100644 src/main/java/com/chaozhanggui/system/cashierservice/thirdpay/req/WxScanPayReq.java create mode 100644 src/main/java/com/chaozhanggui/system/cashierservice/thirdpay/resp/MainScanResp.java create mode 100644 src/main/java/com/chaozhanggui/system/cashierservice/thirdpay/resp/OderReturnQueyResp.java create mode 100644 src/main/java/com/chaozhanggui/system/cashierservice/thirdpay/resp/OrderReturnResp.java create mode 100644 src/main/java/com/chaozhanggui/system/cashierservice/thirdpay/resp/OrderStatusQueryResp.java create mode 100644 src/main/java/com/chaozhanggui/system/cashierservice/thirdpay/resp/PublicResp.java create mode 100644 src/main/java/com/chaozhanggui/system/cashierservice/thirdpay/resp/WxScanPayResp.java create mode 100644 src/main/java/com/chaozhanggui/system/cashierservice/thirdpay/service/ThirdPayService.java diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/service/PayService.java b/src/main/java/com/chaozhanggui/system/cashierservice/service/PayService.java index 8814ca1..13a5191 100644 --- a/src/main/java/com/chaozhanggui/system/cashierservice/service/PayService.java +++ b/src/main/java/com/chaozhanggui/system/cashierservice/service/PayService.java @@ -17,6 +17,10 @@ import com.chaozhanggui.system.cashierservice.redis.RedisUtil; import com.chaozhanggui.system.cashierservice.sign.CodeEnum; import com.chaozhanggui.system.cashierservice.sign.Result; import com.chaozhanggui.system.cashierservice.socket.AppWebSocketServer; +import com.chaozhanggui.system.cashierservice.thirdpay.resp.OrderStatusQueryResp; +import com.chaozhanggui.system.cashierservice.thirdpay.resp.PublicResp; +import com.chaozhanggui.system.cashierservice.thirdpay.resp.WxScanPayResp; +import com.chaozhanggui.system.cashierservice.thirdpay.service.ThirdPayService; import com.chaozhanggui.system.cashierservice.util.BeanUtil; import com.chaozhanggui.system.cashierservice.util.MD5Util; import com.chaozhanggui.system.cashierservice.util.N; @@ -101,47 +105,66 @@ public class PayService { @Autowired TbShopUserFlowMapper tbShopUserFlowMapper; - @Resource - private TbGroupOrderInfoMapper tbGroupOrderInfoMapper; + + @Value("${thirdPay.payType}") + private String thirdPayType; + + + @Value("${thirdPay.url}") + private String thirdUrl; + + + + @Value("${thirdPay.callBack}") + private String callBack; + + + @Autowired - private TbProductMapper tbProductMapper; - @Resource - private GroupOrderCouponService orderCouponService; + ThirdPayService thirdPayService; + @Transactional(rollbackFor = Exception.class) - public Result payOrder(String openId, String orderId,String payType, String ip) throws Exception { - TbOrderInfo orderInfo = tbOrderInfoMapper.selectByPrimaryKey(Integer.valueOf(orderId)); + public Result payOrder(String openId,String orderId,String ip) throws Exception { + TbOrderInfo orderInfo= tbOrderInfoMapper.selectByPrimaryKey(Integer.valueOf(orderId)); - if (!"unpaid".equals(orderInfo.getStatus()) && !"paying".equals(orderInfo.getStatus())) { + if(!"unpaid".equals(orderInfo.getStatus())&&!"paying".equals(orderInfo.getStatus())){ return Result.fail("订单状态异常,不允许支付"); } - if (ObjectUtil.isNull(orderInfo.getMerchantId()) || ObjectUtil.isEmpty(orderInfo.getMerchantId())) { + if(ObjectUtil.isNull(orderInfo.getMerchantId())||ObjectUtil.isEmpty(orderInfo.getMerchantId())){ return Result.fail("没有对应的商户"); } - TbMerchantThirdApply thirdApply = tbMerchantThirdApplyMapper.selectByPrimaryKey(Integer.valueOf(orderInfo.getMerchantId())); + List cashierCarts= tbCashierCartMapper.selectByOrderId(orderId,"create"); + if(ObjectUtil.isEmpty(cashierCarts)||ObjectUtil.isNull(cashierCarts)){ + return Result.fail("购物车信息不存在"); + } - if (ObjectUtil.isEmpty(thirdApply) || ObjectUtil.isNull(thirdApply)) { + StringBuffer body=new StringBuffer(); + for (TbCashierCart cashierCart : cashierCarts) { + body.append(cashierCart.getName()); + } + + + + TbMerchantThirdApply thirdApply= tbMerchantThirdApplyMapper.selectByPrimaryKey(Integer.valueOf(orderInfo.getMerchantId())); + + if(ObjectUtil.isEmpty(thirdApply)||ObjectUtil.isNull(thirdApply)){ return Result.fail("支付通道不存在"); } - TbOrderPayment payment = tbOrderPaymentMapper.selectByOrderId(orderId); - if (ObjectUtil.isEmpty(payment) || payment == null) { - payment = new TbOrderPayment(); + TbOrderPayment payment=tbOrderPaymentMapper.selectByOrderId(orderId); + if(ObjectUtil.isEmpty(payment)||payment==null){ + payment=new TbOrderPayment(); payment.setPayTypeId("ysk"); payment.setAmount(orderInfo.getOrderAmount()); payment.setPaidAmount(orderInfo.getPayAmount()); payment.setHasRefundAmount(BigDecimal.ZERO); - if (payType.equals("wechatPay")) { - payment.setPayName("微信支付"); - payment.setPayType("wechatPay"); - } else if (payType.equals("aliPay")) { - payment.setPayName("支付宝支付"); - payment.setPayType("aliPay"); - } + payment.setPayName("微信支付"); + payment.setPayType("wechatPay"); payment.setReceived(payment.getAmount()); payment.setChangeFee(BigDecimal.ZERO); payment.setMemberId(orderInfo.getMemberId()); @@ -149,435 +172,280 @@ public class PayService { payment.setOrderId(orderInfo.getId().toString()); payment.setCreatedAt(System.currentTimeMillis()); tbOrderPaymentMapper.insert(payment); - } else { - if (payType.equals("wechatPay")) { - payment.setPayName("微信支付"); - payment.setPayType("wechatPay"); - } else if (payType.equals("aliPay")) { - payment.setPayName("支付宝支付"); - payment.setPayType("aliPay"); - } + }else { payment.setUpdatedAt(System.currentTimeMillis()); tbOrderPaymentMapper.updateByPrimaryKey(payment); } - PayReq req = new PayReq(); - req.setAppId(thirdApply.getAppId()); - req.setTimestamp(System.currentTimeMillis()); - req.setIp(ip); - req.setMercOrderNo(orderInfo.getOrderNo()); - req.setNotifyUrl(callBackurl); - req.setPayAmt(payment.getAmount().setScale(2, BigDecimal.ROUND_DOWN).toPlainString()); - if (payType.equals("wechatPay")) { + if("ysk".equals(thirdPayType)){ + PayReq req=new PayReq(); + + req.setAppId(thirdApply.getAppId()); + req.setTimestamp(System.currentTimeMillis()); + req.setIp(ip); + req.setMercOrderNo(orderInfo.getOrderNo()); + req.setNotifyUrl(callBackurl); + req.setPayAmt(payment.getAmount().setScale(2,BigDecimal.ROUND_DOWN).toPlainString()); req.setPayType("03"); - req.setPayWay("WXZF");//WXZF ZFBZF UNIONPAY - } else if (payType.equals("aliPay")) { - req.setPayWay("ZFBZF"); - } - req.setSubject("扫码点餐"); - req.setUserId(openId); - - Map map = BeanUtil.transBeanMap(req); - req.setSign(MD5Util.encrypt(map, thirdApply.getAppToken(), true)); - - ResponseEntity response = restTemplate.postForEntity(url.concat("trans/pay"), req, String.class); - if (response.getStatusCodeValue() == 200 && ObjectUtil.isNotEmpty(response.getBody())) { - JSONObject object = JSONObject.parseObject(response.getBody()); - if (object.get("code").equals("0")) { - payment.setTradeNumber(object.getJSONObject("data").get("orderNumber").toString()); - payment.setUpdatedAt(System.currentTimeMillis()); - tbOrderPaymentMapper.updateByPrimaryKeySelective(payment); - orderInfo.setStatus("paying"); - orderInfo.setPayOrderNo(payment.getTradeNumber()); + req.setPayWay("WXZF"); + req.setSubject("扫码点餐"); + req.setUserId(openId); - tbOrderInfoMapper.updateByPrimaryKey(orderInfo); - String key = RedisCst.TABLE_CART.concat(orderInfo.getTableId()).concat("-").concat(orderInfo.getShopId()); - //清除缓存购物车数据 - redisUtil.deleteByKey(key); - JSONObject jsonObject1 = new JSONObject(); - jsonObject1.put("status", "success"); - jsonObject1.put("msg", "成功"); - jsonObject1.put("type", ""); - jsonObject1.put("data", new JSONArray()); - jsonObject1.put("amount", 0); - AppWebSocketServer.AppSendInfo(jsonObject1, key, false); - tbCashierCartMapper.updateStatusByOrderId(orderId.toString(), "final"); - return Result.success(CodeEnum.SUCCESS, object.getJSONObject("data")); - } else { - return Result.fail(object.getString("msg")); - } - } + Map map= BeanUtil.transBeanMap(req); + req.setSign(MD5Util.encrypt(map,thirdApply.getAppToken(),true)); - return Result.fail("失败"); - } - - @Transactional(rollbackFor = Exception.class) - public Result groupOrderPay(String orderId, String payType, String userId, String ip) { - TbGroupOrderInfo orderInfo = tbGroupOrderInfoMapper.queryById(Integer.valueOf(orderId)); - - if (!"unpaid".equals(orderInfo.getStatus())) { - return Result.fail("订单状态异常,不允许支付"); - } - - TbMerchantAccount tbMerchantAccount = merchantAccountMapper.selectByShopId(orderInfo.getShopId().toString()); - if (tbMerchantAccount == null) { - throw new MsgException("生成订单错误"); - } - - if (ObjectUtil.isNull(tbMerchantAccount.getMerchantId()) || ObjectUtil.isEmpty(tbMerchantAccount.getMerchantId())) { - return Result.fail("没有对应的商户"); - } - - TbMerchantThirdApply thirdApply = tbMerchantThirdApplyMapper.selectByPrimaryKey(Integer.valueOf(tbMerchantAccount.getMerchantId())); - - if (ObjectUtil.isEmpty(thirdApply) || ObjectUtil.isNull(thirdApply)) { - return Result.fail("支付通道不存在"); - } - - TbOrderPayment payment = tbOrderPaymentMapper.selectByOrderId(orderId); - if (ObjectUtil.isEmpty(payment) || payment == null) { - payment = new TbOrderPayment(); - payment.setPayTypeId("ysk"); - payment.setAmount(orderInfo.getOrderAmount()); - payment.setPaidAmount(orderInfo.getPayAmount()); - payment.setHasRefundAmount(BigDecimal.ZERO); - if (payType.equals("wechatPay")) { - payment.setPayName("微信支付"); - payment.setPayType("wechatPay"); - } else if (payType.equals("aliPay")) { - payment.setPayName("支付宝支付"); - payment.setPayType("aliPay"); - } - payment.setReceived(payment.getAmount()); - payment.setChangeFee(BigDecimal.ZERO); -// payment.setMemberId(orderInfo.getMemberId());//会员Id - payment.setShopId(orderInfo.getShopId().toString()); - payment.setOrderId(orderInfo.getId().toString()); - payment.setCreatedAt(System.currentTimeMillis()); - tbOrderPaymentMapper.insert(payment); - } else { - if (payType.equals("wechatPay")) { - payment.setPayName("微信支付"); - payment.setPayType("wechatPay"); - } else if (payType.equals("aliPay")) { - payment.setPayName("支付宝支付"); - payment.setPayType("aliPay"); - } - payment.setUpdatedAt(System.currentTimeMillis()); - tbOrderPaymentMapper.updateByPrimaryKey(payment); - } - - PayReq req = new PayReq(); - - req.setAppId(thirdApply.getAppId()); - req.setTimestamp(System.currentTimeMillis()); - req.setIp(ip); - req.setMercOrderNo(orderInfo.getOrderNo()); - req.setNotifyUrl(callBackGroupurl); - req.setPayAmt(payment.getAmount().setScale(2, BigDecimal.ROUND_DOWN).toPlainString()); - if (payType.equals("wechatPay")) { - req.setPayType("03"); - req.setPayWay("WXZF");//WXZF ZFBZF UNIONPAY - } else if (payType.equals("aliPay")) { - req.setPayWay("ZFBZF"); - } - req.setSubject("零点八零:团购卷"); - req.setUserId(userId); + ResponseEntity response= restTemplate.postForEntity(url.concat("trans/pay"),req,String.class); + if(response.getStatusCodeValue()==200&&ObjectUtil.isNotEmpty(response.getBody())){ + JSONObject object=JSONObject.parseObject(response.getBody()); + if(object.get("code").equals("0")){ + payment.setTradeNumber(object.getJSONObject("data").get("orderNumber").toString()); + payment.setUpdatedAt(System.currentTimeMillis()); + tbOrderPaymentMapper.updateByPrimaryKeySelective(payment); + orderInfo.setStatus("paying"); + orderInfo.setPayOrderNo(payment.getTradeNumber()); - Map map = BeanUtil.transBeanMap(req); - req.setSign(MD5Util.encrypt(map, thirdApply.getAppToken(), true)); - - ResponseEntity response = restTemplate.postForEntity(url.concat("trans/pay"), req, String.class); - if (response.getStatusCodeValue() == 200 && ObjectUtil.isNotEmpty(response.getBody())) { - JSONObject object = JSONObject.parseObject(response.getBody()); - log.info("团购卷支付响应:{}",object); - if (object.get("code").equals("0")) { - payment.setTradeNumber(object.getJSONObject("data").get("orderNumber").toString()); - payment.setUpdatedAt(System.currentTimeMillis()); - tbOrderPaymentMapper.updateByPrimaryKeySelective(payment); - orderInfo.setPayType(payType); - orderInfo.setPayOrderNo(payment.getTradeNumber()); - tbGroupOrderInfoMapper.update(orderInfo); - JSONObject jsonObject1 = new JSONObject(); - jsonObject1.put("status", "success"); - jsonObject1.put("msg", "成功"); - jsonObject1.put("type", ""); - jsonObject1.put("data", new JSONArray()); - jsonObject1.put("amount", 0); - tbProductMapper.upGroupRealSalesNumber(orderInfo.getProId().toString(), orderInfo.getNumber()); - return Result.success(CodeEnum.SUCCESS, object.getJSONObject("data")); - } else { - return Result.fail(object.getString("msg")); - } - } - - return Result.fail("失败"); - } - - @Transactional(rollbackFor = Exception.class) - public Result returnOrder(ReturnGroupOrderDto param) { - TbGroupOrderInfo groupOrderInfo = tbGroupOrderInfoMapper.queryById(param.getOrderId()); - List tbGroupOrderCoupons = orderCouponService.queryNoRefundByOrderId(param.getOrderId()); - if (param.getNum() > tbGroupOrderCoupons.size()) { - return Result.fail("可退数量不足"); - } - for (int i = 0; i < param.getNum(); i++) { - TbGroupOrderCoupon coupon = tbGroupOrderCoupons.get(i); - coupon.setIsRefund(1); - coupon.setRefundAmount(param.getRefundAmount()); - coupon.setRefundDesc(param.getRefundDesc()); - coupon.setRefundReason(param.getRefundReason()); - orderCouponService.update(coupon); - } - TbMerchantThirdApply thirdApply = tbMerchantThirdApplyMapper.selectByPrimaryKey(groupOrderInfo.getMerchantId()); - MsgException.checkNull(thirdApply, "支付参数配置错误"); - ReturnOrderReq req = new ReturnOrderReq(); - req.setAppId(thirdApply.getAppId()); - req.setTimestamp(System.currentTimeMillis()); - req.setOrderNumber(groupOrderInfo.getPayOrderNo()); - req.setAmount(param.getRefundAmount().toString()); - req.setMercRefundNo(groupOrderInfo.getOrderNo()); - req.setRefundReason("团购卷:退货"); - req.setPayPassword(thirdApply.getPayPassword()); - Map map = BeanUtil.transBean2Map(req); - req.setSign(MD5Util.encrypt(map, thirdApply.getAppToken(), true)); - log.info("groupOrderReturn req:{}", JSONUtil.toJsonStr(req)); - ResponseEntity response = restTemplate.postForEntity(url.concat("merchantOrder/returnOrder"), req, String.class); - log.info("groupOrderReturn:{}", response.getBody()); - if (response.getStatusCodeValue() == 200 && ObjectUtil.isNotEmpty(response.getBody())) { - JSONObject object = JSONObject.parseObject(response.getBody()); - if (!object.get("code").equals("0")) { - MsgException.check(true, "退款渠道调用失败"); - } - } - groupOrderInfo.setRefundNumber(groupOrderInfo.getRefundNumber() + param.getNum()); - groupOrderInfo.setRefundAmount(groupOrderInfo.getRefundAmount().add(param.getRefundAmount())); - if (groupOrderInfo.getNumber() == groupOrderInfo.getRefundNumber()) { - groupOrderInfo.setRefundAble(0); - groupOrderInfo.setStatus("refund"); - } - tbGroupOrderInfoMapper.update(groupOrderInfo); - return Result.success(CodeEnum.SUCCESS); - } - - @Transactional(rollbackFor = Exception.class) - public Result accountPay(String orderId, String userId, String shopId, String pwd) { - if (ObjectUtil.isEmpty(orderId) || ObjectUtil.isEmpty(userId) || ObjectUtil.isEmpty(shopId) || ObjectUtil.isEmpty(pwd)) { - return Result.fail("参数错误"); - } - - TbOrderInfo orderInfo = tbOrderInfoMapper.selectByPrimaryKey(Integer.valueOf(orderId)); - if (ObjectUtil.isEmpty(orderInfo)) { - return Result.fail("订单信息不存在"); - } - - - if (!"unpaid".equals(orderInfo.getStatus())) { - return Result.fail("订单状态异常"); - } - - - int count = tbShopPayTypeMapper.countSelectByShopIdAndPayType(orderInfo.getShopId(), "deposit"); - if (count < 1) { - return Result.fail("当前店铺未开通储值卡支付"); - } - - TbShopUser user = tbShopUserMapper.selectByUserIdAndShopId(userId, shopId); - - if (ObjectUtil.isEmpty(user) || !"1".equals(user.getIsVip().toString())) { - return Result.fail("此用户非会员用户"); - } - - - if ("1".equals(user.getIsPwd())) { - return Result.fail("会员支付密码为初始化密码"); - } - - if (!MD5Util.encrypt(pwd).equals(user.getPwd())) { - return Result.fail("会员支付密码错误"); - } - - if (N.gt(orderInfo.getPayAmount(), user.getAmount())) { - return Result.fail("会员卡余额不足"); - } - - user.setAmount(user.getAmount().subtract(orderInfo.getOrderAmount())); - user.setConsumeAmount(user.getConsumeAmount().add(orderInfo.getPayAmount())); - user.setConsumeNumber(user.getConsumeNumber() + 1); - user.setUpdatedAt(System.currentTimeMillis()); - tbShopUserMapper.updateByPrimaryKeySelective(user); - - - TbShopUserFlow flow = new TbShopUserFlow(); - flow.setShopUserId(Integer.valueOf(user.getId())); - flow.setBizCode("accountPay"); - flow.setBizName("会员储值卡支付"); - flow.setAmount(orderInfo.getOrderAmount()); - flow.setBalance(user.getAmount()); - flow.setCreateTime(new Date()); - tbShopUserFlowMapper.insert(flow); - - - orderInfo.setPayAmount(orderInfo.getOrderAmount()); - orderInfo.setMemberId(userId); - orderInfo.setPayType("deposit"); - orderInfo.setStatus("closed"); - orderInfo.setPayOrderNo("deposit".concat(SnowFlakeUtil.generateOrderNo())); - tbOrderInfoMapper.updateByPrimaryKeySelective(orderInfo); - - - int cartCount = tbCashierCartMapper.updateStatusByOrderId(orderId.toString(), "final"); - - log.info("更新购物车:{}", cartCount); - - //更新子单状态 - tbOrderDetailMapper.updateStatusByOrderIdAndStatus(Integer.valueOf(orderId), "closed"); - - //修改主单状态 - orderInfo.setStatus("closed"); - orderInfo.setPayType("deposit"); - orderInfo.setPayOrderNo(user.getDynamicCode()); - orderInfo.setPayAmount(orderInfo.getOrderAmount()); - tbOrderInfoMapper.updateByPrimaryKeySelective(orderInfo); - - - JSONObject jsonObject = new JSONObject(); - jsonObject.put("token", 0); - jsonObject.put("type", "wxcreate"); - jsonObject.put("orderId", orderInfo.getId().toString()); - - producer.putOrderCollect(jsonObject.toJSONString()); - - producer.printMechine(orderInfo.getId() + ""); - - return Result.success(CodeEnum.SUCCESS); - } - - - @Transactional(rollbackFor = Exception.class) - public Result modifyOrderStatus(Integer orderId) throws IOException { - TbOrderInfo orderInfo = tbOrderInfoMapper.selectByPrimaryKey(Integer.valueOf(orderId)); - if (ObjectUtil.isEmpty(orderInfo)) { - return Result.fail("订单信息不存在"); - } - - if ("paying".equals(orderInfo.getStatus())) { - TbOrderPayment payment = tbOrderPaymentMapper.selectByOrderId(orderInfo.getId().toString()); - if (ObjectUtil.isNotEmpty(payment) && ObjectUtil.isNotEmpty(payment.getTradeNumber())) { - - TbMerchantThirdApply thirdApply = tbMerchantThirdApplyMapper.selectByPrimaryKey(Integer.valueOf(orderInfo.getMerchantId())); - - if (ObjectUtil.isEmpty(thirdApply) || ObjectUtil.isNull(thirdApply)) { - return Result.fail("支付通道不存在"); + tbOrderInfoMapper.updateByPrimaryKey(orderInfo); + String key= RedisCst.TABLE_CART.concat(orderInfo.getTableId()).concat("-").concat(orderInfo.getShopId()); + //清除缓存购物车数据 + redisUtil.deleteByKey(key); + JSONObject jsonObject1 = new JSONObject(); + jsonObject1.put("status", "success"); + jsonObject1.put("msg", "成功"); + jsonObject1.put("type", ""); + jsonObject1.put("data", new JSONArray()); + jsonObject1.put("amount", 0); + AppWebSocketServer.AppSendInfo(jsonObject1,key, false); + tbCashierCartMapper.updateStatusByOrderId(orderId.toString(),"final"); + return Result.success(CodeEnum.SUCCESS,object.getJSONObject("data")); + }else { + return Result.fail(object.getString("msg")); } - TradeQueryReq req = new TradeQueryReq(); - req.setAppId(thirdApply.getAppId()); - req.setTimestamp(System.currentTimeMillis()); - req.setOrderNumber(payment.getTradeNumber()); - Map map = BeanUtil.transBeanMap(req); + } + }else { + String reqbody=""; - req.setSign(MD5Util.encrypt(map, thirdApply.getAppToken(), true)); + if(body.length()>15){ + reqbody=body.substring(0,6).concat("....").concat(body.substring(body.length()-6,body.length())).toString(); + }else { + reqbody=body.toString(); + } - ResponseEntity response = restTemplate.postForEntity(url.concat("merchantOrder/tradeQuery"), req, String.class); - if (response.getStatusCodeValue() == 200 && ObjectUtil.isNotEmpty(response.getBody())) { - JSONObject object = JSONObject.parseObject(response.getBody()); - - if (object.get("code").equals("0")) { - JSONObject data = object.getJSONObject("data"); - String status = data.getString("status"); - String cartStatus = ""; - switch (status) { - case "0": //交易失败 - break; - case "1": //交易成功 - - //修改数据库中购物车数据 - int cartCount = tbCashierCartMapper.updateStatusByOrderId(orderId.toString(), "final"); - - log.info("更新购物车:{}", cartCount); - - //更新子单状态 - tbOrderDetailMapper.updateStatusByOrderIdAndStatus(Integer.valueOf(orderId), "closed"); - - //修改主单状态 - orderInfo.setStatus("closed"); - orderInfo.setPayType("wx_lite"); - orderInfo.setPayOrderNo(payment.getTradeNumber()); - orderInfo.setPayAmount(orderInfo.getOrderAmount()); - tbOrderInfoMapper.updateByPrimaryKeySelective(orderInfo); + PublicResp publicResp= thirdPayService.scanpay(thirdUrl,thirdApply.getAppId(),reqbody,reqbody,payment.getAmount().setScale(2, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(100)).longValue(),"wx212769170d2c6b2a","wx212769170d2c6b2a",openId,ip,orderInfo.getOrderNo(),"S2405103298",callBack,null,thirdApply.getAppToken()); + if(ObjectUtil.isNotNull(publicResp)&&ObjectUtil.isNotEmpty(publicResp)){ + if("000000".equals(publicResp.getCode())){ + WxScanPayResp wxScanPayResp= publicResp.getObjData(); + if("TRADE_SUCCESS".equals(wxScanPayResp.getState())){ + payment.setTradeNumber(wxScanPayResp.getPayOrderId()); + payment.setUpdatedAt(System.currentTimeMillis()); + tbOrderPaymentMapper.updateByPrimaryKeySelective(payment); + orderInfo.setStatus("paying"); + orderInfo.setPayOrderNo(payment.getTradeNumber()); - JSONObject jsonObject = new JSONObject(); - jsonObject.put("token", 0); - jsonObject.put("type", "wxcreate"); - jsonObject.put("orderId", orderInfo.getId().toString()); - - producer.putOrderCollect(jsonObject.toJSONString()); - - - log.info("发送打印数据"); - producer.printMechine(orderInfo.getId() + ""); - log.info("发送赠送购物券"); - JSONObject coupons = new JSONObject(); - coupons.put("type", "buy"); - coupons.put("orderId", orderId); - producer.printCoupons(coupons.toJSONString()); - return Result.success(CodeEnum.SUCCESS, orderId); - case "2": //退款成功 - cartStatus = "refund"; - orderInfo.setStatus("refund"); - break; - case "3": //退款失败 - break; - case "4": //退款中 - cartStatus = "refunding"; - orderInfo.setStatus("refunding"); - break; - } - - tbCashierCartMapper.updateStatusByOrderId(orderId.toString(), cartStatus); - orderInfo.setUpdatedAt(System.currentTimeMillis()); - tbOrderInfoMapper.updateByPrimaryKeySelective(orderInfo); + tbOrderInfoMapper.updateByPrimaryKey(orderInfo); + String key= RedisCst.TABLE_CART.concat(orderInfo.getTableId()).concat("-").concat(orderInfo.getShopId()); + //清除缓存购物车数据 + redisUtil.deleteByKey(key); + JSONObject jsonObject1 = new JSONObject(); + jsonObject1.put("status", "success"); + jsonObject1.put("msg", "成功"); + jsonObject1.put("type", ""); + jsonObject1.put("data", new JSONArray()); + jsonObject1.put("amount", 0); + AppWebSocketServer.AppSendInfo(jsonObject1,key, false); + tbCashierCartMapper.updateStatusByOrderId(orderId.toString(),"final"); + return Result.success(CodeEnum.SUCCESS,wxScanPayResp.getPayInfo()); + }else{ + return Result.fail(publicResp.getMsg()); } } } } - return Result.success(CodeEnum.SUCCESS, orderId); + + + + return Result.fail("失败"); } + @Transactional(rollbackFor = Exception.class) - public Result memberIn(String openId, String userId, String amount, String shopId, String ip) { - if (ObjectUtil.isEmpty(openId) || ObjectUtil.isEmpty(userId)) { + public Result modifyOrderStatus(Integer orderId) throws IOException { + TbOrderInfo orderInfo= tbOrderInfoMapper.selectByPrimaryKey(Integer.valueOf(orderId)); + if(ObjectUtil.isEmpty(orderInfo)){ + return Result.fail("订单信息不存在"); + } + + if("paying".equals(orderInfo.getStatus())){ + TbOrderPayment payment= tbOrderPaymentMapper.selectByOrderId(orderInfo.getId().toString()); + if(ObjectUtil.isNotEmpty(payment)&&ObjectUtil.isNotEmpty(payment.getTradeNumber())){ + + TbMerchantThirdApply thirdApply= tbMerchantThirdApplyMapper.selectByPrimaryKey(Integer.valueOf(orderInfo.getMerchantId())); + + if(ObjectUtil.isEmpty(thirdApply)||ObjectUtil.isNull(thirdApply)){ + return Result.fail("支付通道不存在"); + } + + + + if("ysk".equals(thirdPayType)){ + TradeQueryReq req=new TradeQueryReq(); + req.setAppId(thirdApply.getAppId()); + req.setTimestamp(System.currentTimeMillis()); + req.setOrderNumber(payment.getTradeNumber()); + Map map= BeanUtil.transBeanMap(req); + + req.setSign(MD5Util.encrypt(map,thirdApply.getAppToken(),true)); + + ResponseEntity response= restTemplate.postForEntity(url.concat("merchantOrder/tradeQuery"),req,String.class); + if(response.getStatusCodeValue()==200&&ObjectUtil.isNotEmpty(response.getBody())){ + JSONObject object=JSONObject.parseObject(response.getBody()); + + if(object.get("code").equals("0")){ + JSONObject data=object.getJSONObject("data"); + String status=data.getString("status"); + String cartStatus=""; + switch (status){ + case "0": //交易失败 + break; + case "1": //交易成功 + + //修改数据库中购物车数据 + int cartCount= tbCashierCartMapper.updateStatusByOrderId(orderId.toString(),"final"); + + log.info("更新购物车:{}",cartCount); + + //更新子单状态 + tbOrderDetailMapper.updateStatusByOrderIdAndStatus(Integer.valueOf(orderId),"closed"); + + //修改主单状态 + orderInfo.setStatus("closed"); + orderInfo.setPayType("wx_lite"); + orderInfo.setPayOrderNo(payment.getTradeNumber()); + orderInfo.setPayAmount(orderInfo.getOrderAmount()); + tbOrderInfoMapper.updateByPrimaryKeySelective(orderInfo); + + + JSONObject jsonObject=new JSONObject(); + jsonObject.put("token",0); + jsonObject.put("type","wxcreate"); + jsonObject.put("orderId",orderInfo.getId().toString()); + + producer.putOrderCollect(jsonObject.toJSONString()); + + + + log.info("发送打印数据"); + producer.printMechine(orderInfo.getId() + ""); + + return Result.success(CodeEnum.SUCCESS,orderId); + case "2": //退款成功 + cartStatus="refund"; + orderInfo.setStatus("refund"); + break; + case "3": //退款失败 + break; + case "4": //退款中 + cartStatus="refunding"; + orderInfo.setStatus("refunding"); + break; + } + + tbCashierCartMapper.updateStatusByOrderId(orderId.toString(),cartStatus); + orderInfo.setUpdatedAt(System.currentTimeMillis()); + tbOrderInfoMapper.updateByPrimaryKeySelective(orderInfo); + } + } + }else { + PublicResp publicResp=thirdPayService.queryOrder(thirdUrl,thirdApply.getAppId(),orderInfo.getOrderNo(),null,thirdApply.getAppToken()); + if(ObjectUtil.isNotNull(publicResp)&&ObjectUtil.isNotEmpty(publicResp)){ + if("000000".equals(publicResp.getCode())){ + String cartStatus=""; + switch (publicResp.getObjData().getState()){ + case "TRADE_SUCCESS": + //修改数据库中购物车数据 + int cartCount= tbCashierCartMapper.updateStatusByOrderId(orderId.toString(),"final"); + + log.info("更新购物车:{}",cartCount); + + //更新子单状态 + tbOrderDetailMapper.updateStatusByOrderIdAndStatus(Integer.valueOf(orderId),"closed"); + + //修改主单状态 + orderInfo.setStatus("closed"); + orderInfo.setPayType("wx_lite"); + orderInfo.setPayOrderNo(payment.getTradeNumber()); + orderInfo.setPayAmount(orderInfo.getOrderAmount()); + tbOrderInfoMapper.updateByPrimaryKeySelective(orderInfo); + + + JSONObject jsonObject=new JSONObject(); + jsonObject.put("token",0); + jsonObject.put("type","wxcreate"); + jsonObject.put("orderId",orderInfo.getId().toString()); + + producer.putOrderCollect(jsonObject.toJSONString()); + + + + log.info("发送打印数据"); + producer.printMechine(orderInfo.getId() + ""); + + return Result.success(CodeEnum.SUCCESS,orderId); + case "REFUND_ING": + cartStatus="refunding"; + orderInfo.setStatus("refunding"); + break; + } + } + } + } + + } + } + return Result.success(CodeEnum.SUCCESS,orderId); + } + + + + + @Transactional(rollbackFor = Exception.class) + public Result memberIn(String openId,String userId,String amount,String shopId,String ip){ + if(ObjectUtil.isEmpty(openId)||ObjectUtil.isEmpty(userId)){ return Result.fail("用户信息允许为空"); } - TbShopUser tbShopUser = tbShopUserMapper.selectByUserIdAndShopId(userId, shopId); - if (ObjectUtil.isEmpty(tbShopUser)) { + TbShopUser tbShopUser= tbShopUserMapper.selectByUserIdAndShopId(userId,shopId); + if(ObjectUtil.isEmpty(tbShopUser)){ return Result.fail("对应的用户信息不存在"); } + if(ObjectUtil.isEmpty(tbShopUser.getIsVip())||!"1".equals(tbShopUser.getIsVip().toString())){ + return Result.fail("非会员用户不允许充值"); + } - TbShopInfo shopInfo = tbShopInfoMapper.selectByPrimaryKey(Integer.valueOf(shopId)); - if (ObjectUtil.isEmpty(shopInfo)) { + + TbShopInfo shopInfo= tbShopInfoMapper.selectByPrimaryKey(Integer.valueOf(shopId)); + if(ObjectUtil.isEmpty(shopInfo)){ return Result.fail("对应的店铺信息不存在"); } - TbMerchantThirdApply thirdApply = tbMerchantThirdApplyMapper.selectByPrimaryKey(Integer.valueOf(shopInfo.getMerchantId())); - if (ObjectUtil.isEmpty(thirdApply) || ObjectUtil.isNull(thirdApply)) { + + TbMerchantThirdApply thirdApply= tbMerchantThirdApplyMapper.selectByPrimaryKey(Integer.valueOf(shopInfo.getMerchantId())); + if(ObjectUtil.isEmpty(thirdApply)||ObjectUtil.isNull(thirdApply)){ return Result.fail("支付通道不存在"); } - BigDecimal payAmount = new BigDecimal(amount).setScale(2, BigDecimal.ROUND_DOWN); + BigDecimal payAmount= new BigDecimal(amount).setScale(2,BigDecimal.ROUND_DOWN); - TbMemberIn memberIn = new TbMemberIn(); + TbMemberIn memberIn=new TbMemberIn(); memberIn.setAmount(payAmount); memberIn.setUserId(Integer.valueOf(tbShopUser.getUserId())); - memberIn.setCode(tbShopUser.getDynamicCode()); + memberIn.setCode(tbShopUser.getCode()); memberIn.setShopId(shopInfo.getId()); memberIn.setStatus("7"); memberIn.setMerchantId(Integer.valueOf(shopInfo.getMerchantId())); @@ -585,7 +453,8 @@ public class PayService { tbMemberInMapper.insert(memberIn); - PayReq req = new PayReq(); + + PayReq req=new PayReq(); req.setAppId(thirdApply.getAppId()); req.setTimestamp(System.currentTimeMillis()); @@ -599,51 +468,26 @@ public class PayService { req.setUserId(openId); - Map map = BeanUtil.transBeanMap(req); - req.setSign(MD5Util.encrypt(map, thirdApply.getAppToken(), true)); + Map map= BeanUtil.transBeanMap(req); + req.setSign(MD5Util.encrypt(map,thirdApply.getAppToken(),true)); - ResponseEntity response = restTemplate.postForEntity(url.concat("trans/pay"), req, String.class); - if (response.getStatusCodeValue() == 200 && ObjectUtil.isNotEmpty(response.getBody())) { - JSONObject object = JSONObject.parseObject(response.getBody()); - if (object.get("code").equals("0")) { + ResponseEntity response= restTemplate.postForEntity(url.concat("trans/pay"),req,String.class); + if(response.getStatusCodeValue()==200&&ObjectUtil.isNotEmpty(response.getBody())){ + JSONObject object=JSONObject.parseObject(response.getBody()); + if(object.get("code").equals("0")){ memberIn.setOrderNo(object.getJSONObject("data").get("orderNumber").toString()); memberIn.setUpdateTime(new Date()); tbMemberInMapper.updateByPrimaryKeySelective(memberIn); - return Result.success(CodeEnum.SUCCESS, object.getJSONObject("data")); - } else { + return Result.success(CodeEnum.SUCCESS,object.getJSONObject("data")); + }else { return Result.fail(object.getString("msg")); } } return Result.fail("失败"); } - @Transactional(rollbackFor = Exception.class) - public String callBackGroupPay(String payOrderNO) { - TbGroupOrderInfo orderInfo = tbGroupOrderInfoMapper.selectByPayOrderNo(payOrderNO); - if (ObjectUtil.isEmpty(orderInfo)) { - return "订单信息不存在"; - } - if ("unpaid".equals(orderInfo.getStatus())) { - for (int i = 0; i < orderInfo.getNumber(); i++) { - TbGroupOrderCoupon groupOrderCoupon = new TbGroupOrderCoupon(); - groupOrderCoupon.setOrderId(orderInfo.getId()); - groupOrderCoupon.setCouponNo(genCouponNumber()); - groupOrderCoupon.setIsRefund(0); - groupOrderCouponService.insert(groupOrderCoupon); - } - orderInfo.setExpDate(getNextMonDate()); - //修改主单状态 - orderInfo.setStatus("unused"); - orderInfo.setPayAmount(orderInfo.getOrderAmount()); - tbGroupOrderInfoMapper.update(orderInfo); - return "SUCCESS"; - }else { - log.error("支付回调异常,订单状态为{}",orderInfo); - } - return null; - } @Transactional(rollbackFor = Exception.class) public String callBackPay(String payOrderNO) { @@ -668,10 +512,10 @@ public class PayService { tbOrderInfoMapper.updateByPrimaryKeySelective(orderInfo); - JSONObject jsonObject = new JSONObject(); - jsonObject.put("token", 0); - jsonObject.put("type", "wxcreate"); - jsonObject.put("orderId", orderInfo.getId().toString()); + JSONObject jsonObject=new JSONObject(); + jsonObject.put("token",0); + jsonObject.put("type","wxcreate"); + jsonObject.put("orderId",orderInfo.getId().toString()); producer.putOrderCollect(jsonObject.toJSONString()); @@ -686,10 +530,10 @@ public class PayService { @Transactional(rollbackFor = Exception.class) - public String minsuccess(String payOrderNO, String tradeNo) { + public String minsuccess(String payOrderNO,String tradeNo){ - TbMemberIn memberIn = tbMemberInMapper.selectByOrderNo(payOrderNO); - if (ObjectUtil.isEmpty(memberIn)) { + TbMemberIn memberIn= tbMemberInMapper.selectByOrderNo(payOrderNO); + if(ObjectUtil.isEmpty(memberIn)){ return "充值记录不存在"; } @@ -698,18 +542,21 @@ public class PayService { memberIn.setUpdateTime(new Date()); tbMemberInMapper.updateByPrimaryKeySelective(memberIn); - TbShopUser tbShopUser = tbShopUserMapper.selectByUserIdAndShopId(memberIn.getUserId().toString(), memberIn.getShopId().toString()); - if (ObjectUtil.isEmpty(tbShopUser)) { + TbShopUser tbShopUser= tbShopUserMapper.selectByUserIdAndShopId(memberIn.getUserId().toString(),memberIn.getShopId().toString()); + if(ObjectUtil.isEmpty(tbShopUser)){ return "用户信息不存在"; } + if(!"1".equals(tbShopUser.getIsVip().toString())){ + tbShopUser.setIsVip(Byte.parseByte("1")); + } + //修改客户资金 - tbShopUser.setIsVip(Byte.parseByte("1")); tbShopUser.setAmount(tbShopUser.getAmount().add(memberIn.getAmount())); tbShopUser.setUpdatedAt(System.currentTimeMillis()); tbShopUserMapper.updateByPrimaryKeySelective(tbShopUser); - TbShopUserFlow flow = new TbShopUserFlow(); + TbShopUserFlow flow=new TbShopUserFlow(); flow.setShopUserId(Integer.valueOf(tbShopUser.getId())); flow.setBizCode("scanMemberIn"); flow.setBizName("会员扫码充值"); @@ -725,76 +572,52 @@ public class PayService { // // } - /** - * 生成长度为12的随机串 - * - * @return - */ - public static String genCouponNumber() { - Random random = new Random(); - long min = 10000000000L; - long max = 19999999999L; - // 生成介于min和max之间的随机整数 - long randomNumber = min + ((long) (random.nextDouble() * (max - min))); - // 将随机整数转换为字符串,并在前面补0,直到长度为12位 - return String.format("%012d", randomNumber); - } - /** - * 获取一个月后的时间 - * - * @return - */ - public Date getNextMonDate() { - // 获取当前日期和时间 - LocalDateTime currentDateTime = LocalDateTime.now(); - // 计算一个月后的日期和时间 - LocalDateTime nextMonthDateTime = currentDateTime.plusMonths(1); - return java.sql.Timestamp.valueOf(nextMonthDateTime); - } + public static void main(String[] args){ + + RestTemplate restTemplate1= new RestTemplate(); + JSONObject param=new JSONObject(); + + String priv="MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAIqNqTqhN8zE7eFZnwKcyBTENce2wdAtl/gaDHNuNVgg33dS27Jx0fKl9QSHXyzyxbAdG8F94niYbRBstrMymFRjuO72jH+rIH62Ym1k7l8JSLVK2dKHXt8lHDaQGUP10q0EEocnDQ9cL93oBNG1ttsV6vOAu1TPvRK9TGihRAe1AgMBAAECgYBmI8KCl0DkcrSOsRvYuC2DqZWf8el1B3eFjeZp3e/zVOCIPYv6Q5ArWg6DVSxjnWEA0KSagqvGjU+xkQMqnXzPcPMhsIS+1wyR/pP+pwiatO2ioHaQpEqHg9eXhxrgA477/xuKVw9zl5GNqaIgd++2NDXnqLh0Y6OR73f0OB5eDQJBAPihEm+UWLOam/Q/k2+k4Lm2dvxJTBur1fslBiJpgMhgcz/PlwRwpL7aPD0AuPv0NqLouuoTiKpq9icnUv12tgsCQQCOqTANw0IErCHUNdinjXewmG3ui1j9XgM41rSn5ZeTrPL4GhZc2zbS/pZT4PBKUL6NLGkfPHmw4rOmNL/Xc5E/AkBqAwQBX5eSvVHSC2mqKPtJNGv3lqlFAzfyJg8/jQzEY5vAkZsq4Xzdg+A7gptdkvvY6rMIK9wSDhl3CGVyfbORAkA1N+g1OiHmnFACWhP4bU25EyPvWQxZeDi7e1zpRTzGWj5JT3IIMb7B9zcdE0yQbI6pG2gbvvOmiOt7lTH7raEBAkBas2gugvR3f0aGqQcqMpyM627pyRppQ2h58/7KBylP3oR2BReqMUcXeiJ8TuBXzbRXpeVQ0DWOva5CWZJmBMdz"; + + PayReq req=new PayReq(); + + req.setAppId("M8002023120892f1e4"); + req.setTimestamp(System.currentTimeMillis()); + req.setIp("127.0.0.1"); + req.setMercOrderNo(System.currentTimeMillis()+""); + req.setNotifyUrl("https"); + req.setPayAmt("0.01"); + req.setPayType("03"); + req.setPayWay("WXZF"); + req.setSubject("ddd"); + req.setUserId("or1l864NBOoJZhC5x_yeziZ26j6c"); + + Map map= BeanUtil.transBeanMap(req); + + req.setSign(MD5Util.encrypt(map,priv,true)); -// public static void main(String[] args) { -// -// RestTemplate restTemplate1 = new RestTemplate(); -// JSONObject param = new JSONObject(); -// -// String priv = "MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAIqNqTqhN8zE7eFZnwKcyBTENce2wdAtl/gaDHNuNVgg33dS27Jx0fKl9QSHXyzyxbAdG8F94niYbRBstrMymFRjuO72jH+rIH62Ym1k7l8JSLVK2dKHXt8lHDaQGUP10q0EEocnDQ9cL93oBNG1ttsV6vOAu1TPvRK9TGihRAe1AgMBAAECgYBmI8KCl0DkcrSOsRvYuC2DqZWf8el1B3eFjeZp3e/zVOCIPYv6Q5ArWg6DVSxjnWEA0KSagqvGjU+xkQMqnXzPcPMhsIS+1wyR/pP+pwiatO2ioHaQpEqHg9eXhxrgA477/xuKVw9zl5GNqaIgd++2NDXnqLh0Y6OR73f0OB5eDQJBAPihEm+UWLOam/Q/k2+k4Lm2dvxJTBur1fslBiJpgMhgcz/PlwRwpL7aPD0AuPv0NqLouuoTiKpq9icnUv12tgsCQQCOqTANw0IErCHUNdinjXewmG3ui1j9XgM41rSn5ZeTrPL4GhZc2zbS/pZT4PBKUL6NLGkfPHmw4rOmNL/Xc5E/AkBqAwQBX5eSvVHSC2mqKPtJNGv3lqlFAzfyJg8/jQzEY5vAkZsq4Xzdg+A7gptdkvvY6rMIK9wSDhl3CGVyfbORAkA1N+g1OiHmnFACWhP4bU25EyPvWQxZeDi7e1zpRTzGWj5JT3IIMb7B9zcdE0yQbI6pG2gbvvOmiOt7lTH7raEBAkBas2gugvR3f0aGqQcqMpyM627pyRppQ2h58/7KBylP3oR2BReqMUcXeiJ8TuBXzbRXpeVQ0DWOva5CWZJmBMdz"; -// -// PayReq req = new PayReq(); -// -// req.setAppId("M8002023120892f1e4"); + ResponseEntity response= restTemplate1.postForEntity("https://gatewaytestapi.sxczgkj.cn/gate-service/trans/pay",req,String.class); + + + +// TradeQueryReq req=new TradeQueryReq(); +// req.setAppId("M800202305094c170c"); // req.setTimestamp(System.currentTimeMillis()); -// req.setIp("127.0.0.1"); -// req.setMercOrderNo(System.currentTimeMillis() + ""); -// req.setNotifyUrl("https"); -// req.setPayAmt("0.01"); -// req.setPayType("03"); -// req.setPayWay("WXZF"); -// req.setSubject("ddd"); -// req.setUserId("or1l864NBOoJZhC5x_yeziZ26j6c"); +// req.setOrderNumber("SXF_W_MERC_20240205182102491"); +// Map map= BeanUtil.transBeanMap(req); // -// Map map = BeanUtil.transBeanMap(req); +// req.setSign(MD5Util.encrypt(map,priv,true)); // -// req.setSign(MD5Util.encrypt(map, priv, true)); +// ResponseEntity response= restTemplate1.postForEntity("https://gateway.api.sxczgkj.cn/gate-service/merchantOrder/tradeQuery",req,String.class); // // -// ResponseEntity response = restTemplate1.postForEntity("https://gatewaytestapi.sxczgkj.cn/gate-service/trans/pay", req, String.class); -// -// -//// TradeQueryReq req=new TradeQueryReq(); -//// req.setAppId("M800202305094c170c"); -//// req.setTimestamp(System.currentTimeMillis()); -//// req.setOrderNumber("SXF_W_MERC_20240205182102491"); -//// Map map= BeanUtil.transBeanMap(req); -//// -//// req.setSign(MD5Util.encrypt(map,priv,true)); -//// -//// ResponseEntity response= restTemplate1.postForEntity("https://gateway.api.sxczgkj.cn/gate-service/merchantOrder/tradeQuery",req,String.class); -//// -//// -// System.out.println(">>>>>>>>>>>>>>>" + response.getBody()); -// } + System.out.println(">>>>>>>>>>>>>>>"+response.getBody()); + } + + + } diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/thirdpay/constants/SignTypeEnum.java b/src/main/java/com/chaozhanggui/system/cashierservice/thirdpay/constants/SignTypeEnum.java new file mode 100644 index 0000000..142bfdf --- /dev/null +++ b/src/main/java/com/chaozhanggui/system/cashierservice/thirdpay/constants/SignTypeEnum.java @@ -0,0 +1,16 @@ +package com.chaozhanggui.system.cashierservice.thirdpay.constants; + +public enum SignTypeEnum { + + MD5("MD5"),RSA2("RSA2"); + + private final String value; + + SignTypeEnum(String value) { + this.value = value; + } + + public String getValue() { + return value; + } +} diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/thirdpay/req/MainScanReq.java b/src/main/java/com/chaozhanggui/system/cashierservice/thirdpay/req/MainScanReq.java new file mode 100644 index 0000000..502d535 --- /dev/null +++ b/src/main/java/com/chaozhanggui/system/cashierservice/thirdpay/req/MainScanReq.java @@ -0,0 +1,41 @@ +package com.chaozhanggui.system.cashierservice.thirdpay.req; + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class MainScanReq implements Serializable { + + private String subject; + + private String body; + + private Long amount; + + private String subAppid; + + private String currency; + + private String authCode; + + private String mchOrderNo; + + private String storeId; + + private String notifyUrl; + + public MainScanReq(String subject, String body, Long amount, String subAppid, String currency, String authCode, String mchOrderNo, String storeId, String notifyUrl) { + this.subject = subject; + this.body = body; + this.amount = amount; + this.subAppid = subAppid; + this.currency = currency; + this.authCode = authCode; + this.mchOrderNo = mchOrderNo; + this.storeId = storeId; + this.notifyUrl = notifyUrl; + } + + +} diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/thirdpay/req/OrderRefundReq.java b/src/main/java/com/chaozhanggui/system/cashierservice/thirdpay/req/OrderRefundReq.java new file mode 100644 index 0000000..9bdbbb8 --- /dev/null +++ b/src/main/java/com/chaozhanggui/system/cashierservice/thirdpay/req/OrderRefundReq.java @@ -0,0 +1,32 @@ +package com.chaozhanggui.system.cashierservice.thirdpay.req; + +import lombok.Data; + +import java.io.Serializable; +@Data +public class OrderRefundReq implements Serializable { + + private String mchRefundNo; + + private String payOrderId; + + private String mchOrderNo; + + private String refundReason; + + private Long refundAmount; + + private String notifyUrl; + + private String extParam; + + public OrderRefundReq(String mchRefundNo, String payOrderId, String mchOrderNo, String refundReason, Long refundAmount, String notifyUrl, String extParam) { + this.mchRefundNo = mchRefundNo; + this.payOrderId = payOrderId; + this.mchOrderNo = mchOrderNo; + this.refundReason = refundReason; + this.refundAmount = refundAmount; + this.notifyUrl = notifyUrl; + this.extParam = extParam; + } +} diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/thirdpay/req/OrderReturnQueryReq.java b/src/main/java/com/chaozhanggui/system/cashierservice/thirdpay/req/OrderReturnQueryReq.java new file mode 100644 index 0000000..d39dba3 --- /dev/null +++ b/src/main/java/com/chaozhanggui/system/cashierservice/thirdpay/req/OrderReturnQueryReq.java @@ -0,0 +1,18 @@ +package com.chaozhanggui.system.cashierservice.thirdpay.req; + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class OrderReturnQueryReq implements Serializable { + + private String mchRefundNo; + + private String refundOrderId; + + public OrderReturnQueryReq(String mchRefundNo, String refundOrderId) { + this.mchRefundNo = mchRefundNo; + this.refundOrderId = refundOrderId; + } +} diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/thirdpay/req/OrderStatusQueryReq.java b/src/main/java/com/chaozhanggui/system/cashierservice/thirdpay/req/OrderStatusQueryReq.java new file mode 100644 index 0000000..c47a593 --- /dev/null +++ b/src/main/java/com/chaozhanggui/system/cashierservice/thirdpay/req/OrderStatusQueryReq.java @@ -0,0 +1,18 @@ +package com.chaozhanggui.system.cashierservice.thirdpay.req; + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class OrderStatusQueryReq implements Serializable { + + private String payOrderId; + + private String mchOrderNo; + + public OrderStatusQueryReq(String payOrderId, String mchOrderNo) { + this.payOrderId = payOrderId; + this.mchOrderNo = mchOrderNo; + } +} diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/thirdpay/req/PublicParam.java b/src/main/java/com/chaozhanggui/system/cashierservice/thirdpay/req/PublicParam.java new file mode 100644 index 0000000..855ceac --- /dev/null +++ b/src/main/java/com/chaozhanggui/system/cashierservice/thirdpay/req/PublicParam.java @@ -0,0 +1,33 @@ +package com.chaozhanggui.system.cashierservice.thirdpay.req; + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class PublicParam implements Serializable { + + private String appId; + + private String sign; + + private String signType; + + private String bizData; + + private String reqTime; + + private String version; + + private String reqId; + + public PublicParam(String appId, String sign, String signType, String bizData, String reqTime, String version, String reqId) { + this.appId = appId; + this.sign = sign; + this.signType = signType; + this.bizData = bizData; + this.reqTime = reqTime; + this.version = version; + this.reqId = reqId; + } +} diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/thirdpay/req/WxScanPayReq.java b/src/main/java/com/chaozhanggui/system/cashierservice/thirdpay/req/WxScanPayReq.java new file mode 100644 index 0000000..0e6eab3 --- /dev/null +++ b/src/main/java/com/chaozhanggui/system/cashierservice/thirdpay/req/WxScanPayReq.java @@ -0,0 +1,49 @@ +package com.chaozhanggui.system.cashierservice.thirdpay.req; + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class WxScanPayReq implements Serializable { + + private String subject; + + private String body; + + private Long amount; + + private String currency; + + private String payType; + + + private String subAppid; + + private String userId; + + private String clientIp; + + private String mchOrderNo; + + private String storeId; + + private String notifyUrl; + + private String returnUrl; + + public WxScanPayReq(String subject, String body, Long amount, String currency, String payType, String subAppid, String userId, String clientIp, String mchOrderNo, String storeId, String notifyUrl, String returnUrl) { + this.subject = subject; + this.body = body; + this.amount = amount; + this.currency = currency; + this.payType = payType; + this.subAppid = subAppid; + this.userId = userId; + this.clientIp = clientIp; + this.mchOrderNo = mchOrderNo; + this.storeId = storeId; + this.notifyUrl = notifyUrl; + this.returnUrl = returnUrl; + } +} diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/thirdpay/resp/MainScanResp.java b/src/main/java/com/chaozhanggui/system/cashierservice/thirdpay/resp/MainScanResp.java new file mode 100644 index 0000000..46a1636 --- /dev/null +++ b/src/main/java/com/chaozhanggui/system/cashierservice/thirdpay/resp/MainScanResp.java @@ -0,0 +1,47 @@ +package com.chaozhanggui.system.cashierservice.thirdpay.resp; + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class MainScanResp implements Serializable { + + private Long amount; + + private String mchOrderNo; + + private String payOrderId; + + private String mercNo; + + private String channelSendNo; + + private String channelTradeNo; + + private String state; + + private String payType; + + private String ifCode; + + private String extParam; + + private String note; + + private String tradeFee; + + private String storeId; + + private String subject; + + private String drType; + + private Long refundAmt; + + private Integer refundState; + + private Long cashFee; + + private String settlementType; +} diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/thirdpay/resp/OderReturnQueyResp.java b/src/main/java/com/chaozhanggui/system/cashierservice/thirdpay/resp/OderReturnQueyResp.java new file mode 100644 index 0000000..b481b15 --- /dev/null +++ b/src/main/java/com/chaozhanggui/system/cashierservice/thirdpay/resp/OderReturnQueyResp.java @@ -0,0 +1,36 @@ +package com.chaozhanggui.system.cashierservice.thirdpay.resp; + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class OderReturnQueyResp implements Serializable { + + + private String mchRefundNo; + + private String refundOrderId; + + private String state; + + private String oriPayOrderId; + + private String mercNo; + + private Long oriAmount; + + private Long refundAmt; + + private String refundReason; + + private String ifCode; + + private String note; + + private String refundTime; + + private String extParam; + + private String payType; +} diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/thirdpay/resp/OrderReturnResp.java b/src/main/java/com/chaozhanggui/system/cashierservice/thirdpay/resp/OrderReturnResp.java new file mode 100644 index 0000000..1a930f8 --- /dev/null +++ b/src/main/java/com/chaozhanggui/system/cashierservice/thirdpay/resp/OrderReturnResp.java @@ -0,0 +1,33 @@ +package com.chaozhanggui.system.cashierservice.thirdpay.resp; + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class OrderReturnResp implements Serializable { + + private String mchRefundNo; + + private String refundOrderId; + + private String state; + + private String oriPayOrderId; + + private String mercNo; + + private Long oriAmount; + + private Long refundAmt; + + private String refundReason; + + private String ifCode; + + private String refundTime; + + private String extParam; + + private String payType; +} diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/thirdpay/resp/OrderStatusQueryResp.java b/src/main/java/com/chaozhanggui/system/cashierservice/thirdpay/resp/OrderStatusQueryResp.java new file mode 100644 index 0000000..0afc145 --- /dev/null +++ b/src/main/java/com/chaozhanggui/system/cashierservice/thirdpay/resp/OrderStatusQueryResp.java @@ -0,0 +1,49 @@ +package com.chaozhanggui.system.cashierservice.thirdpay.resp; + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class OrderStatusQueryResp implements Serializable { + + private Long amount; + + private String channelSendNo; + + private String ifCode; + + private String mercNo; + + private String mchOrderNo; + + private String payOrderId; + + private String payType; + + private String channelTradeNo; + + private String state; + + private String refundAmt; + + private String refundState; + + private String drType; + + private String extParam; + + private String payTime; + + private String subject; + + private String tradeFee; + + private String cashFee; + + private String storeId; + + private String userId; + + private String settlementType; +} diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/thirdpay/resp/PublicResp.java b/src/main/java/com/chaozhanggui/system/cashierservice/thirdpay/resp/PublicResp.java new file mode 100644 index 0000000..d911c21 --- /dev/null +++ b/src/main/java/com/chaozhanggui/system/cashierservice/thirdpay/resp/PublicResp.java @@ -0,0 +1,22 @@ +package com.chaozhanggui.system.cashierservice.thirdpay.resp; + +import lombok.Data; + +import java.io.Serializable; +@Data +public class PublicResp implements Serializable { + + private String code; + + private String msg; + + private String sign; + + private String bizData; + + private T objData; + + private String signType; + + private String timestamp; +} diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/thirdpay/resp/WxScanPayResp.java b/src/main/java/com/chaozhanggui/system/cashierservice/thirdpay/resp/WxScanPayResp.java new file mode 100644 index 0000000..af8b012 --- /dev/null +++ b/src/main/java/com/chaozhanggui/system/cashierservice/thirdpay/resp/WxScanPayResp.java @@ -0,0 +1,51 @@ +package com.chaozhanggui.system.cashierservice.thirdpay.resp; + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class WxScanPayResp implements Serializable { + + private Long amount; + + private String mchOrderNo; + + private String payOrderId; + + private String mercNo; + + private String channelSendNo; + + private String channelTradeNo; + + private String state; + + private String payType; + + private String ifCode; + + private String extParam; + + private String payInfo; + + private String liteInfo; + + private String note; + + private String tradeFee; + + private String storeId; + + private String subject; + + private String drType; + + private String refundAmt; + + private String refundState; + + private String cashFee; + + private String settlementType; +} diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/thirdpay/service/ThirdPayService.java b/src/main/java/com/chaozhanggui/system/cashierservice/thirdpay/service/ThirdPayService.java new file mode 100644 index 0000000..2c0f05b --- /dev/null +++ b/src/main/java/com/chaozhanggui/system/cashierservice/thirdpay/service/ThirdPayService.java @@ -0,0 +1,300 @@ +package com.chaozhanggui.system.cashierservice.thirdpay.service; + +import cn.hutool.http.HttpRequest; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.TypeReference; +import com.chaozhanggui.system.cashierservice.thirdpay.constants.SignTypeEnum; +import com.chaozhanggui.system.cashierservice.thirdpay.req.*; +import com.chaozhanggui.system.cashierservice.thirdpay.resp.*; +import com.chaozhanggui.system.cashierservice.util.DateUtils; +import com.chaozhanggui.system.cashierservice.util.JSONUtil; +import com.chaozhanggui.system.cashierservice.util.MD5Util; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.lang.reflect.Field; +import java.util.Arrays; +import java.util.Comparator; +import java.util.LinkedHashMap; + +@Service +@Slf4j +public class ThirdPayService { + + private static String micropay="/api/open/payment/micropay"; + + private static String ltpay="/api/open/payment/ltpay"; + + private static String trade="/api/open/query/trade"; + + /** + * 被扫接口 + * @param url + * @param appId + * @param subject + * @param body + * @param amount + * @param subAppId + * @param authCode + * @param orderNo + * @param storeId + * @param notifyUrl + * @param key + * @return + */ + public PublicResp mainScan(String url,String appId, String subject, String body, Long amount, String subAppId, String authCode, String orderNo, String storeId, String notifyUrl, + String key + ) { + + MainScanReq mainScanReq = new MainScanReq(subject, body, amount, subAppId, "cny", authCode, orderNo, storeId, notifyUrl); + PublicParam param = new PublicParam(appId, "", SignTypeEnum.MD5.getValue(), null, DateUtils.getSdfTimes(), "1.0", String.valueOf(System.currentTimeMillis())); + + + try { + String str = JSONUtil.toJSONString(sortFields(mainScanReq)); + param.setBizData(str); + String tt = sortFieldsAndPrint(param); + String MD5 = tt.concat("appSecret=" + key); + log.info("加签原传:{}", MD5); + String sign = MD5Util.encrypt(MD5); + param.setSign(sign); + String reqbody = JSONUtil.toJSONString(param); + log.info("请求参数:{}", reqbody); + String response = HttpRequest.post(url.concat(micropay)).body(reqbody).execute().body(); + log.info("返回结果:{}", response); + PublicResp resp =JSONUtil.parseJSONStr2T(response,PublicResp.class); + + resp.setObjData(JSONUtil.parseJSONStr2T(resp.getBizData(),MainScanResp.class)); + return resp; + } catch (IllegalAccessException e) { + throw new RuntimeException(e); + } + + } + + + + /** + * 主扫接口(小程序) + * @param url + * @param appId + * @param subject + * @param body + * @param amount + * @param payType + * @param subAppId + * @param userId + * @param clinetIp + * @param orderNo + * @param storeId + * @param notifyUrl + * @param returnUrl + * @param key + * @return + */ + + public PublicResp scanpay(String url,String appId, String subject, String body, Long amount,String payType, String subAppId, String userId, + + String clinetIp,String orderNo, String storeId, String notifyUrl,String returnUrl, + String key){ + WxScanPayReq scanPayReq=new WxScanPayReq(subject,body,amount,"cny",payType,subAppId,userId,clinetIp,orderNo,storeId,notifyUrl,returnUrl); + PublicParam param=new PublicParam(appId,null,SignTypeEnum.MD5.getValue(),null,DateUtils.getSdfTimes(), "1.0", String.valueOf(System.currentTimeMillis())); + + + try { + String str = JSONUtil.toJSONString(sortFields(scanPayReq)); + param.setBizData(str); + String tt = sortFieldsAndPrint(param); + String MD5 = tt.concat("appSecret=" + key); + log.info("加签原传:{}", MD5); + String sign = MD5Util.encrypt(MD5); + param.setSign(sign); + String reqbody = JSONUtil.toJSONString(param); + log.info("请求参数:{}", reqbody); + String response = HttpRequest.post(url.concat(ltpay)).body(reqbody).execute().body(); + log.info("返回结果:{}", response); + PublicResp resp =JSONUtil.parseJSONStr2T(response,PublicResp.class); + resp.setObjData(JSONUtil.parseJSONStr2T(resp.getBizData(),WxScanPayResp.class)); + return resp; + } catch (IllegalAccessException e) { + throw new RuntimeException(e); + } + + } + + /** + * 查询订单状态 + * @param url + * @param appId + * @param payOrderId + * @param mchOrderNo + * @param key + * @return + */ + public PublicResp queryOrder(String url,String appId, String payOrderId,String mchOrderNo,String key){ + OrderStatusQueryReq req=new OrderStatusQueryReq(payOrderId,mchOrderNo); + PublicParam param=new PublicParam(appId,null,SignTypeEnum.MD5.getValue(), null,DateUtils.getSdfTimes(), "1.0", String.valueOf(System.currentTimeMillis())); + try { + String str = JSONUtil.toJSONString(sortFields(req)); + param.setBizData(str); + String tt = sortFieldsAndPrint(param); + String MD5 = tt.concat("appSecret=" + key); + log.info("加签原传:{}", MD5); + String sign = MD5Util.encrypt(MD5); + param.setSign(sign); + String reqbody = JSONUtil.toJSONString(param); + log.info("请求参数:{}", reqbody); + String response = HttpRequest.post(url.concat(trade)).body(reqbody).execute().body(); + log.info("返回结果:{}", response); + PublicResp resp =JSONUtil.parseJSONStr2T(response,PublicResp.class); + resp.setObjData(JSONUtil.parseJSONStr2T(resp.getBizData(),OrderStatusQueryResp.class)); + return resp; + } catch (IllegalAccessException e) { + throw new RuntimeException(e); + } + + } + + + /** + * 退款 + * @param url + * @param appId + * @param mchRefundNo + * @param payOrderId + * @param mchOrderNo + * @param refundReason + * @param refundAmount + * @param notifyUrl + * @param extParam + * @param key + * @return + */ + public PublicResp returnOrder(String url,String appId, String mchRefundNo, String payOrderId, String mchOrderNo, String refundReason, Long refundAmount, String notifyUrl, String extParam,String key){ + OrderRefundReq req=new OrderRefundReq(mchRefundNo, payOrderId, mchOrderNo, refundReason, refundAmount, notifyUrl, extParam); + PublicParam param=new PublicParam(appId,null,SignTypeEnum.MD5.getValue(), null,DateUtils.getSdfTimes(), "1.0", String.valueOf(System.currentTimeMillis())); + try { + String str = JSONUtil.toJSONString(sortFields(req)); + param.setBizData(str); + String tt = sortFieldsAndPrint(param); + String MD5 = tt.concat("appSecret=" + key); + log.info("加签原传:{}", MD5); + String sign = MD5Util.encrypt(MD5); + param.setSign(sign); + String reqbody = JSONUtil.toJSONString(param); + log.info("请求参数:{}", reqbody); + String response = HttpRequest.post(url.concat(trade)).body(reqbody).execute().body(); + log.info("返回结果:{}", response); + PublicResp resp =JSONUtil.parseJSONStr2T(response,PublicResp.class); + resp.setObjData(JSONUtil.parseJSONStr2T(resp.getBizData(),OrderReturnResp.class)); + return resp; + } catch (IllegalAccessException e) { + throw new RuntimeException(e); + } + + } + + + /** + * 查询退款订单 + * @param url + * @param appId + * @param mchRefundNo + * @param refundOrderId + * @param key + * @return + */ + public PublicResp returnOrderQuery(String url,String appId,String mchRefundNo, String refundOrderId,String key){ + OrderReturnQueryReq req=new OrderReturnQueryReq(mchRefundNo,refundOrderId); + PublicParam param=new PublicParam(appId,null,SignTypeEnum.MD5.getValue(), null,DateUtils.getSdfTimes(), "1.0", String.valueOf(System.currentTimeMillis())); + try { + String str = JSONUtil.toJSONString(sortFields(req)); + param.setBizData(str); + String tt = sortFieldsAndPrint(param); + String MD5 = tt.concat("appSecret=" + key); + log.info("加签原传:{}", MD5); + String sign = MD5Util.encrypt(MD5); + param.setSign(sign); + String reqbody = JSONUtil.toJSONString(param); + log.info("请求参数:{}", reqbody); + String response = HttpRequest.post(url.concat(trade)).body(reqbody).execute().body(); + log.info("返回结果:{}", response); + PublicResp resp =JSONUtil.parseJSONStr2T(response,PublicResp.class); + resp.setObjData(JSONUtil.parseJSONStr2T(resp.getBizData(),OrderReturnQueryReq.class)); + return resp; + } catch (IllegalAccessException e) { + throw new RuntimeException(e); + } + + } + + + + + + + public static String sortFieldsAndPrint(Object obj) throws IllegalAccessException { + StringBuffer sb = new StringBuffer(); + Class clazz = obj.getClass(); + Field[] fields = clazz.getDeclaredFields(); + + // 按字段名称排序 + Arrays.sort(fields, Comparator.comparing(Field::getName)); + + for (Field field : fields) { + // 可能需要设置访问权限 + field.setAccessible(true); + if ("sign".equals(field.getName())) { + continue; + } + Object value = field.get(obj); + + + StringBuffer param = new StringBuffer(); + param.append(field.getName()); + param.append("="); + if (value instanceof String) { + param.append(value); + + } else if (value instanceof Integer) { + param.append(value); + } else if (value instanceof Long) { + param.append(value); + } + + param.append("&"); + sb.append(param); + } + return sb.toString(); + } + + + public static LinkedHashMap sortFields(Object obj) throws IllegalAccessException { + + LinkedHashMap map = new LinkedHashMap<>(); + Class clazz = obj.getClass(); + Field[] fields = clazz.getDeclaredFields(); + + // 按字段名称排序 + Arrays.sort(fields, Comparator.comparing(Field::getName)); + + for (Field field : fields) { + // 可能需要设置访问权限 + field.setAccessible(true); + Object value = field.get(obj); + if(value==null){ + continue; + } + + map.put(field.getName(), value); + } + return map; + } + + + + + public static void main(String[] args) { +// mainScan("https://paymentapi.sxczgkj.cn","6639fdc9fdf6f35856a23b3c", "测试支付", "测试支付", 1L, "wx212769170d2c6b2a", "131112206836873461", "CZ".concat(String.valueOf(System.currentTimeMillis())), "S2405103298", "https://", "fEu7tJgqaoPCA5QevafnSHfqHtO7rWcvhyfA0ltuab7rbpgOlab7CFCmqxMIbssUvbOnFKLdQqW5xUvhzb7FoxJNMAkIf2KDzlgDl6Diw1oBq56agSAFHhgYr3bLxXXI"); + } +} diff --git a/src/main/resources/application-hph.yml b/src/main/resources/application-hph.yml index b90ae93..b05f49b 100644 --- a/src/main/resources/application-hph.yml +++ b/src/main/resources/application-hph.yml @@ -1,3 +1,5 @@ +server: + port: 9888 spring: datasource: url: jdbc:mysql://rm-bp1b572nblln4jho2po.mysql.rds.aliyuncs.com/fycashier?useUnicode=true&characterEncoding=utf8&characterSetResults=utf8&useJDBCCompliantTimezoneShift=true&serverTimezone=Asia/Shanghai&useSSL=false diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 98cbeb9..c2956be 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -1,5 +1,5 @@ server: -# port: 9889 + port: 9889 servlet: context-path: /cashierService/ wx: @@ -51,7 +51,8 @@ logging: aliyun: keyid: LTAI5tPdEfYSZcqHbjCrtPRD keysecret: DZjyHBq3nTujF0NMLxnZgsecU8ZCvy - oss: - bucketname: cashier-oss - endpoint: oss-cn-beijing.aliyuncs.com +thirdPay: + payType: fushangtong + callBack: https://cashierclient.sxczgkj.cn/cashier-client/notify/notifyPay + url: https://paymentapi.sxczgkj.cn