
- //官网上面有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
评价
排名
46
文章
10
粉丝
1
评论
0
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:
50010702506256


欢迎加群交流技术