建议大家使用FireFox、Opera、Safri、IE8+等主流浏览器访问本站,否则可能会出现不兼容等问题!

nodejs微信开发手记(wechat,wecha-api)

Nodejs 凶恶的方块 6598次浏览 已收录 5个评论

前言:

学校有个小比赛,然后有个微信的东西,准备用nodejs搞一搞。原以为很简单,结果坑了。朴灵大大,写了wechat的API模块,其实是两个wechat和wechat-api,wechat主要是回复消息,wechat-api则是其他接口的封装。

参考开发模块:

GitHub (wechat):  https://github.com/node-webot/wechat 

Nodejs 微信API库(wechat-api):http://doxmate.cool/node-webot/wechat-api/api.html

开始:

首先申请了一个API这里有个token,按照官方的方法需要先验证这个东西,至于验证方法…原生的是

var crypto = require('crypto');
function sha1(str) {
    var md5sum = crypto.createHash('sha1');
    md5sum.update(str);
    str = md5sum.digest('hex');
    return str;
}
exports.tocked=function(req, res, next) {
    //微信得到返回后会通过你的认证
    var query = req.query;
    var signature = query.signature;
    var echostr = query.echostr;
    var timestamp = query['timestamp'];
var nonce = query.nonce;
var oriArray = new Array();
oriArray[0] = nonce;
oriArray[1] = timestamp;
oriArray[2] = "sdsfd";//这里填写你的token
oriArray.sort();
var original = oriArray[0]+oriArray[1]+oriArray[2];
console.log("Original Str:"+original);
console.log("signature:"+signature);
var scyptoString = sha1(original);
if (signature == scyptoString) {
    res.send(echostr);
}}

把这个写到路由的位置就OK了,通过这个认真,我们能通过API开发者资格的认真,但是wechat已经给封装了方法,就不用了那么麻烦了。

var config = {
    token: '********',
    appid: '***************'
};

/* GET home page. */
module.exports=wechat(config, function (req, res, next) {}

把这个写入相应的路由,然后启动项目,点击微信开放平台上的验证token(PS:多点几下,腾讯有时会抽风);当验证成功我们就可以用官方的wechat例子进行测试了,注:每个请求当没有遇到res. reply()方法的时候会重复请求三次。 我们可以打印req.weixin这样我们就能方便的进行调试。

wechat的等待回复功能不能启用,如果你使用rides的话WXSession,最好看好接口文档,否则怎么死的都不知道

菜单:

创建菜单需要使用wechat-api这个模块,二话不说直接上码。

var wechatApi=require('wechat-api');
var fs=require('fs');
var iconv=require('iconv-lite');
var api = new wechatApi('wx310a9385514e6a69', 'fec50d83a22c77d2414d931affe3baf9');
exports.createMenu=function(){
     var menu1=fs.readFileSync('routes/yourapi/menu.json');
var c=iconv.decode(menu1,'utf-8');
    api.createMenu(c, function(err, result){
     console.log(result);
    });
}
exports.removeMenu=function(){
    api.removeMenu();
}

直接读进来,当出现用户收听事件的时候,创建菜单,如果要移除菜单可以,removemenu(),但是服务器有缓存,多触发几次事件就OK。

 


方块网络 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明nodejs微信开发手记(wechat,wecha-api)
喜欢 (1)or分享 (0)
avatar
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
(5)个小伙伴在吐槽
  1. avatar
    function sha1(str) { var md5sum = crypto.createHash('sha1'); md5sum.update(str); str = md5sum.digest('hex'); return str;}需要注意下: md5sum.digest()返回的小写字符,而微信API返回的是大写字符, (也有可能反过来,md5sum.digest()是大写,而微信API返回的是小写字符)。。。。就算是签名字符一样,也得注意这个坑,我当时也调试好半天注意到这玩意。 坑!
    孤月狼2018-06-23 14:23 回复 Windows 10 | Chrome 58.0.3029.110
  2. avatar
    nodjs很牛的啊,支持
    osblog2016-04-03 16:15 回复 Windows 10 | Chrome 48.0.2564.109
  3. avatar
    很实战哦 学习学习
    米粒博客2016-03-25 20:57 回复 Windows 10 | Chrome 45.0.2454.101