微信公衆號開發筆記3-sdk接入(nodejs)

另一個2小時

  access_token是需要2小時更新一次,在這裏,又引入了一個2小時獲取一次的字段,這個字段是: jsapi_ticket,這個字段是接入sdk的前提。與access_token類似,它也是需要2小時內重新獲取,所以也需要一個類似於獲取access_token的定時器來實時更新並保存sdk。

獲取jsapi_ticket

  微信提供一個獲取接口,'https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=[access_token]&type=jsapi'

這是一個get請求的接口,該請求url需要查詢參數access_token,該請求返回jsapi_ticket, 然後我們需要保存到我們的數據庫,與access_token同理,在我們接入sdk時,查詢出這個jsapi_ticket供我們使用。

接口簡介

  就像接入微信服務器那樣,如果想要接入sdk,就必須要進行微信服務器與本地服務器的一次通信驗證。簽名的算法如文檔所示:

  在這裏,注意一下幾點:

      四個字段的字段排序是按照 鍵 的asc碼,並不是值的。

  url必須是發起該請求的完整url,不包括hash部分。

  接入sdk需要在微信後臺管理界面配置好接口安全域名,同授權域名一樣

後臺接口

後臺接口我們定義爲post接口,接收一個參數url爲發起請求的完整url。

1. 時間戳10位字符串(最多10位,被坑過,Date.now()出的字串是13位,取最後10位)

2. 自定義字符串:隨便定義

3. 獲取到 jsapi_ticket

4. 取到url

5. 進行鍵的排序

6. 根據鍵的排序順序按文檔所示格式拼接以上4個字符串

7. sha1簽名進行簽名

8. 將微信appid、隨機字符串、時間戳、簽名一起返回給前端,進行配置。

joinSdk: function (req, res) {
    //  獲取jsapi_ticket
    weixinUtil.getJsApiTicket(function (jsapiTicket) {

        var jsapi_ticket = jsapiTicket
        var timestamp = Date.now().toString().slice(-10)
        var noncestr = 'WlddIECldl48D3'
        var url = req.body.url
        //  數據存儲對象
        var data = {
            jsapi_ticket: jsapi_ticket,
            timestamp: timestamp,
            noncestr: noncestr,
            url: url
        }
       // 鍵數組排序
        var baseArr = ['jsapi_ticket', 'timestamp', 'noncestr', 'url'].sort()

        var str = ''

        for (var i= 0; i < 4; i ++) {
            str += baseArr[i] + '=' + data[baseArr[i]] + '&'
        }
        str = str.slice(0, -1)

        var signature = sha1(str)

        res.json({code: 100, data: {
            sdk_appId: config.weixinConfig.appId,
            sdk_timestamp: timestamp,
            sdk_noncestr: noncestr,
            sdk_signature: signature
        }})

    })
}

前端接入配置

<script src="http://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script>
<script>
    $.ajax({
        url: '/weixin/joinSdk',
        type: 'post',
        body: {url: location.href}
    }).then(function (res) {
        if (res.code == 100 ) {
            var config = res.data
            wx.config({
              debug: false,
              appId: config.sdk_appId,
              timestamp: config.sdk_timestamp,
              nonceStr: config.sdk_noncestr,
              signature: config.sdk_signature,
              jsApiList: ['onMenuShareTimeline', 'onMenuShareAppMessage']
})
           wx.ready(function () {
              //...
           })
        }
    } )
</script>

結尾

注:在測試號中,微信接入sdk分享,二次分享會接入失敗,報錯 需要關注公衆號,造成接入sdk失敗,分享的配置也失效。這個在線上公衆號是不會有問題的,這個問題之前困擾了好久。太坑了。

sdk接入失敗,大部分是簽名的問題,可以對照文檔檢查。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章