使用微信JS-SDK調用微信瀏覽器的接口


先附上微信公眾平台的相關鏈接:
微信公眾平台: https://mp.weixin.qq.com/
微信公眾平台開發文檔: https://mp.weixin.qq.com/wiki
 
閱讀文檔可知,基本流程如下:

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}&timestamp={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調用微信瀏覽器的各種接口。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM