code: private static byte[] getRequestBody(String appId, String cpId, String privateKey, GameUserData userData) {
          Map<String,String> params = getParamMap(appId, cpId, userData);
          params.put("cpSign", RSAUtil.sign(getSignData(params), privateKey));
  
          StringBuilder strBody = new StringBuilder();
          Set<Map.Entry<String, String>> paramSet = params.entrySet();
          boolean isFirstParm = true;
          for (Map.Entry<String, String> param : paramSet) {
              if (param != null) {
                  if (!TextUtils.isEmpty(param.getValue()))
                  {
                      strBody.append(isFirstParm?"":"&").append(param.getKey()).append('=').append(RSAUtil.urlEncode(param.getValue()));
                      isFirstParm = false;
                  }
              }
          }
  
          try
          {
              return strBody.toString().getBytes("UTF-8");
          }
          catch (UnsupportedEncodingException e)
          {
              return new byte[0];
          }
      }
docs: 获取验签请求体
  @param appId 应用程序id，来源于华为开发者联盟上参数
  @param cpId 开发者id，来源于开发者联盟
  @param privateKey 私钥，来源于开发者联盟，非常重要的信息，注意保存避免泄露
  @param userData 用户的登录结果数据
  @return 验签请求体