参考百度地图开放平台官网说明,若用户所用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 条评论) “” |