dart学习-百度地图开放平台如何计算SN

参考百度地图开放平台官网说明,若用户所用AK的校验方式为SN校验时,请求参数中SN为必填项,那么SN值如何计算呢?官网给出了PHP,JAVA,C#和PYTHON样例代码,那么dart语言该如何实现呢?趁着学习dart的机会实践了一把,经测试可行,样例源码如下。

/*
  @brief 百度查询基类
*/
class BaiduBaseQuery {
  String host = baiduHost;
  String url = baiduUrl;
  String ak = baiduAk;
  String sk = baiduSk;
  String output = 'json';
  String params = '';

  /*
    @brief 子类根据各自请求参数,重写此方法
  */
  String getBaseParams() {
    if (params.isEmpty) {
      List paramList = [];
      params = paramList.join('&');
    }
    return params;
  }

  void clearBaseParams() {
    params = '';
  }

  /*
    @brief 计算sn值
  */
  String getSN() {
    var uri = '$url?${getBaseParams()}$sk';
    var content = const Utf8Encoder().convert(Uri.encodeComponent(uri));
    var ret = md5.convert(content);
    return ret.toString();
  }

  /*
    @brief 获取完整请求url
  */
  String getTotalUrl() {
    return '$host$url?${getBaseParams()}&sn=${getSN()}';
  }
}

/*
  @brief 百度ip定位查询请求结构
*/
class BaiduIpQuery extends BaiduBaseQuery {
  String ip = '';
  String coor = 'bd09ll';

  BaiduIpQuery setIp(String ip) {
    this.ip = ip;
    return this;
  }

  @override
  String getBaseParams() {
    if (params.isEmpty) {
      List paramList = [];
      if (ip.isNotEmpty) {
        paramList.add('ip=$ip');
      }
      if (coor.isNotEmpty) {
        paramList.add('coor=$coor');
      }
      paramList.add('ak=$ak');
      paramList.add('output=$output');
      params = paramList.join("&");
    }

    return params;
  }
}
发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章