C#百度地图开放平台211sn校验失败解决方法

2025-12-13 0 941

个人认为百度地图开放平台确实很好用但就是C#的SN校验会出现以下几个问题

一、官方的示例代码说的不清不楚

获取SN函数的Uri应该使用不带域名的Uri

比如:最终请求地址为https://api.map.baidu.com/location/ip?ip=119.126.10.15&coor=gcj02&ak=123456&sn=654321
AKSNCaculater.CaculateAKSN中的uri参数应该使用https://api.map.baidu.com/location/ip?ip=119.126.10.15&coor=gcj02&ak=123456&sn=654321,而不可以是https://aspi.map.baidu.com/location/ip?coor=gcj02&ip=119.126.10.15&ak=123456&sn=654321

获取SN的时候参数的顺序是怎么样的,发送请求的时候参数的顺序就必须是怎么样

比如:获取SN的时候参数顺序是ip=119.126.10.15&coor=gcj02&ak=123456,那么最终请求地址就应该是https://api.map.baidu.com/location/ip?ip=119.126.10.15&coor=gcj02&ak=123456&sn=654321,而不可以是https://aspi.map.baidu.com/location/ip?coor=gcj02&ip=119.126.10.15&ak=123456&sn=654321

无论如何SN必须在最终请求地址的最后!

比如以上情况下:https://api.map.baidu.com/location/ip?ip=119.126.10.15&coor=gcj02&sn=654321&ak=123456就是一个错误的地址

二、官方MD5加密是错的!

这一个真是把我害惨了,折腾了半天终于发现正确代码(我也是copy别人的,但不管怎么说,官方的MD5加密代码确实是错的)

正确的加密过程如下

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

publicstaticstringMD52(stringpassword)

{

try

{

System.Security.Cryptography.HashAlgorithm hash = System.Security.Cryptography.MD5.Create();

byte[] hash_out = hash.ComputeHash(System.Text.Encoding.UTF8.GetBytes(password));

varmd5_str = BitConverter.ToString(hash_out).Replace(\”-\”,\”\”);

returnmd5_str.ToLower();

}

catch

{

throw;

}

}

  完整类如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

usingSystem;

usingSystem.Collections.Generic;

usingSystem.Linq;

usingSystem.Text;

namespaceSATPlatform

{

publicclassAKSNCaculater

{

publicstaticstringMD52(stringpassword)

{

try

{

System.Security.Cryptography.HashAlgorithm hash = System.Security.Cryptography.MD5.Create();

byte[] hash_out = hash.ComputeHash(System.Text.Encoding.UTF8.GetBytes(password));

varmd5_str = BitConverter.ToString(hash_out).Replace(\”-\”,\”\”);

returnmd5_str.ToLower();

}

catch

{

throw;

}

}

publicstaticstringMD5(stringpassword)

{

byte[] textBytes = System.Text.Encoding.UTF8.GetBytes(password);

try

{

System.Security.Cryptography.MD5CryptoServiceProvider cryptHandler;

cryptHandler =newSystem.Security.Cryptography.MD5CryptoServiceProvider();

byte[] hash = cryptHandler.ComputeHash(textBytes);

stringret =\”\”;

foreach(byteainhash)

{

ret += a.ToString(\”x\”);

}

returnret;

}

catch

{

throw;

}

}

publicstaticstringUrlEncode(stringstr)

{

str = System.Web.HttpUtility.UrlEncode(str);

byte[] buf = Encoding.ASCII.GetBytes(str);//等同于Encoding.ASCII.GetBytes(str)

for(inti = 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;

}

returnEncoding.ASCII.GetString(buf);//同上,等同于Encoding.ASCII.GetString(buf)

}

publicstaticstringHttpBuildQuery(IDictionary<string,string> querystring_arrays)

{

StringBuilder sb =newStringBuilder();

foreach(variteminquerystring_arrays)

{

sb.Append(UrlEncode(item.Key));

sb.Append(\”=\”);

sb.Append(UrlEncode(item.Value));

sb.Append(\”&\”);

}

sb.Remove(sb.Length – 1, 1);

returnsb.ToString();

}

publicstaticstringCaculateAKSN(stringak,stringsk,stringurl, IDictionary<string,string> querystring_arrays)

{

varqueryString = HttpBuildQuery(querystring_arrays);

varstr = UrlEncode(url +\”?\”+ queryString + sk);

returnMD52(str);

}

}

}



以上就是我被坑的经历,希望对其他人有用~~~

最后再附带上我的请求代码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

/// <summary>

/// 返回指定IP的位置对应的百度城市代码(利用百度地图API

/// </summary>

/// <param name=\”IP\”>需要查询的IP地址</param>

/// <returns></returns>

publicstringGetPlace(stringIP)

{

DataTable BasicIn = Reader(\”SELECT Th_MapAK , Th_MapSK FROM S_Inf\”);

Dictionary<string,string> P =newDictionary<string,string>()

{

{\”ip\”,IP },

{\”coor\”,\”gcj02\”},

{\”ak\”,BasicIn.Rows[0][\”Th_MapAK\”].ToString() }

//{\”address\”,\”百度大厦\” },

//{\”output\”,\”json\” },

//{\”ak\”,\”yourak\” }

};

stringGetSN = AKSNCaculater.CaculateAKSN(BasicIn.Rows[0][\”Th_MapAK\”].ToString(), BasicIn.Rows[0][\”Th_MapSK\”].ToString(),\”/location/ip\”, P);

//string GetSN = AKSNCaculater.CaculateAKSN(\”yourak\”, \”yoursk\”, \”/geocoder/v2/\”, P);

HttpWebRequest NewRequest = (HttpWebRequest)WebRequest.Create(\”https://api.map.baidu.com/location/ip?\”+ AKSNCaculater.HttpBuildQuery(P) +\”&sn=\”+ GetSN);

NewRequest.Headers.Add(\”charset\”,\”utf-8\”);

NewRequest.Method =\”GET\”;

NewRequest.ContentType =\”application/json\”;

NewRequest.UserAgent =\”Windows KeHuDuan\”;

NewRequest.Timeout = 5000;//设置超时时间

HttpWebResponse Response = (HttpWebResponse)NewRequest.GetResponse();

Stream ResponseStream = Response.GetResponseStream();

StreamReader ResponseStreamReader =newStreamReader(ResponseStream);

stringRes = ResponseStreamReader.ReadToEnd();

ResponseStreamReader.Close();

ResponseStream.Close();

JObject ResJ =newJObject();

try

{ ResJ = JObject.Parse(Res); }

catch(Exception)

{ GiveErr(ErrCode.ThirdPartyError); }

if(ResJ[\”status\”].ToString() !=\”0\”)

GiveErr(ErrCode.ThirdPartyError);

returnResJ[\”content\”][\”address_detail\”][\”city_code\”].ToString();

}

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

申明:本文由第三方发布,内容仅代表作者观点,与本网站无关。对本文以及其中全部或者部分内容的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。本网发布或转载文章出于传递更多信息之目的,并不意味着赞同其观点或证实其描述,也不代表本网对其真实性负责。

左子网 编程相关 C#百度地图开放平台211sn校验失败解决方法 https://www.zuozi.net/36329.html

常见问题
  • 1、自动:拍下后,点击(下载)链接即可下载;2、手动:拍下后,联系卖家发放即可或者联系官方找开发者发货。
查看详情
  • 1、源码默认交易周期:手动发货商品为1-3天,并且用户付款金额将会进入平台担保直到交易完成或者3-7天即可发放,如遇纠纷无限期延长收款金额直至纠纷解决或者退款!;
查看详情
  • 1、描述:源码描述(含标题)与实际源码不一致的(例:货不对板); 2、演示:有演示站时,与实际源码小于95%一致的(但描述中有”不保证完全一样、有变化的可能性”类似显著声明的除外); 3、发货:不发货可无理由退款; 4、安装:免费提供安装服务的源码但卖家不履行的; 5、收费:价格虚标,额外收取其他费用的(但描述中有显著声明或双方交易前有商定的除外); 6、其他:如质量方面的硬性常规问题BUG等。 注:经核实符合上述任一,均支持退款,但卖家予以积极解决问题则除外。
查看详情
  • 1、左子会对双方交易的过程及交易商品的快照进行永久存档,以确保交易的真实、有效、安全! 2、左子无法对如“永久包更新”、“永久技术支持”等类似交易之后的商家承诺做担保,请买家自行鉴别; 3、在源码同时有网站演示与图片演示,且站演与图演不一致时,默认按图演作为纠纷评判依据(特别声明或有商定除外); 4、在没有”无任何正当退款依据”的前提下,商品写有”一旦售出,概不支持退款”等类似的声明,视为无效声明; 5、在未拍下前,双方在QQ上所商定的交易内容,亦可成为纠纷评判依据(商定与描述冲突时,商定为准); 6、因聊天记录可作为纠纷评判依据,故双方联系时,只与对方在左子上所留的QQ、手机号沟通,以防对方不承认自我承诺。 7、虽然交易产生纠纷的几率很小,但一定要保留如聊天记录、手机短信等这样的重要信息,以防产生纠纷时便于左子介入快速处理。
查看详情

相关文章

猜你喜欢
发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务