liujie
2 天以前 74f8b8074a2fb391b5363b4dca5f99bf31993430
driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/qianyuntong/OrderUtil.java
New file
@@ -0,0 +1,682 @@
package com.supersavedriving.driver.modular.system.util.qianyuntong;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.google.gson.Gson;
import com.open.common.util.OpenApiClient;
import com.open.common.util.SystemParameterNames;
import com.supersavedriving.driver.modular.system.util.SpringContextsUtil;
import com.supersavedriving.driver.modular.system.util.UUIDUtil;
import com.supersavedriving.driver.modular.system.util.qianyuntong.model.*;
import lombok.extern.slf4j.Slf4j;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.text.SimpleDateFormat;
import java.util.*;
/**
 * @author zhibing.pu
 * @Date 2025/7/24 9:34
 */
@Slf4j
public class OrderUtil {
   private static QianYunTongConfig qianYunTongConfig = SpringContextsUtil.getBean(QianYunTongConfig.class).getQianYunTongConfig();
   public static void main(String[] args) {
      //创建行程
//      CreateTravelItineraryRequest request = new CreateTravelItineraryRequest();
//      request.setScene("TRAFFIC");
//      request.setPartnerId("522700");
//      request.setOrderNo("3456789012345678");
//      request.setCustomerId("11448156");
//      request.setDriverId("11448158");
//      request.setSupplierShopId("981100006005951");
//      request.setServiceType(1);
//      String travelItinerary = createTravelItinerary(request);
//      System.err.println(travelItinerary);//1951088602595872768
      //修改行程状态
//      ModifyTravelItineraryRequest request = new ModifyTravelItineraryRequest();
//      request.setScene("TRAFFIC");
//      request.setPartnerId("522700");
//      request.setOrderId("1951088602595872768");
//      request.setStatus(7);
//      request.setDriverId("11448158");
//      request.setSupplierShopId("981100006005951");
//      Boolean aBoolean = modifyTravelItinerary(request);
      //订单创建及拉起支付
//      TradeOrderCreateData tradeOrderCreateData = new TradeOrderCreateData();
//      tradeOrderCreateData.setScene("TRAFFIC");
//      tradeOrderCreateData.setPartnerId("522700");
//      tradeOrderCreateData.setTreatShopId("11448158");
//      tradeOrderCreateData.setOrderAppId("52270015");
//      tradeOrderCreateData.setField1("{\"profitSharing\":\"1\",\"isPromote\":\"0\"}");
//      tradeOrderCreateData.setCharge(new BigDecimal("0.01"));
//      tradeOrderCreateData.setChannelSource("GRJYCXWXXCX");
//      tradeOrderCreateData.setOrderId("1951088602595872768");
//      tradeOrderCreateData.setOrderNo("3456789012345678");
//      tradeOrderCreateData.setCustomerId("11448156");
//      tradeOrderCreateData.setPayPartnerId("5400004");
//      tradeOrderCreateData.setPartnerPayId("1951088602595872768");
//      tradeOrderCreateData.setCurrency("RMB");
//      tradeOrderCreateData.setTotalFee("1");
//      tradeOrderCreateData.setRetUrl("pages/advoad-city-search/advoad-message/electronic-wait-pay/electronic-wait-pay");
//      tradeOrderCreateData.setClientIp("127.0.0.1");
//      tradeOrderCreateData.setNeedLoginFlag("N");
//      tradeOrderCreateData.setOrderDesc("出行订单支付");
//      tradeOrderCreateData.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);
//      tradeOrderCreateData.setGoodsInfo(goodsInfo);
//      TradeOrderCreate tradeOrderCreate = tradeOrderCreate1(tradeOrderCreateData);
//      System.err.println(tradeOrderCreate);
      //TradeOrderCreate(orderInfo=OrderInfo(orderId=1950072223939842048, status=null), payInfo=PayInfo(retCode=000000, retMsg=success, success=true, data=PayInfoData(redirectUrl=https://qhsctest.qytzt.cn/gray/mobile/index.html?f=allCashDesk&accessToken=It5FPM1DUjzwIAin7zwiHvUANWKC6I5USCLE8EKoRkg%3D, payId=540000420250729000135600, status=null, payTime=null, payFee=null, paymentInfos=null), sign=525cb843b1eeb5a0451eeb5fbbe02f0f))
      //查询支付单信息
//      GetPaymentInfoDataRequest getPaymentInfoDataRequest = new GetPaymentInfoDataRequest();
//      getPaymentInfoDataRequest.setPartnerId("5400004");
//      getPaymentInfoDataRequest.setPartnerPayId("1948685426689200128");
//      GetPaymentInfo getPaymentInfo = paymentInfo(getPaymentInfoDataRequest);
//      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);
      //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)
      // (补偿单)拉起支付
//      TradePayOffData tradePayOffData = new TradePayOffData();
//      tradePayOffData.setPartnerId("5400004");
//      tradePayOffData.setScene("TRAFFIC");
//      tradePayOffData.setPartnerPayId("1948685426689200128");
//      tradePayOffData.setCurrency("RMB");
//      tradePayOffData.setTotalFee("1");
//      tradePayOffData.setRetUrl("/home/");
//      tradePayOffData.setClientIp("127.0.0.1");
//      tradePayOffData.setNeedLoginFlag("N");
//      tradePayOffData.setOrderDesc("出行订单支付");
//      tradePayOffData.setAccessMode("APP");
//      List<PaymentInfoRequest> paymentInfoRequests = new ArrayList<>();
//      PaymentInfoRequest paymentInfoRequest = new PaymentInfoRequest();
//      paymentInfoRequest.setPayModeId("501212");
//      paymentInfoRequests.add(paymentInfoRequest);
//      tradePayOffData.setPaymentInfos(paymentInfoRequests);
//      List<GoodsInfo> goodsInfo = new ArrayList<>();
//      GoodsInfo goodsInfo1 = new GoodsInfo();
//      goodsInfo1.setMerchantCode("");
//      goodsInfo1.setCustId("");
//      goodsInfo1.setCustName("");
//      goodsInfo1.setProfitSharing("1");
//      goodsInfo.add(goodsInfo1);
//      tradePayOffData.setGoodsInfo(goodsInfo);
//      PayInfo payInfo1 = tradePayOff(tradePayOffData);
//      System.err.println(payInfo1);
      //订单创建
//      CreateOrderRequest createOrderRequest = new CreateOrderRequest();
//      createOrderRequest.setTreatShopId("11448158");
//      createOrderRequest.setOrderAppId("52270015");
//      createOrderRequest.setScene("TRAFFIC");
//      createOrderRequest.setPartnerId("522700");
//      createOrderRequest.setField1("{\"profitSharing\":\"1\",\"isPromote\":\"0\"}");
//      createOrderRequest.setCharge(new BigDecimal("0.01"));
//      createOrderRequest.setChannelSource("GRJYCXWXXCX");
//      createOrderRequest.setOrderId("1948685426689200128");
//      createOrderRequest.setOrderNo("0123456");
//      createOrderRequest.setCustomerId("11448156");
//      OrderInfo orderInfo = tradeOrderCreate(createOrderRequest);
//      System.err.println(orderInfo);
      //行程单列表查询
//      GetTravelItineraryListRequest request = new GetTravelItineraryListRequest();
//      request.setScene("TRAFFIC");
//      request.setPartnerId("522700");
//      request.setCustomerId("11448156");
//      request.setOrderNo("0123456");
//      request.setDriverId("11448158");
//      ListPage<TravelItinerary> travelItineraryList = getTravelItineraryList(request);
//      System.err.println(travelItineraryList);
   }
   /**
    * 拉起支付
    *
    * @param tradePayOff1Data
    * @return
    */
   public static PayInfo tradePayOff1(TradePayOff1Data tradePayOff1Data) {
      tradePayOff1Data.setPartnerId("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");
         goodsInfoRequest.setAreaInfo("520100");
         goodsInfoRequest.setPayType("0");
         goodsInfoRequest.setBusinessType("10408");
      });
      TradeRequest request = new TradeRequest<TradePayOff1Data>();
      request.setSceneId("1911676727023968256");
      request.setAppId(qianYunTongConfig.getAppkey());
      request.setConfigVersion(1);
      request.setRequestId(UUIDUtil.getRandomCode());
      request.setData(tradePayOff1Data);
      //请求路径
      String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/tradePayOff";
      //私钥文件
      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 busiResp = jsonObject.getJSONObject("busiResp");
      PayInfo payInfo = busiResp.getObject("payInfo", PayInfo.class);
      return payInfo;
   }
   /**
    * 创建行程单
    *
    * @param request
    * @return 行程单ID
    */
   public static String createTravelItinerary(CreateTravelItineraryRequest request) {
      request.setScene("TRAFFIC");
      request.setPartnerId("522700");
      //请求路径
      String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/createTravelItinerary";
      //私钥文件
      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"));
      }
      return jsonObject.getString("busiResp");
   }
   /**
    * 修改行程单
    *
    * @param request
    */
   public static Boolean modifyTravelItinerary(ModifyTravelItineraryRequest request) {
      request.setScene("TRAFFIC");
      request.setPartnerId("522700");
      //请求路径
      String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/modifyTravelItinerary";
      //私钥文件
      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"));
      }
      return true;
   }
   /**
    * 行程单列表查询
    *
    * @param request
    * @return
    */
   public static ListPage<List<TravelItinerary>> getTravelItineraryList(GetTravelItineraryListRequest request) {
      request.setScene("TRAFFIC");
      request.setPartnerId("522700");
      //请求路径
      String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/getTravelItineraryList";
      //私钥文件
      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 busiResp = jsonObject.getJSONObject("busiResp");
      Integer total = busiResp.getInteger("total");
      Integer pageNum = busiResp.getInteger("pageNum");
      Integer pageSize = busiResp.getInteger("pageSize");
      JSONArray list = busiResp.getJSONArray("list");
      List<TravelItinerary> travelItineraryList = new ArrayList<>();
      for (int i = 0; i < list.size(); i++) {
         TravelItinerary object = list.getObject(i, TravelItinerary.class);
         travelItineraryList.add(object);
      }
      ListPage listPage = new ListPage<List<TravelItinerary>>();
      listPage.setTotal(total);
      listPage.setPageNum(pageNum);
      listPage.setPageSize(pageSize);
      listPage.setList(travelItineraryList);
      return listPage;
   }
   /**
    * 订单创建及拉起支付
    *
    * @param tradeOrderCreateData
    * @return
    */
   public static TradeOrderCreate tradeOrderCreate1(TradeOrderCreateData tradeOrderCreateData) {
      tradeOrderCreateData.setScene("TRAFFIC");
      tradeOrderCreateData.setPartnerId("522700");
      tradeOrderCreateData.setTimeout("72H");
      tradeOrderCreateData.setOrderAppId("52270015");
      tradeOrderCreateData.setChannelSource("GRJYCXWXXCX");
      tradeOrderCreateData.setPayPartnerId("5400004");
      tradeOrderCreateData.setCurrency("RMB");
      tradeOrderCreateData.setNeedLoginFlag("N");
      tradeOrderCreateData.setAccessMode("APP");
      tradeOrderCreateData.getGoodsInfo().forEach(goodsInfoRequest -> {
         goodsInfoRequest.setId("981100006005901");
         goodsInfoRequest.setSubAppId("wxcc3c9058e2b294db");
         goodsInfoRequest.setAreaInfo("520100");
         goodsInfoRequest.setPayType("0");
         goodsInfoRequest.setBusinessType("10408");
      });
      TradeRequest request = new TradeRequest<TradeOrderCreateData>();
      request.setSceneId("1945688132719169536");
      request.setAppId(qianYunTongConfig.getAppkey());
      request.setConfigVersion(1);
      request.setRequestId(UUIDUtil.getRandomCode());
      request.setData(tradeOrderCreateData);
      //请求路径
      String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/tradeOrderCreate";
      //私钥文件
      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"));
      }
      TradeOrderCreate busiResp = jsonObject.getObject("busiResp", TradeOrderCreate.class);
      return busiResp;
   }
   /**
    * 订单创建
    *
    * @param createOrderRequest
    * @return
    */
   public static OrderInfo tradeOrderCreate(CreateOrderRequest createOrderRequest) {
      createOrderRequest.setOrderAppId("52270015");
      createOrderRequest.setScene("TRAFFIC");
      createOrderRequest.setPartnerId("522700");
      createOrderRequest.setChannelSource("GRJYCXWXXCX");
      TradeRequest request = new TradeRequest<CreateOrderRequest>();
      request.setSceneId("1948289607125864448");
      request.setAppId(qianYunTongConfig.getAppkey());
      request.setConfigVersion(1);
      request.setRequestId(UUIDUtil.getRandomCode());
      request.setData(createOrderRequest);
      //请求路径
      String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/tradeOrderCreate";
      //私钥文件
      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 busiResp = jsonObject.getJSONObject("busiResp");
      OrderInfo orderInfo = busiResp.getObject("orderInfo", OrderInfo.class);
      return orderInfo;
   }
   /**
    * (补偿单)拉起支付
    *
    * @param tradePayOffData
    * @return
    */
   public static PayInfo tradePayOff(TradePayOffData tradePayOffData) {
      tradePayOffData.setPartnerId("5400005");
      tradePayOffData.setTimeout("72H");
      tradePayOffData.setScene("TRAFFIC");
      tradePayOffData.setCurrency("RMB");
      tradePayOffData.setRetUrl("");
      InetAddress inetAddress = null;
      try {
         inetAddress = InetAddress.getLocalHost();
      } catch (UnknownHostException e) {
         throw new RuntimeException(e);
      }
      String ip = inetAddress.getHostAddress();
      tradePayOffData.setClientIp(ip);
      tradePayOffData.setNeedLoginFlag("N");
      tradePayOffData.setAccessMode("APP");
      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("B00000905");
      goodsInfo1.setCustId("CB0000004686");
      goodsInfo1.setCustName("证联消费平台交易客户");
      goodsInfo1.setBusinessType("10408");
      goodsInfo1.setAgreementNo("00000000468618354161754464398681");
      goodsInfo1.setProfitSharing("1");
      goodsInfo.add(goodsInfo1);
      tradePayOffData.setGoodsInfo(goodsInfo);
      TradeRequest request = new TradeRequest<TradePayOffData>();
      request.setSceneId("1774717104844095488");
      request.setAppId(qianYunTongConfig.getAppkey());
      request.setConfigVersion(2);
      request.setRequestId(UUIDUtil.getRandomCode());
      request.setData(tradePayOffData);
      //请求路径
      String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/tradePayOff";
      //私钥文件
      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 busiResp = jsonObject.getJSONObject("busiResp");
      PayInfo payInfo = busiResp.getObject("payInfo", PayInfo.class);
      return payInfo;
   }
   /**
    * 查询支付单信息
    *
    * @param getPaymentInfoDataRequest
    * @return
    */
   public static GetPaymentInfo paymentInfo(GetPaymentInfoDataRequest getPaymentInfoDataRequest) {
      getPaymentInfoDataRequest.setPartnerId("5400004");
      GetPaymentInfoRequest request = new GetPaymentInfoRequest();
      request.setRequstType("POST");
      request.setBusType(1);
      request.setData(getPaymentInfoDataRequest);
      //请求路径
      String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/paymentInfo";
      //私钥文件
      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("retCode");
      if (!"0".equals(resCode)) {
         log.error("【查询支付单信息】失败:" + jsonObject.getString("retMsg"));
         throw new RuntimeException("【查询支付单信息】失败:" + jsonObject.getString("retMsg"));
      }
      JSONObject object = jsonObject.getJSONObject("object");
      String retCode = object.getString("retCode");
      if (!"000000".equals(retCode)) {
         log.error("【查询支付单信息】失败:" + jsonObject.getString("retMsg"));
         throw new RuntimeException("【查询支付单信息】失败:" + jsonObject.getString("retMsg"));
      }
      GetPaymentInfo payInfo = object.getObject("data", GetPaymentInfo.class);
      return payInfo;
   }
   /**
    * (补偿单)支付成功通知
    *
    * @param request
    * @return
    */
   public static OrderInfo paymentOrder(PaymentOrderRequest request) {
      request.setScene("TRAFFIC");
      request.setMhltiCenterAppId("52270015");
      request.setPayType(4);
      request.setPayChannel(6);
      request.setIsCompensate(1);
      //请求路径
      String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/paymentOrder";
      //私钥文件
      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"));
      }
      OrderInfo orderInfo = jsonObject.getObject("busiResp", OrderInfo.class);
      return orderInfo;
   }
}