如何解決c#百度地圖api APP SN校驗(yàn)失敗的問題?針對這個(gè)問題,這篇文章詳細(xì)介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問題的小伙伴找到更簡單易行的方法。
在千山等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作 網(wǎng)站設(shè)計(jì)制作按需網(wǎng)站制作,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站制作,網(wǎng)絡(luò)營銷推廣,成都外貿(mào)網(wǎng)站建設(shè),千山網(wǎng)站建設(shè)費(fèi)用合理。
在使用c#調(diào)用百度地圖Web服務(wù)api遇到的簽名(sn校驗(yàn))問題,在此記錄一下,(ip白名單校驗(yàn)的請忽略)
1.首先獲取ak與sk,這個(gè)兩個(gè)東西可以從控制臺中獲取到
2.在這個(gè)地址:sn簽名算法,里面提供了java,php,c#,python2.7的參考代碼
在百度提供的參考代碼中,其中c#的代碼中MD5加密方法是有問題的,(在筆者寫隨筆時(shí),代碼還是有問題的,之后希望百度官方修復(fù)此問題)
把百度的MD5方法修改一下,簽名就正確了,api正常調(diào)用了,開心??!
這里是完整的簽名代碼
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Web; namespace IpService.Code { public class BaiduAKSNCaculater { private static string MD5(string password) { try { System.Security.Cryptography.HashAlgorithm hash = System.Security.Cryptography.MD5.Create(); byte[] hash_out = hash.ComputeHash(System.Text.Encoding.UTF8.GetBytes(password)); var md5_str=BitConverter.ToString(hash_out).Replace("-", ""); return md5_str.ToLower(); } catch { throw; } } 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(IDictionaryquerystring_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(); } public static string CaculateAKSN(string ak, string sk, string url, IDictionary querystring_arrays) { var queryString = HttpBuildQuery(querystring_arrays); var str = UrlEncode(url + "?" + queryString + sk); return MD5(str); } } }
這里是調(diào)用代碼
public static string GetIPAreas() { var ip = "你要查詢的ip地址"; var ak = "從百度控制臺獲取到應(yīng)用AK"; var sk = "從百度控制臺獲取到簽名SK"; var uri = "http://api.map.baidu.com"; var path = "/location/ip"; var param = new Dictionary(); param.Add("ip", ip); param.Add("ak", ak); //注意:簽名的url參數(shù),并非完整地址 var sn = BaiduAKSNCaculater.CaculateAKSN(ak, sk, path, param); var url = string.Format("{0}{1}?ip={2}&ak={3}&sn={4}", uri, path, ip, ak, sn); var str = Code.HttpService.Get(url); return str; }
關(guān)于如何解決c#百度地圖api APP SN校驗(yàn)失敗的問題問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識。