docs: public RefundResponse refund(RefundRequest refundRequest) {
          RefundRequestWrapper wrapper = new RefundRequestWrapper();
          wrapper.setRequest(refundRequest);
          setBaseSettings(wrapper);
  
          SortedMap<String, Object> refundRequestMap = JsonMapper.nonEmptyMapper().getMapper().convertValue(wrapper, SortedMap.class);
          sign(wrapper, refundRequestMap);
  
          String url = WxEndpoint.get("url.pay.payment.refund.refund");
          try {
              String xml = XmlObjectMapper.nonEmptyMapper().toXml(wrapper);
              logger.info("支付 refund request: {}", xml);
              String response = wxSslClient.post(url, xml);
              logger.info("支付 refund response: {}", response);
  
              RefundResponseWrapper responseWrapper = XmlObjectMapper.defaultMapper().fromXml(response, RefundResponseWrapper.class);
              return responseWrapper.getResponse();
          } catch (Exception e) {
              throw new WxRuntimeException(999, "refund failed:" + e.getMessage());
          }
      }