From dbb66f93fa42a81ab27a62682ae23bf05cfffcc1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=89=9B=E5=8F=89=E9=97=AA=E9=97=AA?= <18322780655@163.com> Date: Sat, 14 Sep 2024 09:18:57 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0pcpay=20=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 | 119 +++++++++++++----- .../thirdpay/req/ChrpayReq.java | 45 +++++++ .../thirdpay/resp/ChrpayResp.java | 51 ++++++++ .../thirdpay/service/ThirdPayService.java | 43 +++++++ 4 files changed, 225 insertions(+), 33 deletions(-) create mode 100644 src/main/java/com/chaozhanggui/system/cashierservice/thirdpay/req/ChrpayReq.java create mode 100644 src/main/java/com/chaozhanggui/system/cashierservice/thirdpay/resp/ChrpayResp.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 4f49752..00373d7 100644 --- a/src/main/java/com/chaozhanggui/system/cashierservice/service/PayService.java +++ b/src/main/java/com/chaozhanggui/system/cashierservice/service/PayService.java @@ -1929,57 +1929,110 @@ public class PayService { String reqbody = "店铺收款码"; - - PublicResp publicResp = thirdPayService.jspay(url, thirdApply.getAppId(), thirdApply.getAppToken(), reqbody, reqbody, orderInfo.getOrderAmount().multiply(new BigDecimal(100)).longValue(), payType, "WECHAT".equals(payType) ? thirdApply.getSmallAppid() : null, userId, ip, DateUtils.getSsdfTimes(), thirdApply.getStoreId(), backUrl, backUrl); + if("WECHAT".equals(payType)){ + PublicResp publicResp = thirdPayService.jspay(url, thirdApply.getAppId(), thirdApply.getAppToken(), reqbody, reqbody, orderInfo.getOrderAmount().multiply(new BigDecimal(100)).longValue(), payType, "WECHAT".equals(payType) ? thirdApply.getSmallAppid() : null, userId, ip, DateUtils.getSsdfTimes(), thirdApply.getStoreId(), backUrl, backUrl); - if (ObjectUtil.isNotNull(publicResp) && ObjectUtil.isNotEmpty(publicResp)) { - if ("000000".equals(publicResp.getCode())) { - JspayResp scanpayResp = publicResp.getObjData(); - if ("TRADE_SUCCESS".equals(scanpayResp.getState())) { + if (ObjectUtil.isNotNull(publicResp) && ObjectUtil.isNotEmpty(publicResp)) { + if ("000000".equals(publicResp.getCode())) { + JspayResp scanpayResp = publicResp.getObjData(); + if ("TRADE_SUCCESS".equals(scanpayResp.getState())) { - payment.setTradeNumber(scanpayResp.getPayOrderId()); - payment.setUpdatedAt(System.currentTimeMillis()); - tbOrderPaymentMapper.updateByPrimaryKeySelective(payment); + payment.setTradeNumber(scanpayResp.getPayOrderId()); + payment.setUpdatedAt(System.currentTimeMillis()); + tbOrderPaymentMapper.updateByPrimaryKeySelective(payment); - //处理支付成功的订单 - orderInfo.setStatus("closed"); - orderInfo.setPayOrderNo(scanpayResp.getPayOrderId()); - tbOrderInfoMapper.updateByPrimaryKeySelective(orderInfo); + //处理支付成功的订单 + orderInfo.setStatus("closed"); + orderInfo.setPayOrderNo(scanpayResp.getPayOrderId()); + tbOrderInfoMapper.updateByPrimaryKeySelective(orderInfo); - ObjectMapper mapper = new ObjectMapper(); - return Result.success(CodeEnum.SUCCESS, mapper.readTree(scanpayResp.getPayInfo())); + ObjectMapper mapper = new ObjectMapper(); + return Result.success(CodeEnum.SUCCESS, mapper.readTree(scanpayResp.getPayInfo())); - } else if ("TRADE_AWAIT".equals(scanpayResp.getState())) { - orderInfo.setStatus("paying"); - orderInfo.setPayOrderNo(payment.getTradeNumber()); - tbOrderInfoMapper.updateByPrimaryKeySelective(orderInfo); + } else if ("TRADE_AWAIT".equals(scanpayResp.getState())) { + orderInfo.setStatus("paying"); + orderInfo.setPayOrderNo(payment.getTradeNumber()); + tbOrderInfoMapper.updateByPrimaryKeySelective(orderInfo); - payment.setTradeNumber(scanpayResp.getPayOrderId()); - payment.setUpdatedAt(System.currentTimeMillis()); - tbOrderPaymentMapper.updateByPrimaryKeySelective(payment); + payment.setTradeNumber(scanpayResp.getPayOrderId()); + payment.setUpdatedAt(System.currentTimeMillis()); + tbOrderPaymentMapper.updateByPrimaryKeySelective(payment); - if ("WECHAT".equals(scanpayResp.getPayType())) { - orderInfo.setPayType("WECHAT"); - } else if ("ALIPAY".equals(scanpayResp.getPayType())) { - orderInfo.setPayType("ALIPAY"); - } else if ("UNIONPAY".equals(scanpayResp.getPayType())) { - orderInfo.setPayType("UNIONPAY"); + if ("WECHAT".equals(scanpayResp.getPayType())) { + orderInfo.setPayType("WECHAT"); + } else if ("ALIPAY".equals(scanpayResp.getPayType())) { + orderInfo.setPayType("ALIPAY"); + } else if ("UNIONPAY".equals(scanpayResp.getPayType())) { + orderInfo.setPayType("UNIONPAY"); + } + + + ObjectMapper mapper = new ObjectMapper(); + + Map map=new HashMap<>(); + + map.put("orderInfo",orderInfo); + map.put("payInfo",mapper.readTree(scanpayResp.getPayInfo())); + return Result.success(CodeEnum.PAYING, map); } + } + } + }else if("ALIPAY".equals(payType)){ + PublicResp publicResp= thirdPayService.apppay(url,thirdApply.getAppId(),thirdApply.getAppToken(),reqbody,reqbody,orderInfo.getOrderAmount().multiply(new BigDecimal(100)).longValue(),payType,ip,DateUtils.getSsdfTimes(),thirdApply.getStoreId(),backUrl,backUrl); + + if (ObjectUtil.isNotNull(publicResp) && ObjectUtil.isNotEmpty(publicResp)) { + if ("000000".equals(publicResp.getCode())) { + ApppayResp scanpayResp = publicResp.getObjData(); + if ("TRADE_SUCCESS".equals(scanpayResp.getState())) { + + payment.setTradeNumber(scanpayResp.getPayOrderId()); + payment.setUpdatedAt(System.currentTimeMillis()); + tbOrderPaymentMapper.updateByPrimaryKeySelective(payment); + + //处理支付成功的订单 + orderInfo.setStatus("closed"); + orderInfo.setPayOrderNo(scanpayResp.getPayOrderId()); + tbOrderInfoMapper.updateByPrimaryKeySelective(orderInfo); - ObjectMapper mapper = new ObjectMapper(); + ObjectMapper mapper = new ObjectMapper(); + return Result.success(CodeEnum.SUCCESS, mapper.readTree(scanpayResp.getPayInfo())); - Map map=new HashMap<>(); + } else if ("TRADE_AWAIT".equals(scanpayResp.getState())) { + orderInfo.setStatus("paying"); + orderInfo.setPayOrderNo(payment.getTradeNumber()); + tbOrderInfoMapper.updateByPrimaryKeySelective(orderInfo); - map.put("orderInfo",orderInfo); - map.put("payInfo",mapper.readTree(scanpayResp.getPayInfo())); - return Result.success(CodeEnum.PAYING, map); + payment.setTradeNumber(scanpayResp.getPayOrderId()); + payment.setUpdatedAt(System.currentTimeMillis()); + tbOrderPaymentMapper.updateByPrimaryKeySelective(payment); + + + if ("WECHAT".equals(scanpayResp.getPayType())) { + orderInfo.setPayType("WECHAT"); + } else if ("ALIPAY".equals(scanpayResp.getPayType())) { + orderInfo.setPayType("ALIPAY"); + } else if ("UNIONPAY".equals(scanpayResp.getPayType())) { + orderInfo.setPayType("UNIONPAY"); + } + + + ObjectMapper mapper = new ObjectMapper(); + + Map map=new HashMap<>(); + + map.put("orderInfo",orderInfo); + map.put("payInfo",mapper.readTree(scanpayResp.getPayInfo())); + return Result.success(CodeEnum.PAYING, map); + } } } } + + return Result.fail(CodeEnum.FAIL); } diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/thirdpay/req/ChrpayReq.java b/src/main/java/com/chaozhanggui/system/cashierservice/thirdpay/req/ChrpayReq.java new file mode 100644 index 0000000..7eac5aa --- /dev/null +++ b/src/main/java/com/chaozhanggui/system/cashierservice/thirdpay/req/ChrpayReq.java @@ -0,0 +1,45 @@ +package com.chaozhanggui.system.cashierservice.thirdpay.req; + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class ChrpayReq implements Serializable { + + + + private String subject; + + private String body; + + private Long amount; + + private String currency="cny"; + + private String payType; + + + private String clientIp; + + private String mchOrderNo; + + private String storeId; + + private String notifyUrl; + + private String returnUrl; + + public ChrpayReq(String subject, String body, Long amount, String currency, String payType, 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.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/ChrpayResp.java b/src/main/java/com/chaozhanggui/system/cashierservice/thirdpay/resp/ChrpayResp.java new file mode 100644 index 0000000..84bdfa3 --- /dev/null +++ b/src/main/java/com/chaozhanggui/system/cashierservice/thirdpay/resp/ChrpayResp.java @@ -0,0 +1,51 @@ +package com.chaozhanggui.system.cashierservice.thirdpay.resp; + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class ChrpayResp 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 index 63083eb..e588ff6 100644 --- a/src/main/java/com/chaozhanggui/system/cashierservice/thirdpay/service/ThirdPayService.java +++ b/src/main/java/com/chaozhanggui/system/cashierservice/thirdpay/service/ThirdPayService.java @@ -36,6 +36,8 @@ public class ThirdPayService { private static String jspay="/api/open/payment/jspay"; private static String apppay="/api/open/payment/apppay"; + + private static String chrpay="/api/open/payment/chrpay"; /** * 被扫接口 * @param url @@ -420,6 +422,47 @@ public class ThirdPayService { } + /** + * 聚合收银台 + * @param url + * @param appId + * @param key + * @param subject + * @param body + * @param amount + * @param clientIp + * @param mchOrderNo + * @param storeId + * @param notifyUrl + * @param returnUrl + * @return + */ + public PublicResp chrpay(String url,String appId,String key,String subject, String body, Long amount, String payType, String clientIp, String mchOrderNo, String storeId, String notifyUrl, String returnUrl){ + ChrpayReq chrpayReq=new ChrpayReq(subject, body, amount, "cny",payType,clientIp, mchOrderNo, 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(chrpayReq)); + 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(chrpay)).body(reqbody).execute().body(); + log.info("返回结果:{}", response); + PublicResp resp =JSONUtil.parseJSONStr2T(response,PublicResp.class); + resp.setObjData(JSONUtil.parseJSONStr2T(resp.getBizData(),ChrpayResp.class)); + return resp; + } catch (IllegalAccessException e) { + throw new RuntimeException(e); + } + } + +