首先請看網址:
https://www.w3cschool.cn/weixinkaifawendang/h8ap1qe5.html
重點說下怎么配置wx.config(為了安全,所有的參數都在服務端獲取)
var link = location.href; $.ajax({ url: "/WxJSSDK/WxJS_SDK.aspx/GetInfoMation",//后台給你提供的接口 type: "Post", data: "{ 'url': '"+link+"' }", async: false, contentType: "application/json; charset=utf-8", dataType: "json", success: function (data) { var datad = JSON.parse(data.d); //轉譯為Json字符串 wx.config({ debug: false, // 開啟調試模式,調用的所有api的返回值會在客戶端alert出來 appId: datad.appid, // 必填,公眾號的唯一標識 timestamp: datad.timestamp, // 必填,生成簽名的時間戳 nonceStr: datad.noncestr, // 必填,生成簽名的隨機串 signature: datad.signature,// 必填,簽名,見附錄1 jsApiList: [ "openLocation" ] // 必填,需要使用的JS接口列表,所有JS接口列表見附錄2 }); wx.error(function (res) { layer.msg(res); }); }, error: function (error) { layer.msg(error) } });
訪問的頁面方法:
#region 獲取AccessToken private static string GetAccessToken() { //https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET string tokenUrl = string.Format("https://api.weixin.qq.com/cgi-bin/token?grant_type={0}&appid={1}&secret={2}", "client_credential", ConfigurationManager.AppSettings["appid"], ConfigurationManager.AppSettings["secret"]); var wc = new WebClient(); var strReturn = wc.DownloadString(tokenUrl);return strReturn; } #endregion #region 獲取Jsapi_Ticket private static string GetWeiXinJsapi_Ticket(string accessToken) { string tokenUrl = string.Format("https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token={0}&type={1}", accessToken, "jsapi"); var wc = new WebClient(); var strReturn = wc.DownloadString(tokenUrl); //取得微信返回的json數據 return strReturn; } #endregion #region 基礎字符 private static string[] strs = new string[] { "a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z", "A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z" }; #endregion #region 創建隨機字符串 private static string CreatenNonce_str() { Random r = new Random(); var sb = new StringBuilder(); var length = strs.Length; for (int i = 0; i < 15; i++) { sb.Append(strs[r.Next(length - 1)]); } return sb.ToString(); } #endregion #region 創建時間戳 private static long CreatenTimestamp() { return (DateTime.Now.ToUniversalTime().Ticks - 621355968000000000) / 10000000; } #endregion #region 簽名算法 /// <summary> /// 簽名算法 ///本代碼來自開源微信SDK項目:https://github.com/night-king/weixinSDK /// </summary> /// <param name="jsapi_ticket">jsapi_ticket</param> /// <param name="noncestr">隨機字符串(必須與wx.config中的nonceStr相同)</param> /// <param name="timestamp">時間戳(必須與wx.config中的timestamp相同)</param> /// <param name="url">當前網頁的URL,不包含#及其后面部分(必須是調用JS接口頁面的完整URL)</param> /// <returns></returns> public static string GetSignature(string jsapi_ticket, string noncestr, long timestamp, string url, out string string1) { var string1Builder = new StringBuilder(); string1Builder.Append("jsapi_ticket=").Append(jsapi_ticket).Append("&") .Append("noncestr=").Append(noncestr).Append("&") .Append("timestamp=").Append(timestamp).Append("&") .Append("url=").Append(url.IndexOf("#") >= 0 ? url.Substring(0, url.IndexOf("#")) : url); string1 = string1Builder.ToString();return FormsAuthentication.HashPasswordForStoringInConfigFile(string1, "SHA1"); } #endregion //GET api/GetInfoMation /// <summary> ///初始化的數據調用微信接口返回參數 /// </summary> /// <returns></returns> [WebMethod] public static string GetInfoMation(string url) { try { //生成tokcen string tocken = GetAccessToken(); JObject TokenJO = (JObject)JsonConvert.DeserializeObject(tocken); //驗證簽名 string Jsapi_Ticket = GetWeiXinJsapi_Ticket(TokenJO["access_token"].ToString()); JObject Jsapi_TicketJo = (JObject)JsonConvert.DeserializeObject(Jsapi_Ticket); #region string rtn = ""; string jsapi_ticket = Jsapi_TicketJo["ticket"].ToString(); string noncestr = CreatenNonce_str(); long timestamp = CreatenTimestamp(); string outstring = ""; string JS_SDK_Result = GetSignature(jsapi_ticket, noncestr, timestamp, url, out outstring); //拼接json串返回前台 rtn = "{\"appid\":\"" + ConfigurationManager.AppSettings["appid"] + "\",\"jsapi_ticket\":\"" + jsapi_ticket + "\",\"noncestr\":\"" + noncestr + "\",\"timestamp\":\"" + timestamp + "\",\"outstring\":\"" + outstring + "\",\"signature\":\"" + JS_SDK_Result.ToLower() + "\"}";#endregion return rtn; } catch (Exception ex) { return string.Empty; } }
調用接口方法(例如:打開地圖):
//打開地圖 function funOpenLocation(id) { var dataArray = [[40.036692, 116.425381, "北苑大酒店", "雙營路12號 "], [40.020808, 116.433250, "北京會議中心", "北京市朝陽區來廣營西路88號"], [39.818720, 119.505420, "國海賓館", "河北省秦皇島市北戴河東經路154號"]]; wx.openLocation({ latitude: dataArray[id][0], // 緯度,浮點數,范圍為90 ~ -90 longitude: dataArray[id][1], // 經度,浮點數,范圍為180 ~ -180。 name: dataArray[id][2], // 位置名 address: dataArray[id][3], // 地址詳情說明 scale: 18, // 地圖縮放級別,整形值,范圍從1~28。默認為最大 infoUrl: '' // 在查看位置界面底部顯示的超鏈接,可點擊跳轉 }); }