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