fromBaseEncryptV3 static method

Future<DataResult> fromBaseEncryptV3(
  1. Map map,
  2. dynamic url, {
  3. bool post = true,
  4. Map<String, dynamic>? queryParameters,
})

数据加密v3

Implementation

static Future<DataResult> fromBaseEncryptV3(Map map, url,
    {bool post = true, Map<String, dynamic>? queryParameters}) async {
  String body =
      queryParameters != null ? jsonEncode(queryParameters) : jsonEncode(map);
  AppConfig.printLog(body);
  var nonce = randomSize(6);
  if (sessionId.isEmpty != false) {
    sessionId = randomSize(8);
  }
  if (Address.baseToken.isEmpty != false) {
    Address.baseToken = SpUtil.getString(AppConfig.appToken)!;
  }
  Map<String, dynamic> header = {
    'x-request-id': nonce,
    'x-sessionid': sessionId,
    'Authorization': Address.baseToken
  };
  dynamic encodeBody;
  if (post) {
    encodeBody = await encryptToBase64(body, NetConfig.encryptDes);
    var time = DateTime.now().millisecondsSinceEpoch + AppConfig.timeAsync;
    var append = time.toString() + body + NetConfig.encryptYanZhi + nonce;
    var convert = const Utf8Encoder().convert(append);
    var sign = md5.convert(convert).toString().toUpperCase();
    header['x-sign'] = sign;
    header['x-time'] = time.toString();
  }
  var res = await httpManager.netFetch(url, post ? encodeBody : null, header,
      Options(method: post ? 'post' : 'get'),
      queryParameters: !post ? queryParameters : null);
  if (res.result) {
    if (res.data is Map) {
      var baseEntity = BaseEntity.fromJson(res.data);
      try {
        if (baseEntity.time?.isEmpty == false) {
          var t = int.parse(baseEntity.time!);
          if (t != 0) {
            AppConfig.timeAsync = DateTime.now().millisecondsSinceEpoch - t;
          }
        }
      } catch (err) {
        AppConfig.printLog(err);
      }
      if (baseEntity.code == '0') {
        return DataResult(baseEntity.data, true, time: baseEntity.time);
      } else {
        if (baseEntity.code == '999' ||
            baseEntity.code == '-1' ||
            baseEntity.code == '1005' ||
            baseEntity.code == '1007' ||
            baseEntity.code == '1010' ||
            baseEntity.code == '1024' ||
            baseEntity.code == '5003' ||
            baseEntity.code == '5017') {
          if (baseEntity.msg!.isEmpty == false) {
            CommonUtils.showToast(baseEntity.msg);
          }
          NavigatorUtils.goGuide2();
        }
        return DataResult(baseEntity, false);
      }
    } else {
      try {
        var decryptBody =
            await decryptFromBase64(res.data, NetConfig.decryptDes);
        AppConfig.printLog(decryptBody);
        var data = jsonDecode(decryptBody);
        var baseEntity = BaseEntity.fromJson(data);
        try {
          if (baseEntity.time?.isEmpty == false) {
            var t = int.parse(baseEntity.time!);
            if (t != 0) {
              AppConfig.timeAsync = DateTime.now().millisecondsSinceEpoch - t;
            }
          }
        } catch (err) {
          AppConfig.printLog(err);
        }
        var signKey = res.headers['x-sign'][0];
        if (await doCheck(signKey, decryptBody)) {
          if (baseEntity.code == '0') {
            return DataResult(baseEntity.data, true, time: baseEntity.time);
          } else {
            if (baseEntity.code == '999' ||
                baseEntity.code == '-1' ||
                baseEntity.code == '1005' ||
                baseEntity.code == '1007' ||
                baseEntity.code == '1010' ||
                baseEntity.code == '1024' ||
                baseEntity.code == '5003' ||
                baseEntity.code == '5017') {
              if (baseEntity.msg!.isEmpty == false) {
                CommonUtils.showToast(baseEntity.msg);
              }
              NavigatorUtils.goGuide2();
            }
            return DataResult(baseEntity, false);
          }
        } else {
          return DataResult(baseEntity, false, dataError: true);
        }
      } catch (e) {
        AppConfig.printLog(e);
        return DataResult(res, false, dataError: true);
      }
    }
  }
  return DataResult(res, false, dataError: true);
}