From 2792ef8f8472732999d4eafeab25d2eb6e2c5bad Mon Sep 17 00:00:00 2001 From: Pu Zhibing <393733352@qq.com> Date: 星期一, 08 九月 2025 16:40:34 +0800 Subject: [PATCH] 新增加跨城支付 --- UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/OrderUtil.java | 181 +++++++++++++++++++++++++++++++++++++++----- 1 files changed, 159 insertions(+), 22 deletions(-) diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/OrderUtil.java b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/OrderUtil.java index 32ce768..daae9ea 100644 --- a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/OrderUtil.java +++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/OrderUtil.java @@ -181,18 +181,23 @@ * 拉起支付 * * @param tradePayOff1Data + * @param recoveryOrder * @return */ - public static PayInfo tradePayOff1(TradePayOff1Data tradePayOff1Data) { - tradePayOff1Data.setPartnerId("5400004"); + public static PayInfo tradePayOff1(TradePayOff1Data tradePayOff1Data, Integer recoveryOrder) { + tradePayOff1Data.setPartnerId("prod".equals(qianYunTongConfig.getActiveProfile()) ? "5401007" : "5400004"); tradePayOff1Data.setTimeout("72H"); tradePayOff1Data.setScene("TRAFFIC"); tradePayOff1Data.setCurrency("RMB"); tradePayOff1Data.setNeedLoginFlag("N"); tradePayOff1Data.setAccessMode("APP"); tradePayOff1Data.getGoodsInfo().forEach(goodsInfoRequest -> { - goodsInfoRequest.setId("981100006005901"); - goodsInfoRequest.setSubAppId("wxcc3c9058e2b294db"); + if(0 == recoveryOrder){ + goodsInfoRequest.setId("prod".equals(qianYunTongConfig.getActiveProfile()) ? "9811000039358999" : "981100006005901"); + }else{ + goodsInfoRequest.setId("prod".equals(qianYunTongConfig.getActiveProfile()) ? "981100006228370" : "981100006005901"); + } + goodsInfoRequest.setSubAppId(qianYunTongConfig.getAppId()); goodsInfoRequest.setAreaInfo("520100"); goodsInfoRequest.setPayType("0"); @@ -201,7 +206,7 @@ TradeRequest request = new TradeRequest<TradePayOff1Data>(); - request.setSceneId("1911676727023968256"); + request.setSceneId("prod".equals(qianYunTongConfig.getActiveProfile()) ? "1954795404533583872" : "1911676727023968256"); request.setAppId(qianYunTongConfig.getAppkey()); request.setConfigVersion(1); request.setRequestId(UUIDUtil.getRandomCode()); @@ -386,19 +391,23 @@ * @param tradeOrderCreateData * @return */ - public static TradeOrderCreate tradeOrderCreate1(TradeOrderCreateData tradeOrderCreateData) { + public static TradeOrderCreate tradeOrderCreate1(TradeOrderCreateData tradeOrderCreateData, Integer recoveryOrder) { tradeOrderCreateData.setScene("TRAFFIC"); tradeOrderCreateData.setPartnerId("522700"); tradeOrderCreateData.setTimeout("72H"); tradeOrderCreateData.setOrderAppId("52270015"); tradeOrderCreateData.setChannelSource("GRJYCXWXXCX"); - tradeOrderCreateData.setPayPartnerId("5400004"); + tradeOrderCreateData.setPayPartnerId("prod".equals(qianYunTongConfig.getActiveProfile()) ? "5401007" : "5400004"); tradeOrderCreateData.setCurrency("RMB"); tradeOrderCreateData.setNeedLoginFlag("N"); tradeOrderCreateData.setAccessMode("APP"); tradeOrderCreateData.getGoodsInfo().forEach(goodsInfoRequest -> { - goodsInfoRequest.setId("981100006005901"); - goodsInfoRequest.setSubAppId("wxcc3c9058e2b294db"); + if(0 == recoveryOrder){ + goodsInfoRequest.setId("prod".equals(qianYunTongConfig.getActiveProfile()) ? "9811000039358999" : "981100006005901"); + }else{ + goodsInfoRequest.setId("prod".equals(qianYunTongConfig.getActiveProfile()) ? "981100006228370" : "981100006005901"); + } + goodsInfoRequest.setSubAppId(qianYunTongConfig.getAppId()); goodsInfoRequest.setAreaInfo("520100"); goodsInfoRequest.setPayType("0"); goodsInfoRequest.setBusinessType("10408"); @@ -406,7 +415,7 @@ TradeRequest request = new TradeRequest<TradeOrderCreateData>(); - request.setSceneId("1945688132719169536"); + request.setSceneId("prod".equals(qianYunTongConfig.getActiveProfile()) ? "1954793280550756352" : "1945688132719169536"); request.setAppId(qianYunTongConfig.getAppkey()); request.setConfigVersion(1); request.setRequestId(UUIDUtil.getRandomCode()); @@ -458,7 +467,7 @@ createOrderRequest.setChannelSource("GRJYCXWXXCX"); TradeRequest request = new TradeRequest<CreateOrderRequest>(); - request.setSceneId("1948289607125864448"); + request.setSceneId("prod".equals(qianYunTongConfig.getActiveProfile()) ? "1954792737421942784" : "1948289607125864448"); request.setAppId(qianYunTongConfig.getAppkey()); request.setConfigVersion(1); request.setRequestId(UUIDUtil.getRandomCode()); @@ -504,7 +513,7 @@ * @return */ public static PayInfo tradePayOff(TradePayOffData tradePayOffData) { - tradePayOffData.setPartnerId("5400005"); + tradePayOffData.setPartnerId("prod".equals(qianYunTongConfig.getActiveProfile()) ? "5401008" : "5400005"); tradePayOffData.setTimeout("72H"); tradePayOffData.setScene("TRAFFIC"); tradePayOffData.setCurrency("RMB"); @@ -529,20 +538,20 @@ tradePayOffData.setPaymentInfos(paymentInfoRequests); List<GoodsInfo> goodsInfo = new ArrayList<>(); GoodsInfo goodsInfo1 = new GoodsInfo(); - goodsInfo1.setMerchantCode("B00000905"); - goodsInfo1.setCustId("CB0000004686"); - goodsInfo1.setCustName("证联消费平台交易客户"); + goodsInfo1.setMerchantCode("prod".equals(qianYunTongConfig.getActiveProfile()) ? "B00001404" : "B00000905"); + goodsInfo1.setCustId("prod".equals(qianYunTongConfig.getActiveProfile()) ? "CB0000004853" : "CB0000004686"); + goodsInfo1.setCustName("prod".equals(qianYunTongConfig.getActiveProfile()) ? "黔南云码通数字产业运营有限公司" : "证联消费平台交易客户"); goodsInfo1.setBusinessType("10408"); - goodsInfo1.setAgreementNo("00000000468618354161754464398681"); + goodsInfo1.setAgreementNo("prod".equals(qianYunTongConfig.getActiveProfile()) ? "00000402485377063581755054680461" : "00000000468618354161754464398681"); goodsInfo1.setProfitSharing("1"); goodsInfo.add(goodsInfo1); tradePayOffData.setGoodsInfo(goodsInfo); TradeRequest request = new TradeRequest<TradePayOffData>(); - request.setSceneId("1774717104844095488"); + request.setSceneId("prod".equals(qianYunTongConfig.getActiveProfile()) ? "1954794605782913024" : "1774717104844095488"); request.setAppId(qianYunTongConfig.getAppkey()); - request.setConfigVersion(2); + request.setConfigVersion("prod".equals(qianYunTongConfig.getActiveProfile()) ? 1 : 2); request.setRequestId(UUIDUtil.getRandomCode()); request.setData(tradePayOffData); //请求路径 @@ -587,7 +596,7 @@ * @return */ public static GetPaymentInfo paymentInfo(GetPaymentInfoDataRequest getPaymentInfoDataRequest) { - getPaymentInfoDataRequest.setPartnerId("5400004"); + getPaymentInfoDataRequest.setPartnerId("prod".equals(qianYunTongConfig.getActiveProfile()) ? "5401007" : "5400004"); GetPaymentInfoRequest request = new GetPaymentInfoRequest(); request.setRequstType("POST"); @@ -645,7 +654,6 @@ request.setMhltiCenterAppId("52270015"); request.setPayType(4); request.setPayChannel(6); - request.setIsCompensate(1); //请求路径 String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/paymentOrder"; //私钥文件 @@ -678,6 +686,135 @@ OrderInfo orderInfo = jsonObject.getObject("busiResp", OrderInfo.class); return orderInfo; } - - + + + + /** + * 订单退款 + * @param request + * @return + */ + public static TradeOrderRefund tradeOrderRefund(TradeOrderRefundRequest request) { + request.setPayPartnerId("prod".equals(qianYunTongConfig.getActiveProfile()) ? "5400004" : "5401007"); + //请求路径 + String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/tradeOrderRefund"; + //私钥文件 + String skprivateKeyFile = qianYunTongConfig.getPrivateKeyPath(); + //注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密 + String appKey = qianYunTongConfig.getAppkey();//appkey + Map<String, String> headers = new HashMap<>(); + headers.put("Content-Type", "application/json"); + Map<String, Object> contentMap = new HashMap<String, Object>(); + Date nowdate = new Date(); + SimpleDateFormat date = new SimpleDateFormat("yyyyMMddHHmmss"); + + String timeStamp = date.format(nowdate); + String messageId = UUIDUtil.getRandomCode(); + contentMap.put(SystemParameterNames.getAppKey(), appKey); + contentMap.put(SystemParameterNames.getMessage_id(), messageId); + contentMap.put(SystemParameterNames.getUserName(), qianYunTongConfig.getUserName()); + contentMap.put(SystemParameterNames.getStatus(), qianYunTongConfig.getStatus()); + contentMap.put("content", new Gson().toJson(request)); + log.info("【订单退款】请求地址:" + url); + log.info("【订单退款】请求参数:" + JSON.toJSONString(contentMap)); + String result = OpenApiClient.sendCommonHttpRequst(url, headers, "POST", skprivateKeyFile, timeStamp, contentMap); + log.info("【订单退款】请求结果:" + result); + JSONObject jsonObject = JSON.parseObject(result); + String resCode = jsonObject.getString("resCode"); + if (!"000000".equals(resCode)) { + log.error("【订单退款】失败:" + jsonObject.getString("resMsg")); + throw new RuntimeException("【订单退款】失败:" + jsonObject.getString("resMsg")); + } + JSONObject refundInfo = jsonObject.getJSONObject("busiResp").getJSONObject("refundInfo"); + String retCode = refundInfo.getString("retCode"); + if(!"".equals(retCode)){ + log.error("【订单退款】失败:" + refundInfo.getString("retMsg")); + throw new RuntimeException("【订单退款】失败:" + refundInfo.getString("retMsg")); + } + TradeOrderRefund tradeOrderRefund = refundInfo.getObject("data", TradeOrderRefund.class); + return tradeOrderRefund; + } + + + /** + * 订单退款通知 + * @param request + */ + public static void orderRefundNotice(OrderRefundNoticeRequest request) { + request.setScene("TRAFFIC"); + request.setMhltiCenterAppId("52270015"); + + //请求路径 + String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/orderRefundNotice"; + //私钥文件 + String skprivateKeyFile = qianYunTongConfig.getPrivateKeyPath(); + //注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密 + String appKey = qianYunTongConfig.getAppkey();//appkey + Map<String, String> headers = new HashMap<>(); + headers.put("Content-Type", "application/json"); + Map<String, Object> contentMap = new HashMap<String, Object>(); + Date nowdate = new Date(); + SimpleDateFormat date = new SimpleDateFormat("yyyyMMddHHmmss"); + + String timeStamp = date.format(nowdate); + String messageId = UUIDUtil.getRandomCode(); + contentMap.put(SystemParameterNames.getAppKey(), appKey); + contentMap.put(SystemParameterNames.getMessage_id(), messageId); + contentMap.put(SystemParameterNames.getUserName(), qianYunTongConfig.getUserName()); + contentMap.put(SystemParameterNames.getStatus(), qianYunTongConfig.getStatus()); + contentMap.put("content", new Gson().toJson(request)); + log.info("【订单退款通知】请求地址:" + url); + log.info("【订单退款通知】请求参数:" + JSON.toJSONString(contentMap)); + String result = OpenApiClient.sendCommonHttpRequst(url, headers, "POST", skprivateKeyFile, timeStamp, contentMap); + log.info("【订单退款通知】请求结果:" + result); + JSONObject jsonObject = JSON.parseObject(result); + String resCode = jsonObject.getString("resCode"); + if (!"000000".equals(resCode)) { + log.error("【订单退款通知】失败:" + jsonObject.getString("resMsg")); + throw new RuntimeException("【订单退款通知】失败:" + jsonObject.getString("resMsg")); + } + } + + + + /** + * 订单取消 + * @param orderId + */ + public static void tradeOrderCancel(String orderId) { + TradeOrderCancelRequest request = new TradeOrderCancelRequest(); + request.setScene("TRAFFIC"); + request.setMhltiCenterAppId("52270015"); + request.setOrderId(orderId); + + //请求路径 + String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/tradeOrderCancel"; + //私钥文件 + String skprivateKeyFile = qianYunTongConfig.getPrivateKeyPath(); + //注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密 + String appKey = qianYunTongConfig.getAppkey();//appkey + Map<String, String> headers = new HashMap<>(); + headers.put("Content-Type", "application/json"); + Map<String, Object> contentMap = new HashMap<String, Object>(); + Date nowdate = new Date(); + SimpleDateFormat date = new SimpleDateFormat("yyyyMMddHHmmss"); + + String timeStamp = date.format(nowdate); + String messageId = UUIDUtil.getRandomCode(); + contentMap.put(SystemParameterNames.getAppKey(), appKey); + contentMap.put(SystemParameterNames.getMessage_id(), messageId); + contentMap.put(SystemParameterNames.getUserName(), qianYunTongConfig.getUserName()); + contentMap.put(SystemParameterNames.getStatus(), qianYunTongConfig.getStatus()); + contentMap.put("content", new Gson().toJson(request)); + log.info("【订单取消】请求地址:" + url); + log.info("【订单取消】请求参数:" + JSON.toJSONString(contentMap)); + String result = OpenApiClient.sendCommonHttpRequst(url, headers, "POST", skprivateKeyFile, timeStamp, contentMap); + log.info("【订单取消】请求结果:" + result); + JSONObject jsonObject = JSON.parseObject(result); + String resCode = jsonObject.getString("resCode"); + if (!"000000".equals(resCode)) { + log.error("【订单取消】失败:" + jsonObject.getString("resMsg")); + throw new RuntimeException("【订单取消】失败:" + jsonObject.getString("resMsg")); + } + } } -- Gitblit v1.7.1