1.綁定域名
先登錄微信公眾平台進入“公眾號設置”的“功能設置”里填寫“JS接口安全域名”。
2.引入JS文件
在需要調用JS接口的頁面引入如下JS文件 http(s)://res.wx.qq.com/open/js/jweixin-1.0.0.js
如需使用搖一搖周邊功能,請引入 http://res.wx.qq.com/open/js/jweixin-1.1.0.js
3.通過config接口注入權限驗證配置
wx.config({
debug: true, // 開啟調試模式,調用的所有api的返回值會在客戶端alert出來,若要查看傳入的參數,可以在pc端打開,參數信息會通過log打出,僅在pc端時才會打印。
appId: '', // 必填,公眾號的唯一標識
timestamp: , // 必填,生成簽名的時間戳
nonceStr: '', // 必填,生成簽名的隨機串
signature: '',// 必填,簽名,見附錄1
jsApiList: [] // 必填,需要使用的JS接口列表
});
4.通過ready接口處理成功驗證
wx.ready(function(){
// config信息驗證后會執行ready方法,所有接口調用都必須在config接口獲得結果之后,config是一個客戶端的異步操作。
});
5.在ready方法里進行相關接口的調用,比如:分享到微信朋友圈
wx.onMenuShareTimeline({
title: '', // 分享標題
link: '', // 分享鏈接
imgUrl: '', // 分享圖標
success: function () {
// 用戶確認分享后執行的回調函數
},
cancel: function () {
// 用戶取消分享后執行的回調函數
}
});
調用流程其實很簡單,但是第3步config需要的東西需要准備一下,還是閱讀文檔:
簽名算法
簽名生成規則如下:參與簽名的字段包括
1.noncestr(隨機字符串)
2.有效的jsapi_ticket
1.獲取access_token http請求方式: GET https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET 2.用第一步拿到的access_token 獲得jsapi_ticket http請求方式: GET https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=ACCESS_TOKEN&type=jsapi
3.timestamp(時間戳)
4.url(當前網頁的URL,不包含#及其后面部分)
5.對所有待簽名參數按照字段名的ASCII 碼從小到大排序(字典序)后,使用URL鍵值對的格式(key1=value1&key2=value2…)均為小寫字符,拼接成字符串string1。
對string1作sha1加密,字段名和字段值都采用原始值,不進行URL 轉義。
注意事項
1.簽名用的noncestr和timestamp必須與wx.config中的nonceStr和timestamp相同。
2.簽名用的url必須是調用JS接口頁面的完整URL。
3.出於安全考慮,開發者必須在服務器端實現簽名的邏輯。
附上C#代碼:
public static string GetSha1Str(string str) { byte[] strRes = Encoding.UTF8.GetBytes(str); HashAlgorithm iSha = new SHA1CryptoServiceProvider(); strRes = iSha.ComputeHash(strRes); var enText = new StringBuilder(); foreach (byte iByte in strRes) { enText.AppendFormat("{0:x2}", iByte); } return enText.ToString(); }
public static string GetAccessToken() { string apiUrl = string.Format("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={0}&secret={1}", appid, secret); string token = null; if (System.Web.HttpContext.Current.Session["JsAccessToken"] == null) { string result = GetMethod(apiUrl); if (!string.IsNullOrEmpty(result)) { JObject jo = (JObject)JsonConvert.DeserializeObject(result); token = jo["access_token"].ToString(); System.Web.HttpContext.Current.Session["JsAccessToken"] = token; System.Web.HttpContext.Current.Session.Timeout = 7200; } } else { token = System.Web.HttpContext.Current.Session["JsAccessToken"].ToString(); } return token; }
public static string GetJsApiTicket() { string apiUrl = string.Format("https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token={0}&type=jsapi", GetAccessToken()); string ticket = null; if (System.Web.HttpContext.Current.Session["JsApiTicket"] == null) { string result = GetMethod(apiUrl); if (!string.IsNullOrEmpty(result)) { JObject jo = (JObject)JsonConvert.DeserializeObject(result); ticket = jo["ticket"].ToString(); System.Web.HttpContext.Current.Session["JsApiTicket"] = ticket; System.Web.HttpContext.Current.Session.Timeout = 7200; } } else { ticket = System.Web.HttpContext.Current.Session["JsApiTicket"].ToString(); } return ticket; }
public static string Sign(string jsapiTicket, string nonceStr, string timestamp, string url) { string str = string.Format("jsapi_ticket={0}&noncestr={1}×tamp={2}&url={3}", jsapiTicket, nonceStr, timestamp, url); return GetSha1Str(str); }
public static string DateToUnix() { DateTime timeStamp = new DateTime(1970, 1, 1); //得到1970年的時間戳 long a = (DateTime.UtcNow.Ticks - timeStamp.Ticks) / 10000000; return a.ToString(); }
以上,即可實現微信網頁中使用JS-SDK調用微信瀏覽器的各種接口。