liujie
2025-08-08 f604df04d1f9fe90ee543a1772a3a8cdb50d3d66
UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/OrderUtil.java
@@ -6,6 +6,7 @@
import com.google.gson.Gson;
import com.open.common.util.OpenApiClient;
import com.open.common.util.SystemParameterNames;
import com.stylefeng.guns.modular.system.util.SpringContextsUtil;
import com.stylefeng.guns.modular.system.util.UUIDUtil;
import com.stylefeng.guns.modular.system.util.qianyuntong.model.*;
import lombok.extern.slf4j.Slf4j;
@@ -22,6 +23,8 @@
 */
@Slf4j
public class OrderUtil {
   private static QianYunTongConfig qianYunTongConfig = SpringContextsUtil.getBean(QianYunTongConfig.class).getQianYunTongConfig();
   
   
   public static void main(String[] args) {
@@ -92,30 +95,30 @@
//      System.err.println(getPaymentInfo);
      
      //拉起支付
      TradePayOff1Data tradePayOff1Data = new TradePayOff1Data();
      tradePayOff1Data.setPartnerId("5400004");
      tradePayOff1Data.setScene("TRAFFIC");
      tradePayOff1Data.setPartnerPayId("1951088602595872768");
      tradePayOff1Data.setCurrency("RMB");
      tradePayOff1Data.setTotalFee("1");
      tradePayOff1Data.setRetUrl("pages/advoad-city-search/advoad-message/electronic-wait-pay/electronic-wait-pay");
      tradePayOff1Data.setClientIp("127.0.0.1");
      tradePayOff1Data.setNeedLoginFlag("N");
      tradePayOff1Data.setOrderDesc("出行订单支付");
      tradePayOff1Data.setAccessMode("APP");
      List<GoodsInfoRequest> goodsInfo = new ArrayList<>();
      GoodsInfoRequest goodsInfoRequest = new GoodsInfoRequest();
      goodsInfoRequest.setId("981100006005901");
      goodsInfoRequest.setSubAppId("wxcc3c9058e2b294db");
      goodsInfoRequest.setSubOpenId("oVLur61wBKJEO7QPR1dsmzS5TSfs");
      goodsInfoRequest.setProfitSharing("1");
      goodsInfoRequest.setAreaInfo("520100");
      goodsInfoRequest.setPayType("0");
      goodsInfoRequest.setBusinessType("10408");
      goodsInfo.add(goodsInfoRequest);
      tradePayOff1Data.setGoodsInfo(goodsInfo);
      PayInfo payInfo = tradePayOff1(tradePayOff1Data);
      System.err.println(payInfo);
//      TradePayOff1Data tradePayOff1Data = new TradePayOff1Data();
//      tradePayOff1Data.setPartnerId("5400004");
//      tradePayOff1Data.setScene("TRAFFIC");
//      tradePayOff1Data.setPartnerPayId("1951088602595872768");
//      tradePayOff1Data.setCurrency("RMB");
//      tradePayOff1Data.setTotalFee("1");
//      tradePayOff1Data.setRetUrl("pages/advoad-city-search/advoad-message/electronic-wait-pay/electronic-wait-pay");
//      tradePayOff1Data.setClientIp("127.0.0.1");
//      tradePayOff1Data.setNeedLoginFlag("N");
//      tradePayOff1Data.setOrderDesc("出行订单支付");
//      tradePayOff1Data.setAccessMode("APP");
//      List<GoodsInfoRequest> goodsInfo = new ArrayList<>();
//      GoodsInfoRequest goodsInfoRequest = new GoodsInfoRequest();
//      goodsInfoRequest.setId("981100006005901");
//      goodsInfoRequest.setSubAppId("wxcc3c9058e2b294db");
//      goodsInfoRequest.setSubOpenId("oVLur61wBKJEO7QPR1dsmzS5TSfs");
//      goodsInfoRequest.setProfitSharing("1");
//      goodsInfoRequest.setAreaInfo("520100");
//      goodsInfoRequest.setPayType("0");
//      goodsInfoRequest.setBusinessType("10408");
//      goodsInfo.add(goodsInfoRequest);
//      tradePayOff1Data.setGoodsInfo(goodsInfo);
//      PayInfo payInfo = tradePayOff1(tradePayOff1Data);
//      System.err.println(payInfo);
      //PayInfo(retCode=000000, retMsg=success, success=true, data=PayInfoData(redirectUrl=https://qhsctest.qytzt.cn/gray/mobile/index.html?f=allCashDesk&accessToken=5nUBXayFpfZz%2FXUZiMu9LzeRXmqmlqaCS%2BHfu5udIt4%3D, payId=540000420250725000135549, status=null, payTime=null, payFee=null, paymentInfos=null), sign=8154ba2728280900b122c56352c1c7fe)
      
      
@@ -190,7 +193,7 @@
      tradePayOff1Data.getGoodsInfo().forEach(goodsInfoRequest -> {
         goodsInfoRequest.setId("981100006005901");
         goodsInfoRequest.setSubAppId("wxcc3c9058e2b294db");
         goodsInfoRequest.setProfitSharing("1");
         goodsInfoRequest.setAreaInfo("520100");
         goodsInfoRequest.setPayType("0");
         goodsInfoRequest.setBusinessType("10408");
@@ -199,16 +202,16 @@
      
      TradeRequest request = new TradeRequest<TradePayOff1Data>();
      request.setSceneId("1911676727023968256");
      request.setAppId(QianYunTongProperties.appkey);
      request.setAppId(qianYunTongConfig.getAppkey());
      request.setConfigVersion(1);
      request.setRequestId(UUIDUtil.getRandomCode());
      request.setData(tradePayOff1Data);
      //请求路径
      String url = QianYunTongProperties.apiUrl + "/openapi/rest/1.0/tradePayOff";
      String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/tradePayOff";
      //私钥文件
      String skprivateKeyFile = QianYunTongProperties.privateKeyPath;
      String skprivateKeyFile = qianYunTongConfig.getPrivateKeyPath();
      //注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密
      String appKey = QianYunTongProperties.appkey;//appkey
      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>();
@@ -219,8 +222,8 @@
      String messageId = UUIDUtil.getRandomCode();
      contentMap.put(SystemParameterNames.getAppKey(), appKey);
      contentMap.put(SystemParameterNames.getMessage_id(), messageId);
      contentMap.put(SystemParameterNames.getUserName(), QianYunTongProperties.userName);
      contentMap.put(SystemParameterNames.getStatus(), QianYunTongProperties.status);
      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));
@@ -247,11 +250,11 @@
      request.setScene("TRAFFIC");
      request.setPartnerId("522700");
      //请求路径
      String url = QianYunTongProperties.apiUrl + "/openapi/rest/1.0/createTravelItinerary";
      String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/createTravelItinerary";
      //私钥文件
      String skprivateKeyFile = QianYunTongProperties.privateKeyPath;
      String skprivateKeyFile = qianYunTongConfig.getPrivateKeyPath();
      //注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密
      String appKey = QianYunTongProperties.appkey;//appkey
      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>();
@@ -262,8 +265,8 @@
      String messageId = UUIDUtil.getRandomCode();
      contentMap.put(SystemParameterNames.getAppKey(), appKey);
      contentMap.put(SystemParameterNames.getMessage_id(), messageId);
      contentMap.put(SystemParameterNames.getUserName(), QianYunTongProperties.userName);
      contentMap.put(SystemParameterNames.getStatus(), QianYunTongProperties.status);
      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));
@@ -288,11 +291,11 @@
      request.setScene("TRAFFIC");
      request.setPartnerId("522700");
      //请求路径
      String url = QianYunTongProperties.apiUrl + "/openapi/rest/1.0/modifyTravelItinerary";
      String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/modifyTravelItinerary";
      //私钥文件
      String skprivateKeyFile = QianYunTongProperties.privateKeyPath;
      String skprivateKeyFile = qianYunTongConfig.getPrivateKeyPath();
      //注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密
      String appKey = QianYunTongProperties.appkey;//appkey
      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>();
@@ -303,8 +306,8 @@
      String messageId = UUIDUtil.getRandomCode();
      contentMap.put(SystemParameterNames.getAppKey(), appKey);
      contentMap.put(SystemParameterNames.getMessage_id(), messageId);
      contentMap.put(SystemParameterNames.getUserName(), QianYunTongProperties.userName);
      contentMap.put(SystemParameterNames.getStatus(), QianYunTongProperties.status);
      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));
@@ -331,11 +334,11 @@
      request.setPartnerId("522700");
      
      //请求路径
      String url = QianYunTongProperties.apiUrl + "/openapi/rest/1.0/getTravelItineraryList";
      String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/getTravelItineraryList";
      //私钥文件
      String skprivateKeyFile = QianYunTongProperties.privateKeyPath;
      String skprivateKeyFile = qianYunTongConfig.getPrivateKeyPath();
      //注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密
      String appKey = QianYunTongProperties.appkey;//appkey
      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>();
@@ -346,8 +349,8 @@
      String messageId = UUIDUtil.getRandomCode();
      contentMap.put(SystemParameterNames.getAppKey(), appKey);
      contentMap.put(SystemParameterNames.getMessage_id(), messageId);
      contentMap.put(SystemParameterNames.getUserName(), QianYunTongProperties.userName);
      contentMap.put(SystemParameterNames.getStatus(), QianYunTongProperties.status);
      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));
@@ -396,7 +399,6 @@
      tradeOrderCreateData.getGoodsInfo().forEach(goodsInfoRequest -> {
         goodsInfoRequest.setId("981100006005901");
         goodsInfoRequest.setSubAppId("wxcc3c9058e2b294db");
         goodsInfoRequest.setProfitSharing("1");
         goodsInfoRequest.setAreaInfo("520100");
         goodsInfoRequest.setPayType("0");
         goodsInfoRequest.setBusinessType("10408");
@@ -405,17 +407,17 @@
      
      TradeRequest request = new TradeRequest<TradeOrderCreateData>();
      request.setSceneId("1945688132719169536");
      request.setAppId(QianYunTongProperties.appkey);
      request.setAppId(qianYunTongConfig.getAppkey());
      request.setConfigVersion(1);
      request.setRequestId(UUIDUtil.getRandomCode());
      request.setData(tradeOrderCreateData);
      
      //请求路径
      String url = QianYunTongProperties.apiUrl + "/openapi/rest/1.0/tradeOrderCreate";
      String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/tradeOrderCreate";
      //私钥文件
      String skprivateKeyFile = QianYunTongProperties.privateKeyPath;
      String skprivateKeyFile = qianYunTongConfig.getPrivateKeyPath();
      //注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密
      String appKey = QianYunTongProperties.appkey;//appkey
      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>();
@@ -426,8 +428,8 @@
      String messageId = UUIDUtil.getRandomCode();
      contentMap.put(SystemParameterNames.getAppKey(), appKey);
      contentMap.put(SystemParameterNames.getMessage_id(), messageId);
      contentMap.put(SystemParameterNames.getUserName(), QianYunTongProperties.userName);
      contentMap.put(SystemParameterNames.getStatus(), QianYunTongProperties.status);
      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));
@@ -456,17 +458,17 @@
      createOrderRequest.setChannelSource("GRJYCXWXXCX");
      
      TradeRequest request = new TradeRequest<CreateOrderRequest>();
      request.setSceneId(QianYunTongProperties.sceneId);
      request.setAppId(QianYunTongProperties.appkey);
      request.setSceneId("1948289607125864448");
      request.setAppId(qianYunTongConfig.getAppkey());
      request.setConfigVersion(1);
      request.setRequestId(UUIDUtil.getRandomCode());
      request.setData(createOrderRequest);
      //请求路径
      String url = QianYunTongProperties.apiUrl + "/openapi/rest/1.0/tradeOrderCreate";
      String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/tradeOrderCreate";
      //私钥文件
      String skprivateKeyFile = QianYunTongProperties.privateKeyPath;
      String skprivateKeyFile = qianYunTongConfig.getPrivateKeyPath();
      //注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密
      String appKey = QianYunTongProperties.appkey;//appkey
      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>();
@@ -477,8 +479,8 @@
      String messageId = UUIDUtil.getRandomCode();
      contentMap.put(SystemParameterNames.getAppKey(), appKey);
      contentMap.put(SystemParameterNames.getMessage_id(), messageId);
      contentMap.put(SystemParameterNames.getUserName(), QianYunTongProperties.userName);
      contentMap.put(SystemParameterNames.getStatus(), QianYunTongProperties.status);
      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));
@@ -520,13 +522,18 @@
      List<PaymentInfoRequest> paymentInfoRequests = new ArrayList<>();
      PaymentInfoRequest paymentInfoRequest = new PaymentInfoRequest();
      paymentInfoRequest.setPayModeId("501212");
      paymentInfoRequest.setRealFee(tradePayOffData.getTotalFee().toString());
      paymentInfoRequest.setTradeFee(tradePayOffData.getTotalFee().toString());
      paymentInfoRequest.setAccountTyp("501");
      paymentInfoRequests.add(paymentInfoRequest);
      tradePayOffData.setPaymentInfos(paymentInfoRequests);
      List<GoodsInfo> goodsInfo = new ArrayList<>();
      GoodsInfo goodsInfo1 = new GoodsInfo();
      goodsInfo1.setMerchantCode("B00000872");
      goodsInfo1.setMerchantCode("B00000905");
      goodsInfo1.setCustId("CB0000004686");
      goodsInfo1.setCustName("证联消费平台交易客户");
      goodsInfo1.setBusinessType("10408");
      goodsInfo1.setAgreementNo("00000000468618354161754464398681");
      goodsInfo1.setProfitSharing("1");
      goodsInfo.add(goodsInfo1);
      tradePayOffData.setGoodsInfo(goodsInfo);
@@ -534,16 +541,16 @@
      
      TradeRequest request = new TradeRequest<TradePayOffData>();
      request.setSceneId("1774717104844095488");
      request.setAppId(QianYunTongProperties.appkey);
      request.setAppId(qianYunTongConfig.getAppkey());
      request.setConfigVersion(2);
      request.setRequestId(UUIDUtil.getRandomCode());
      request.setData(tradePayOffData);
      //请求路径
      String url = QianYunTongProperties.apiUrl + "/openapi/rest/1.0/tradePayOff";
      String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/tradePayOff";
      //私钥文件
      String skprivateKeyFile = QianYunTongProperties.privateKeyPath;
      String skprivateKeyFile = qianYunTongConfig.getPrivateKeyPath();
      //注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密
      String appKey = QianYunTongProperties.appkey;//appkey
      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>();
@@ -554,8 +561,8 @@
      String messageId = UUIDUtil.getRandomCode();
      contentMap.put(SystemParameterNames.getAppKey(), appKey);
      contentMap.put(SystemParameterNames.getMessage_id(), messageId);
      contentMap.put(SystemParameterNames.getUserName(), QianYunTongProperties.userName);
      contentMap.put(SystemParameterNames.getStatus(), QianYunTongProperties.status);
      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));
@@ -588,11 +595,11 @@
      request.setData(getPaymentInfoDataRequest);
      
      //请求路径
      String url = QianYunTongProperties.apiUrl + "/openapi/rest/1.0/paymentInfo";
      String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/paymentInfo";
      //私钥文件
      String skprivateKeyFile = QianYunTongProperties.privateKeyPath;
      String skprivateKeyFile = qianYunTongConfig.getPrivateKeyPath();
      //注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密
      String appKey = QianYunTongProperties.appkey;//appkey
      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>();
@@ -603,8 +610,8 @@
      String messageId = UUIDUtil.getRandomCode();
      contentMap.put(SystemParameterNames.getAppKey(), appKey);
      contentMap.put(SystemParameterNames.getMessage_id(), messageId);
      contentMap.put(SystemParameterNames.getUserName(), QianYunTongProperties.userName);
      contentMap.put(SystemParameterNames.getStatus(), QianYunTongProperties.status);
      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));
@@ -640,11 +647,11 @@
      request.setPayChannel(6);
      request.setIsCompensate(1);
      //请求路径
      String url = QianYunTongProperties.apiUrl + "/openapi/rest/1.0/paymentOrder";
      String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/paymentOrder";
      //私钥文件
      String skprivateKeyFile = QianYunTongProperties.privateKeyPath;
      String skprivateKeyFile = qianYunTongConfig.getPrivateKeyPath();
      //注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密
      String appKey = QianYunTongProperties.appkey;//appkey
      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>();
@@ -655,8 +662,8 @@
      String messageId = UUIDUtil.getRandomCode();
      contentMap.put(SystemParameterNames.getAppKey(), appKey);
      contentMap.put(SystemParameterNames.getMessage_id(), messageId);
      contentMap.put(SystemParameterNames.getUserName(), QianYunTongProperties.userName);
      contentMap.put(SystemParameterNames.getStatus(), QianYunTongProperties.status);
      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));
@@ -664,7 +671,7 @@
      log.info("【(补偿单)支付成功通知】请求结果:" + result);
      JSONObject jsonObject = JSON.parseObject(result);
      String resCode = jsonObject.getString("resCode");
      if (!"0".equals(resCode)) {
      if (!"000000".equals(resCode)) {
         log.error("【(补偿单)支付成功通知】失败:" + jsonObject.getString("resMsg"));
         throw new RuntimeException("【(补偿单)支付成功通知】失败:" + jsonObject.getString("resMsg"));
      }