code: private Map<String, String> buildPayParams(PayRequest request, TradeType tradeType) {
          Map<String, String> payParams = new TreeMap<>();
  
          // 配置参数
          buildConfigParams(payParams);
  
          // 业务必需参数
          put(payParams, WepayField.BODY, request.getBody());
          put(payParams, WepayField.OUT_TRADE_NO, request.getOutTradeNo());
          put(payParams, WepayField.TOTAL_FEE, request.getTotalFee() + "");
          put(payParams, WepayField.SPBILL_CREATE_IP, request.getClientIp());
          put(payParams, WepayField.NOTIFY_URL, request.getNotifyUrl());
          put(payParams, WepayField.FEE_TYPE, request.getFeeType().type());
          put(payParams, WepayField.NONCE_STR, RandomStrs.generate(16));
          put(payParams, WepayField.TIME_START, request.getTimeStart());
          put(payParams, WepayField.TRADE_TYPE, tradeType.type());
  
          // 业务可选参数
          putIfNotEmpty(payParams, WepayField.DEVICE_INFO, request.getDeviceInfo());
          putIfNotEmpty(payParams, WepayField.ATTACH, request.getAttach());
          putIfNotEmpty(payParams, WepayField.DETAIL, request.getDetail());
          putIfNotEmpty(payParams, WepayField.GOODS_TAG, request.getGoodsTag());
          putIfNotEmpty(payParams, WepayField.TIME_EXPIRE, request.getTimeExpire());
          putIfNotEmpty(payParams, WepayField.LIMIT_PAY, request.getLimitPay());
  
          return payParams;
      }
docs: 构建公共支付参数
  @param request 支付请求对象
  @param tradeType 交易类型
  @return 支付MAP参数