Comparing version 1.0.2 to 1.0.3
let config = { | ||
wechat:{ | ||
weconfig:{ | ||
local_token_path:__dirname + '/src/token.txt', | ||
appid:"your app id", | ||
secret:"your secret" | ||
secret:"your secret", | ||
token:"your token for encrypt" | ||
} | ||
} | ||
export const {wechat} = config | ||
export const {weconfig} = config | ||
export default config |
@@ -24,3 +24,3 @@ 'use strict'; | ||
var replyBuilder = new _index.ReplyBuilder(); | ||
var weReply = new _index.WeReply(); | ||
@@ -36,3 +36,3 @@ // 生成回复将会使用到的meta信息,包括 本机`from`, 目标`to`, 时间戳`ts`(时间戳非必选项) | ||
// 传入回复选项,生成相应的xml字符串 | ||
var rpl = replyBuilder.genXML(textRpl); | ||
var rpl = weReply.genXML(textRpl); | ||
// 把Promise 返回回去 | ||
@@ -39,0 +39,0 @@ return Promise.resolve(rpl); |
'use strict'; | ||
require('babel-polyfill'); | ||
Object.defineProperty(exports, "__esModule", { | ||
value: true | ||
}); | ||
exports.ReplyBuilder = exports.wLoader = exports.Wechat = undefined; | ||
exports.k2w = exports.WeReply = exports.WeHandler = exports.WeConnector = exports.Wechat = undefined; | ||
var _Loader = require('./wechat/Loader'); | ||
require('babel-polyfill'); | ||
var _Loader2 = _interopRequireDefault(_Loader); | ||
var _WeConnector = require('./wechat/WeConnector'); | ||
var _WeConnector2 = _interopRequireDefault(_WeConnector); | ||
var _Wechat = require('./wechat/Wechat'); | ||
@@ -16,15 +18,21 @@ | ||
var _Reply = require('./wechat/Reply'); | ||
var _WeReply = require('./wechat/WeReply'); | ||
var _Reply2 = _interopRequireDefault(_Reply); | ||
var _WeReply2 = _interopRequireDefault(_WeReply); | ||
var _WeHandler = require('./wechat/WeHandler'); | ||
var _WeHandler2 = _interopRequireDefault(_WeHandler); | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
exports.Wechat = _Wechat2.default; | ||
exports.wLoader = _Loader2.default; | ||
exports.ReplyBuilder = _Reply2.default; | ||
exports.default = { | ||
exports.WeConnector = _WeConnector2.default; | ||
exports.WeHandler = _WeHandler2.default; | ||
exports.WeReply = _WeReply2.default; | ||
var k2w = exports.k2w = { | ||
Wechat: _Wechat2.default, | ||
wLoader: _Loader2.default, | ||
ReplyBuilder: _Reply2.default | ||
WeConnector: _WeConnector2.default, | ||
WeHandler: _WeHandler2.default, | ||
WeReply: _WeReply2.default | ||
}; |
{ | ||
"name": "koa2wechat", | ||
"version": "1.0.2", | ||
"version": "1.0.3", | ||
"description": "simple wechat backend based on koa2", | ||
@@ -5,0 +5,0 @@ "main": "lib/index.js", |
@@ -20,10 +20,13 @@ #koa2wechat | ||
``` | ||
2.引入模块(默认导出{Wechat,wLoader,ReplyBuilder},下文详细介绍) | ||
2.引入模块(模块导出{Wechat,WeConnector,WeHandler,WeReply},下文详细介绍) | ||
```javascript | ||
import {wLoader} from 'koa2wechat' | ||
import Koa from 'koa2' | ||
// 这两个是koa2中间件 | ||
import {WeConnector,WeHandler} from './src/index' | ||
``` | ||
3.引入配置文件 | ||
```javascript | ||
import config from './config' | ||
import {weconfig} from './config' | ||
// 或者 import config from './config' | ||
// let weconfig = config.weconfig | ||
``` | ||
@@ -33,10 +36,11 @@ 配置文件示例:config.example.js | ||
let config = { | ||
wechat:{ | ||
local_token_path:__dirname + '/src/token.txt', | ||
appid:"your app id", | ||
secret:"your secret" | ||
} | ||
weconfig:{ | ||
local_token_path:__dirname + '/src/token.txt', | ||
appid:"your app id", | ||
secret:"your secret", | ||
token:"your token for encrypt" | ||
} | ||
} | ||
export const {wechat} = config | ||
export const {weconfig} = config | ||
export default config | ||
@@ -47,14 +51,19 @@ ``` | ||
const app = new Koa() | ||
app.use(wLoader(config.wechat,null)) | ||
app | ||
// WeConnector可以使用 用户自定义的token 接入微信平台 | ||
.use(WeConnector(weconfig.token)) | ||
// 接入后,WeHandler 处理用户请求 这里的参数是根据业务逻辑编写的代码,具体看下面的介绍 | ||
.use(WeHandler(null)) | ||
app.listen(3000) | ||
``` | ||
此时公众号会默认自动回复文本消息,若要自定义规则需要将上面的null替换为根据业务逻辑写出的handler | ||
至此,之用到了4个模块中的2个模块,实际{WeConnector,WeHandler}这两个模块是koa2中间件 | ||
剩下的{Wechat,WeReply}则是用于操作微信后台的工具类 | ||
5.根据业务逻辑自定义handler | ||
5.根据业务逻辑自定义handler,要特别注意的是,handler一定要返回一个Promise或者它是一个Promise | ||
例如:/src/handler/defaultHandler.js | ||
例如:/src/handler/defaultHandler.js | ||
```javascript | ||
import {ReplyBuilder} from 'koa2wechat' | ||
// ReplyBuilder是一个类,用于创建各类返回信息,生成对应的xml字符串 | ||
import {WeReply} from '../index' | ||
// WeReply 是一个类,用于创建各类返回信息,生成对应的xml字符串 | ||
const welcomeMsg = 'hello from koa2wechat' | ||
@@ -64,27 +73,29 @@ | ||
let defaultHandler = (xml)=>{ | ||
// 获取来源FromUserName,在回复信息中将其设置为目的地 `to` | ||
// 获取我们公众号的标识ToUserName,在回复信息中将其设置为发送地 `from` | ||
let {FromUserName,ToUserName} = xml | ||
// 获取来源FromUserName,在回复信息中将其设置为目的地 `to` | ||
// 获取我们公众号的标识ToUserName,在回复信息中将其设置为发送地 `from` | ||
let {FromUserName,ToUserName} = xml | ||
// 这里可以插入需要执行的业务逻辑代码,比如判断消息来源是谁,他回复了什么类型的数据之类的 | ||
// 这里可以插入需要执行的业务逻辑代码,比如判断消息来源是谁,他回复了什么类型的数据之类的 | ||
// 实例化builder | ||
let replyBuilder = new ReplyBuilder() | ||
// 实例化weReply | ||
let weReply = new WeReply() | ||
// 生成回复将会使用到的meta信息,包括 本机`from`, 目标`to`, 时间戳`ts`(时间戳非必选项) | ||
let meta = {from:ToUserName,to:FromUserName,ts:new Date().getTime()} | ||
// 回复文本类型的数据,要构造选项`type` 和 回复内容`content` 以及上面获取的 meta 信息 | ||
let textRpl = { | ||
meta:meta, | ||
type:"text", | ||
content:welcomeMsg | ||
} | ||
// 传入回复选项,生成相应的xml字符串 | ||
let rpl = replyBuilder.genXML(textRpl) | ||
// 把Promise 返回回去 | ||
return Promise.resolve(rpl) | ||
// 生成回复将会使用到的meta信息,包括 本机`from`, 目标`to`, 时间戳`ts`(时间戳非必选项) | ||
let meta = {from:ToUserName,to:FromUserName,ts:new Date().getTime()} | ||
// 回复文本类型的数据,要构造选项`type` 和 回复内容`content` 以及上面获取的 meta 信息 | ||
// 更多类型的数据在下面会提供 | ||
let textRpl = { | ||
meta:meta, | ||
type:"text", | ||
content:welcomeMsg | ||
} | ||
// 传入回复选项,生成相应的xml字符串 | ||
let rpl = weReply.genXML(textRpl) | ||
// 把Promise 返回回去 | ||
return Promise.resolve(rpl) | ||
} | ||
export default defaultHandler | ||
``` | ||
@@ -125,6 +136,8 @@ 推荐方式 | ||
if(!MsgType) return | ||
// more about MsgType: http://mp.weixin.qq.com/wiki/17/f298879f8fb29ab98b2f2971d42552fd.html | ||
switch(MsgType){ | ||
// 下面定义了客户端可能的几种请求(应该是全部包含了的) | ||
// 订阅的时候会触发'event' | ||
case 'event': | ||
// 客户端发送文字/图片/语音/视频/小视频/地址/链接时,MsgType的相应值,可以参考 | ||
// http://mp.weixin.qq.com/wiki/17/f298879f8fb29ab98b2f2971d42552fd.html | ||
case 'text': | ||
@@ -146,2 +159,9 @@ case 'image': | ||
然后再将handler引入,将第4步中的null替换为handler即可 | ||
其实,到这里为止,我们一直没有用到Wechat对象,是因为,微信公众号有不同的类型 | ||
参考:[官方文档](http://mp.weixin.qq.com/wiki/7/2d301d4b757dedc333b9a9854b457b47.html) | ||
(未认证订阅号 微信认证订阅号 未认证服务号 微信认证服务号) | ||
不同类型的号,有不同的权限,譬如对素材的管理,用户的管理,等等。 | ||
所有的操作都涉及到access_token,而Wechat类的核心就是要维护access_token, | ||
现在的Wechat类,只简单实现了对access_token的维护, | ||
因此有需要的开发者可以自行实现在这个基础之上,自己需要的功能,譬如素材上传,对象分组等等。 | ||
@@ -202,2 +222,2 @@ 6.示例程序在这里: | ||
└── templates.js(template测试/未完成) | ||
``` | ||
``` |
import Koa from 'koa' | ||
import config from './config' | ||
import {wLoader} from './src/index' | ||
// middle ware | ||
import {WeConnector,WeHandler} from './src/index' | ||
// util class | ||
import {Wechat,WeReply} from './src/index' | ||
import {weconfig} from './config' | ||
const app = new Koa() | ||
const wechat = new Wechat(weconfig) | ||
app.use(wLoader(config.wechat,null)) | ||
app | ||
// connect and reply | ||
.use(WeConnector(weconfig.token)) | ||
// handle and gen response xml string | ||
.use(WeHandler(null)) | ||
app.listen(3000) | ||
app.listen(3000,()=>{ | ||
console.log('Listening on port 3000') | ||
}) |
@@ -1,2 +0,2 @@ | ||
import {ReplyBuilder} from '../index' | ||
import {WeReply} from '../index' | ||
// ReplyBuilder是一个类,用于创建各类返回信息,生成对应的xml字符串 | ||
@@ -15,3 +15,3 @@ const welcomeMsg = 'hello from koa2wechat' | ||
// 实例化builder | ||
let replyBuilder = new ReplyBuilder() | ||
let weReply = new WeReply() | ||
@@ -27,3 +27,3 @@ // 生成回复将会使用到的meta信息,包括 本机`from`, 目标`to`, 时间戳`ts`(时间戳非必选项) | ||
// 传入回复选项,生成相应的xml字符串 | ||
let rpl = replyBuilder.genXML(textRpl) | ||
let rpl = weReply.genXML(textRpl) | ||
// 把Promise 返回回去 | ||
@@ -30,0 +30,0 @@ return Promise.resolve(rpl) |
@@ -1,11 +0,14 @@ | ||
import wLoader from './wechat/Loader' | ||
import 'babel-polyfill' | ||
import WeConnector from './wechat/WeConnector' | ||
import Wechat from './wechat/Wechat' | ||
import ReplyBuilder from './wechat/Reply' | ||
import WeReply from './wechat/WeReply' | ||
import WeHandler from './wechat/WeHandler' | ||
export {Wechat,wLoader,ReplyBuilder} | ||
export {Wechat,WeConnector,WeHandler,WeReply} | ||
export default { | ||
export let k2w = { | ||
Wechat:Wechat, | ||
wLoader:wLoader, | ||
ReplyBuilder:ReplyBuilder | ||
WeConnector:WeConnector, | ||
WeHandler:WeHandler, | ||
WeReply:WeReply | ||
} |
65477
46
1712
217