分类:
.NET
//官网上面有sn校验的demo 其中包括Java,PHP,C#,Python 这里主要说C#的 详情参照附录 'https://lbsyun.baidu.com/faq/api?title=webapi/appendix' //当我们按照官网给的代码运行起来时,返回一个APP SN 校验失败,因为官网的代码没有问题,但是有些细节并没有标注出来 //1.MD5加密方法, System.Security.Cryptography.MD5CryptoServiceProvider 该方法,目前测试情况,在.Net4.0以上(6.0/8.0)是被弃用的(但是弃用不代表不能用,不建议使用,高版本有替换的) //2.URL,参数键值对没有说明,一个错误就会导致sn码生成错误 //---解决 //1. MD5升级代码 private static string _MD5(string password) { try { byte[] inputBytes = Encoding.UTF8.GetBytes(password); MD5 md5Hash = MD5.Create(); byte[] hashBytes = md5Hash.ComputeHash(inputBytes); string ret = ""; for (int i = 0; i < hashBytes.Length; i++) { ret += hashBytes[i].ToString("X2"); } return ret.ToString(); } catch { throw; } } //2. 参数说明: /// <summary> /// /// </summary> /// <param name="ak">AK(此方法未使用)</param> /// <param name="sk">AK对应SN校验方式SK(个人主页控制台获取)</param> /// <param name="url">请求接口路径 此路径不包括IP 如 行政区域检索接口 ' 只需要传递 /place/v2/suggestion</param> /// <param name="querystring_arrays">请求接口参数键值对 包括ak不包括sn</param> /// <returns></returns> public static string CaculateAKSN(string ak, string sk, string url, IDictionary<string, string> querystring_arrays) { var queryString = HttpBuildQuery(querystring_arrays); var str = UrlEncode(url + "?" + queryString + sk); return _MD5(str).ToLower();//返回的sn码需要小写的 } private static string UrlEncode(string str) { str = System.Web.HttpUtility.UrlEncode(str); byte[] buf = Encoding.ASCII.GetBytes(str);//等同于Encoding.ASCII.GetBytes(str) for (int i = 0; i < buf.Length; i++) if (buf[i] == '%') { if (buf[i + 1] >= 'a') buf[i + 1] -= 32; if (buf[i + 2] >= 'a') buf[i + 2] -= 32; i += 2; } return Encoding.ASCII.GetString(buf);//同上,等同于Encoding.ASCII.GetString(buf) } private static string HttpBuildQuery(IDictionary<string, string> querystring_arrays) { StringBuilder sb = new StringBuilder(); foreach (var item in querystring_arrays) { sb.Append(UrlEncode(item.Key)); sb.Append("="); sb.Append(UrlEncode(item.Value)); sb.Append("&"); } sb.Remove(sb.Length - 1, 1); return sb.ToString(); } //其余方法参照附录获取'https://lbsyun.baidu.com/faq/api?title=webapi/appendix' //代码调用 string BaseUrl = "https://api.map.baidu.com/place/v2/suggestion"; var keyValuePairs = new Dictionary<string, string> { {"query",name }, {"region",name }, {"city_limit","false" }, {"output","json" }, {"ak",_apiKey }, }; string sn = CaculateAKSN(_apiKey, _apiSK, "/place/v2/suggestion", keyValuePairs); var url = $"{BaseUrl}?query={name}®ion={name}&city_limit=false&output=json&ak={_apiKey}&sn={sn}"; //注意,键值对顺序需要和url参数顺序一致 顺序不对等也会造成sn校验失败,其次 sn在url里面固定放在最后 //! 文章结束,后续有问题的可以留言 交流群号:709342059
评价
排名
6
文章
6
粉丝
16
评论
8
{{item.articleTitle}}
{{item.blogName}} : {{item.content}}
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2024TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术