code: protected String doSign(final Map<String, String> params) {
          StringBuilder signing = new StringBuilder();
  
          for (Map.Entry<String, String> entry : params.entrySet()) {
              if (!Strings.isNullOrEmpty(entry.getValue())){
                  signing.append(entry.getKey()).append('=').append(entry.getValue()).append("&");
              }
          }
  
          // append key
          signing.append("key=").append(wepay.getAppKey());
  
          // md5
          return MD5.generate(signing.toString(), false).toUpperCase();
      }
docs: 支付请求前签名
  @param params 参数(已经升序, 排出非空值和sign)
  @return MD5的签名字符串(大写)