node呼叫微信JS SDK遇到的坑

2021-09-17 23:18:35 字數 2907 閱讀 5327

繫結網域名稱

引入js檔案

通過config介面注入許可權驗證配置

wx.config();
需要安裝一下模組供我們使用:

npm install sha1
這個雜湊1模組是處理對字元的雜湊加密,生成signature

npm install redis
如果使用co庫的話

npm install co
module.exports = ;
建立getwebtoken.js 用來返回access_token,因為這個是非同步返回乙個promise

'use strict';

const request = require('request');

const qs = require('querystring');

const config = require('./../wechatconfig');

function gettoken() ;

let options = ;

console.log(options.url);

return new promise((resolve, reject) => else

})})

}module.exports = gettoken;

param的順序一定不能錯!!!這個很重要不然會證書會認證失敗!這個坑我整了1天才爬出來。

建立乙個getjsapidata.js 檔案用來做為主要的controller返回結果返回給client

/**

* created by caozheng on 2016/11/24.

*/'use strict';

const fs = require('fs');

const request = require('request');

const gettoken = require('./getwebtoken');

const sha1 = require('sha1');

function getjsapiticket() ;

request(options, function (err, res, body) else

})}).catch(function (err) );

})}//noncestr

function getnoncestr ()

return text;

}//timestamp

function gettimestamp()

function getsign(jsapiticket, noncestr, timestamp, url)

//返回資料分別為sign, timestamp, noncestr

function getjsapidata(clienturl) )

}module.exports = getjsapidata;

在路由處新增入口

router.post('/wechat',function (req, res) );

});});

建立乙個redis.js檔案,因為這裡只需要儲存功能。

/**

* created by caozheng on 2016/11/24.

*/var db = {};

var redis = require('redis');

var options = ;

var client = redis.createclient(options);

client.on('ready',function(err));

client.on("error", function (err) );

client.on('connect', function());

/** * 新增string型別的資料

* @param key 鍵

* @params value 值

* @params expire (過期時間,單位秒;可為空,為空表示不過期)

* @param callback(err,result)

*/db.set = function(key, value, expire, callback)

if (!isnan(expire) && expire > 0)

callback(null,result)

})};/**

* 查詢string型別的資料

* @param key 鍵

* @param callback(err,result)

*/db.get = function(key, callback)

callback(null,result);

});};module.exports = db;

總結:這裡也可以寫成非同步! express可以使用co庫,koa的話那就不用看我寫的了...

在getjsapidata.js中的getjsapiticket函式中新增redis儲存,讀取。同時需要引入redis.js

const db = require('./../../db/radis');

var res = // 這裡為了和公共介面同步把數

co(function* ()

// 判斷redis中是否存在access_token、ticket

if(result.access_token && result.ticket)else

})

總結 : 這只是個示例**的具體實現還是看場景。

微信js sdk呼叫

在開始編碼之前,首先了解一下從使用者使用開始,到調起js sdk進行操作得當整個流程 wx.ready 中。如果不需要,就只需要在根據情況在頁面上出發對應的js sdk提供的函式即可。每個函式,都會有對應的成功與失敗的 函式,前端通過該函式,來實現對應的結果展示就行了。調起js sdk所後台需要做的...

呼叫介面簽名 用Node實現微信JS SDK的簽名

2 目前access token的有效期通過返回的expire in來傳達,目前是7200秒之內的值。中控伺服器需要根據這個有效時間提前去重新整理新access token。在重新整理過程中,中控伺服器可對外繼續輸出的老access token,此時公眾平台後台會保證在5分鐘內,新老access t...

微信jssdk使用

使用jssdk之前,我們需要在伺服器端準備什麼資料 jssdk使用的config wx.config 這裡我們需要自己去準備的資料,主要有 timestamp 這個一般可用伺服器當前時間設值,php now noncestr 隨機的字串,這個字串可以任意長度,自己設定隨機串 signature 簽名...