Comparing version 1.0.1 to 1.0.2
@@ -7,15 +7,35 @@ 'use strict'; | ||
var _templates = require('../xml/templates'); | ||
var _index = require('../index'); | ||
// return a Promise | ||
// ReplyBuilder是一个类,用于创建各类返回信息,生成对应的xml字符串 | ||
var welcomeMsg = 'hello from koa2wechat'; | ||
// 返回一个Promise对象 | ||
var defaultHandler = function defaultHandler(xml) { | ||
// default | ||
var rpl = {}; | ||
rpl.ToUserName = xml.FromUserName; | ||
rpl.FromUserName = xml.ToUserName; | ||
rpl.Content = 'Hello from koa2wechat'; | ||
rpl.CreateTime = new Date().getTime(); | ||
return Promise.resolve((0, _templates.textTpl)(rpl)); | ||
// 获取来源FromUserName,在回复信息中将其设置为目的地 `to` | ||
// 获取我们公众号的标识ToUserName,在回复信息中将其设置为发送地 `from` | ||
var FromUserName = xml.FromUserName; | ||
var ToUserName = xml.ToUserName; | ||
// 这里可以插入需要执行的业务逻辑代码,比如判断消息来源是谁,他回复了什么类型的数据之类的 | ||
// 实例化builder | ||
var replyBuilder = new _index.ReplyBuilder(); | ||
// 生成回复将会使用到的meta信息,包括 本机`from`, 目标`to`, 时间戳`ts`(时间戳非必选项) | ||
var meta = { from: ToUserName, to: FromUserName, ts: new Date().getTime() }; | ||
// 回复文本类型的数据,要构造选项`type` 和 回复内容`content` 以及上面获取的 meta 信息 | ||
var textRpl = { | ||
meta: meta, | ||
type: "text", | ||
content: welcomeMsg | ||
}; | ||
// 传入回复选项,生成相应的xml字符串 | ||
var rpl = replyBuilder.genXML(textRpl); | ||
// 把Promise 返回回去 | ||
return Promise.resolve(rpl); | ||
}; | ||
exports.default = defaultHandler; |
'use strict'; | ||
Object.defineProperty(exports, "__esModule", { | ||
value: true | ||
value: true | ||
}); | ||
@@ -14,23 +14,48 @@ exports.handler = undefined; | ||
// return Promise | ||
/** | ||
* 示例 handler | ||
* @param {obj} xml , 根据微信服务器推送的xml数据转化的Object,譬如, | ||
* 当接收到文本信息的时候,xml为: | ||
* { | ||
* ToUserName:"", | ||
* FromUserName:"", | ||
* CreateTime:12345678, | ||
* MsgType:"text", | ||
* Content:"this is a test", | ||
* MsgId:1234567890123456 | ||
* } | ||
* 接收到图片信息的时候为: | ||
* { | ||
* ToUserName:"", | ||
* FromUserName:"", | ||
* CreateTime:12345678, | ||
* MsgType:"image", | ||
* PicUrl:"", | ||
* MediaId:"", | ||
* MsgId:1234567890123456 | ||
* } | ||
* 其他类型同理,具体信息参考 http://mp.weixin.qq.com/wiki/17/f298879f8fb29ab98b2f2971d42552fd.html | ||
* @return {Promise} [一定记得返回Promise对象] | ||
*/ | ||
var handler = function handler(xml) { | ||
var MsgType = xml.MsgType; | ||
var MsgType = xml.MsgType; | ||
if (!MsgType) return; | ||
// more about MsgType: http://mp.weixin.qq.com/wiki/17/f298879f8fb29ab98b2f2971d42552fd.html | ||
switch (MsgType) { | ||
// when client subscribe,case 'event' occurs | ||
case 'event': | ||
case 'text': | ||
case 'image': | ||
case 'voice': | ||
case 'video': | ||
case 'shortvideo': | ||
case 'location': | ||
case 'link': | ||
default: | ||
return (0, _defaultHandler2.default)(xml); | ||
} | ||
if (!MsgType) return; | ||
// more about MsgType: http://mp.weixin.qq.com/wiki/17/f298879f8fb29ab98b2f2971d42552fd.html | ||
switch (MsgType) { | ||
// 订阅的时候会触发'event' | ||
case 'event': | ||
case 'text': | ||
case 'image': | ||
case 'voice': | ||
case 'video': | ||
case 'shortvideo': | ||
case 'location': | ||
case 'link': | ||
default: | ||
// 这里的defaultHandler是一个Promise对象 | ||
return (0, _defaultHandler2.default)(xml); | ||
} | ||
}; | ||
exports.handler = handler; | ||
exports.default = handler; |
'use strict'; | ||
require('babel-polyfill'); | ||
Object.defineProperty(exports, "__esModule", { | ||
value: true | ||
}); | ||
exports.wTpls = exports.wLoader = exports.Wechat = undefined; | ||
exports.ReplyBuilder = exports.wLoader = exports.Wechat = undefined; | ||
@@ -16,5 +16,5 @@ var _Loader = require('./wechat/Loader'); | ||
var _templates = require('./xml/templates'); | ||
var _Reply = require('./wechat/Reply'); | ||
var _templates2 = _interopRequireDefault(_templates); | ||
var _Reply2 = _interopRequireDefault(_Reply); | ||
@@ -25,7 +25,7 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
exports.wLoader = _Loader2.default; | ||
exports.wTpls = _templates2.default; | ||
exports.ReplyBuilder = _Reply2.default; | ||
exports.default = { | ||
Wechat: _Wechat2.default, | ||
wLoader: _Loader2.default, | ||
wTpls: _templates2.default | ||
ReplyBuilder: _Reply2.default | ||
}; |
@@ -6,3 +6,3 @@ 'use strict'; | ||
}); | ||
exports.newsTpl = exports.musicTpl = exports.voiceTpl = exports.imageTpl = exports.videoTpl = exports.textTpl = undefined; | ||
exports.newsItemTpl = exports.newsTpl = exports.musicTpl = exports.voiceTpl = exports.imageTpl = exports.videoTpl = exports.textTpl = undefined; | ||
@@ -33,2 +33,6 @@ var _textTpl = require('./templates/textTpl'); | ||
var _newsItemTpl = require('./templates/newsItemTpl'); | ||
var _newsItemTpl2 = _interopRequireDefault(_newsItemTpl); | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
@@ -42,3 +46,4 @@ | ||
musicTpl: _musicTpl2.default, | ||
newsTpl: _newsTpl2.default | ||
newsTpl: _newsTpl2.default, | ||
newsItemTpl: _newsItemTpl2.default | ||
}; | ||
@@ -52,2 +57,3 @@ | ||
exports.newsTpl = _newsTpl2.default; | ||
exports.newsItemTpl = _newsItemTpl2.default; | ||
exports.default = wTpls; |
@@ -7,8 +7,8 @@ "use strict"; | ||
var imageTpl = function imageTpl(msg) { | ||
var ToUserName = msg.ToUserName; | ||
var FromUserName = msg.FromUserName; | ||
var CreateTime = msg.CreateTime; | ||
var MediaId = msg.MediaId; | ||
var ToUserName = msg.to; | ||
var FromUserName = msg.from; | ||
var CreateTime = msg.ts; | ||
var MediaId = msg.mediaId; | ||
var retStr = "<xml>\n\t<ToUserName><![CDATA[" + ToUserName + "]]></ToUserName>\n\t<FromUserName><![CDATA[" + FromUserName + "]]></FromUserName>\n\t<CreateTime>" + CreateTime + "</CreateTime>\n\t<MsgType><![CDATA[image]]></MsgType>\n\t<Image>\n\t<MediaId><![CDATA[" + MediaId + "]]></MediaId>\n\t</Image>\n\t</xml>"; | ||
var retStr = "<xml>\n<ToUserName><![CDATA[" + ToUserName + "]]></ToUserName>\n<FromUserName><![CDATA[" + FromUserName + "]]></FromUserName>\n<CreateTime>" + CreateTime + "</CreateTime>\n<MsgType><![CDATA[image]]></MsgType>\n<Image>\n<MediaId><![CDATA[" + MediaId + "]]></MediaId>\n</Image>\n</xml>"; | ||
return retStr; | ||
@@ -15,0 +15,0 @@ }; |
@@ -7,13 +7,13 @@ "use strict"; | ||
var musicTpl = function musicTpl(msg) { | ||
var ToUserName = msg.ToUserName; | ||
var FromUserName = msg.FromUserName; | ||
var CreateTime = msg.CreateTime; | ||
var MediaId = msg.MediaId; | ||
var Title = msg.Title; | ||
var Description = msg.Description; | ||
var MusicUrl = msg.MusicUrl; | ||
var HQMusicUrl = msg.HQMusicUrl; | ||
var ThumbMediaId = msg.ThumbMediaId; | ||
var ToUserName = msg.to; | ||
var FromUserName = msg.from; | ||
var CreateTime = msg.ts; | ||
var MediaId = msg.mediaId; | ||
var Title = msg.title; | ||
var Description = msg.desc; | ||
var MusicUrl = msg.musicUrl; | ||
var HQMusicUrl = msg.HQUrl; | ||
var ThumbMediaId = msg.thumb; | ||
var retStr = "<xml>\n\t<ToUserName><![CDATA[" + ToUserName + "]]></ToUserName>\n\t<FromUserName><![CDATA[" + FromUserName + "]]></FromUserName>\n\t<CreateTime>" + CreateTime + "</CreateTime>\n\t<MsgType><![CDATA[music]]></MsgType>\n\t<Music>\n\t<Title><![CDATA[" + Title + "]]></Title>\n\t<Description><![CDATA[" + Description + "]]></Description>\n\t<MusicUrl><![CDATA[" + MusicUrl + "]]></MusicUrl>\n\t<HQMusicUrl><![CDATA[" + HQMusicUrl + "]]></HQMusicUrl>\n\t<ThumbMediaId><![CDATA[" + ThumbMediaId + "]]></ThumbMediaId>\n\t</Music>\n\t</xml>"; | ||
var retStr = "<xml>\n<ToUserName><![CDATA[" + ToUserName + "]]></ToUserName>\n<FromUserName><![CDATA[" + FromUserName + "]]></FromUserName>\n<CreateTime>" + CreateTime + "</CreateTime>\n<MsgType><![CDATA[music]]></MsgType>\n<Music>\n<Title><![CDATA[" + Title + "]]></Title>\n<Description><![CDATA[" + Description + "]]></Description>\n<MusicUrl><![CDATA[" + MusicUrl + "]]></MusicUrl>\n<HQMusicUrl><![CDATA[" + HQMusicUrl + "]]></HQMusicUrl>\n<ThumbMediaId><![CDATA[" + ThumbMediaId + "]]></ThumbMediaId>\n</Music>\n</xml>"; | ||
return retStr; | ||
@@ -20,0 +20,0 @@ }; |
@@ -1,69 +0,43 @@ | ||
'use strict'; | ||
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { | ||
value: true | ||
value: true | ||
}); | ||
// `<xml> | ||
// <ToUserName><![CDATA[toUser]]></ToUserName> | ||
// <FromUserName><![CDATA[fromUser]]></FromUserName> | ||
// <CreateTime>12345678</CreateTime> | ||
// <MsgType><![CDATA[news]]></MsgType> | ||
// <ArticleCount>2</ArticleCount> | ||
// <Articles> | ||
// <item> | ||
// <Title><![CDATA[title1]]></Title> | ||
// <Description><![CDATA[description1]]></Description> | ||
// <PicUrl><![CDATA[picurl]]></PicUrl> | ||
// <Url><![CDATA[url]]></Url> | ||
// </item> | ||
// <item> | ||
// <Title><![CDATA[title]]></Title> | ||
// <Description><![CDATA[description]]></Description> | ||
// <PicUrl><![CDATA[picurl]]></PicUrl> | ||
// <Url><![CDATA[url]]></Url> | ||
// </item> | ||
// </Articles> | ||
// </xml> ` | ||
// * | ||
// * news template | ||
// * @param {Obj} msg ,for example: | ||
// * { | ||
// * ToUserName:"ToUserName", | ||
// * FromUserName:"FromUserName", | ||
// * CreateTime:12345678, | ||
// * Articles:[ | ||
// * { | ||
// * | ||
// * }, | ||
// * | ||
// * ] | ||
// * | ||
// * } | ||
// * | ||
// * @return {[type]} [description] | ||
var _newsItemTpl = require("./newsItemTpl"); | ||
// let newsTpl = (msg)=>{ | ||
// let{ | ||
// ToUserName, | ||
// FromUserName, | ||
// CreateTime, | ||
// } = msg | ||
// let retStr = | ||
// `<xml> | ||
// <ToUserName><![CDATA[${ToUserName}]]></ToUserName> | ||
// <FromUserName><![CDATA[${FromUserName}]]></FromUserName> | ||
// <CreateTime>${CreateTime}</CreateTime> | ||
// <MsgType><![CDATA[video]]></MsgType> | ||
// <Video> | ||
// <MediaId><![CDATA[${MediaId}]]></MediaId> | ||
// <Title><![CDATA[${Title}]]></Title> | ||
// <Description><![CDATA[${Description}]]></Description> | ||
// </Video> | ||
// </xml>` | ||
// return retStr | ||
// } | ||
var _newsItemTpl2 = _interopRequireDefault(_newsItemTpl); | ||
var newsTpl = ''; | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
var newsTpl = function newsTpl(msg) { | ||
var ToUserName = msg.to; | ||
var FromUserName = msg.from; | ||
var CreateTime = msg.ts; | ||
var articles = msg.articles; | ||
// get head | ||
var head = "<xml>\n<ToUserName><![CDATA[" + ToUserName + "]]></ToUserName>\n<FromUserName><![CDATA[" + FromUserName + "]]></FromUserName>\n<CreateTime>" + CreateTime + "</CreateTime>\n<MsgType><![CDATA[news]]></MsgType>\n<ArticleCount>" + articles.length + "</ArticleCount>\n<Articles>"; | ||
// get body | ||
var items = []; | ||
articles.forEach(function (article) { | ||
var _article$title = article.title; | ||
var title = _article$title === undefined ? "" : _article$title; | ||
var _article$desc = article.desc; | ||
var desc = _article$desc === undefined ? "" : _article$desc; | ||
var _article$picUrl = article.picUrl; | ||
var picUrl = _article$picUrl === undefined ? "" : _article$picUrl; | ||
var _article$url = article.url; | ||
var url = _article$url === undefined ? "" : _article$url; | ||
items.push((0, _newsItemTpl2.default)(article)); | ||
}); | ||
var body = items.join('\n'); | ||
// get foot | ||
var foot = "</Articles>\n</xml>"; | ||
return [head, body, foot].join('\n'); | ||
}; | ||
exports.default = newsTpl; |
@@ -1,2 +0,2 @@ | ||
"use strict"; | ||
'use strict'; | ||
@@ -7,8 +7,9 @@ Object.defineProperty(exports, "__esModule", { | ||
var textTpl = function textTpl(msg) { | ||
var ToUserName = msg.ToUserName; | ||
var FromUserName = msg.FromUserName; | ||
var CreateTime = msg.CreateTime; | ||
var Content = msg.Content; | ||
var ToUserName = msg.to; | ||
var FromUserName = msg.from; | ||
var CreateTime = msg.ts; | ||
var Content = msg.content; | ||
var retStr = "<xml>\n\t<ToUserName><![CDATA[" + ToUserName + "]]></ToUserName>\n\t<FromUserName><![CDATA[" + FromUserName + "]]></FromUserName>\n\t<CreateTime>" + CreateTime + "</CreateTime>\n\t<MsgType><![CDATA[text]]></MsgType>\n\t<Content><![CDATA[" + Content + "]]></Content>\n\t</xml>"; | ||
if (!ToUserName || !FromUserName || !CreateTime || !Content) return ''; | ||
var retStr = '<xml>\n<ToUserName><![CDATA[' + ToUserName + ']]></ToUserName>\n<FromUserName><![CDATA[' + FromUserName + ']]></FromUserName>\n<CreateTime>' + CreateTime + '</CreateTime>\n<MsgType><![CDATA[text]]></MsgType>\n<Content><![CDATA[' + Content + ']]></Content>\n</xml>'; | ||
return retStr; | ||
@@ -15,0 +16,0 @@ }; |
@@ -7,8 +7,8 @@ "use strict"; | ||
var videoTpl = function videoTpl(msg) { | ||
var ToUserName = msg.ToUserName; | ||
var FromUserName = msg.FromUserName; | ||
var CreateTime = msg.CreateTime; | ||
var MediaId = msg.MediaId; | ||
var Title = msg.Title; | ||
var Description = msg.Description; | ||
var ToUserName = msg.to; | ||
var FromUserName = msg.from; | ||
var CreateTime = msg.ts; | ||
var MediaId = msg.mediaId; | ||
var Title = msg.title; | ||
var Description = msg.desc; | ||
@@ -15,0 +15,0 @@ var retStr = "<xml>\n\t<ToUserName><![CDATA[" + ToUserName + "]]></ToUserName>\n\t<FromUserName><![CDATA[" + FromUserName + "]]></FromUserName>\n\t<CreateTime>" + CreateTime + "</CreateTime>\n\t<MsgType><![CDATA[video]]></MsgType>\n\t<Video>\n\t<MediaId><![CDATA[" + MediaId + "]]></MediaId>\n\t<Title><![CDATA[" + Title + "]]></Title>\n\t<Description><![CDATA[" + Description + "]]></Description>\n\t</Video> \n\t</xml>"; |
@@ -7,8 +7,8 @@ "use strict"; | ||
var voiceTpl = function voiceTpl(msg) { | ||
var ToUserName = msg.ToUserName; | ||
var FromUserName = msg.FromUserName; | ||
var CreateTime = msg.CreateTime; | ||
var MediaId = msg.MediaId; | ||
var ToUserName = msg.to; | ||
var FromUserName = msg.from; | ||
var CreateTime = msg.ts; | ||
var MediaId = msg.mediaId; | ||
var retStr = "<xml>\n\t<ToUserName><![CDATA[" + ToUserName + "]]></ToUserName>\n\t<FromUserName><![CDATA[" + FromUserName + "]]></FromUserName>\n\t<CreateTime>" + CreateTime + "</CreateTime>\n\t<MsgType><![CDATA[voice]]></MsgType>\n\t<Voice>\n\t<MediaId><![CDATA[" + MediaId + "]]></MediaId>\n\t</Voice>\n\t</xml>"; | ||
var retStr = "<xml>\n<ToUserName><![CDATA[" + ToUserName + "]]></ToUserName>\n<FromUserName><![CDATA[" + FromUserName + "]]></FromUserName>\n<CreateTime>" + CreateTime + "</CreateTime>\n<MsgType><![CDATA[voice]]></MsgType>\n<Voice>\n<MediaId><![CDATA[" + MediaId + "]]></MediaId>\n</Voice>\n</xml>"; | ||
return retStr; | ||
@@ -15,0 +15,0 @@ }; |
{ | ||
"name": "koa2wechat", | ||
"version": "1.0.1", | ||
"version": "1.0.2", | ||
"description": "simple wechat backend based on koa2", | ||
"main": "src/index.js", | ||
"main": "lib/index.js", | ||
"repository": { | ||
@@ -11,4 +11,4 @@ "type": "git", | ||
"scripts": { | ||
"server":"babel-node ./server.js", | ||
"compile":"babel src/ -d lib/ --source-map both", | ||
"server": "babel-node ./server.js", | ||
"compile": "babel src/ -d lib/ --source-map both", | ||
"test": "mocha --opts ./test/mocha.opts", | ||
@@ -34,2 +34,3 @@ "test-cov": "istanbul cover _mocha -- --opts ./test/mocha.opts" | ||
"babel-core": "^6.14.0", | ||
"babel-polyfill": "^6.13.0", | ||
"babel-preset-es2015": "^6.14.0", | ||
@@ -36,0 +37,0 @@ "babel-preset-stage-3": "^6.11.0", |
@@ -1,1 +0,1 @@ | ||
{"access_token":"FdfcYWsABXn0vgxpsGXTS95NB4Fk4UnFeYZ9rJpRf89Q3SlbdqyKT4aDvN0pLz9mQy_HVahxyj-nGSwClDrSS40CZeM-xU05XTmzYxGqoBsVJAcAFAJXO","expires_in":1473811415677} | ||
{"access_token":"HlxoBkrQIb34KdnzuEWwzay-Sty3QOzEwCBTjtVpJOoD9bTcYqkAkjnlC-tHTvZL-UHxsCR9y4jEmJS9zuETToBcJ7BegG-pwcQJe56f7YKj3tKbZQGrJyYYnXi8yp93QMLiAJABXW","expires_in":1473821800319} |
50822
41
1323
9