GitHub地址,歡迎大家star
koa-easywechat
koa-easywechat是一個微信公眾號開發中介軟體.
由於使用的是koa2,非同步開發使用async/await的寫法,所以請保證你的node版本>=7.6
安裝
$ npm install koa-easywechat -S
複製程式碼
API
快速開始
注意:koa-easywechat中介軟體要寫在最前面,也就是要第一個use,因為我在ctx上掛載了一個wechat物件,這個物件實現了大部分的微信介面,這樣才能保證開發者在自己的寫路由裡,獲取到ctx.wechat進行自己的業務開發
var Koa=require("koa");
var WeChat=require("koa-easywechat");
var app=new Koa();
app.use(WeChat({
appID:"",
appsecret:"",
token:"",
isSafeModel:false,
encodingAESKey:""
},async function (next){
this.reply={
type:"text",
content:"回覆一段文字吧"
}
}
}));
app.listen(3000,()=>{
console.log("server is running")
});
複製程式碼
上面這段程式碼用於回覆一段文字
WeChat(config , replyHandler);
config【Object】
- appID【String】 : 第三方使用者唯一憑證
- appsecret【String】: 第三方使用者唯一憑證金鑰
- token【String】: 令牌用於驗證,用於驗證請求是否來自微信伺服器
- isSafeModel【Boolean】: 訊息加解密方式,值為true時,使用安全模式,值為false時,使用明文模式,當不配置的時候,預設值為false
- encodingAESKey【string】:訊息加解密金鑰,當config.isSafeModel=true時,必須配置encodingAESKey
replyHandler:是一個async函式,用於開發者自己實現自動回覆業務邏輯
async replyHandler(next){
var message=this.message;
var wechat=this.wechat;
this.reply={
type:"text",
content:"回覆一段文字吧"
}
}
複製程式碼
如果沒有回覆的業務邏輯,可以呼叫next()將控制權交給之後的中介軟體處理
async replyHandler(next){
await next();
}
複製程式碼
在這個函式裡,this就是koa框架中的上下文(ctx)的引用,我在ctx物件上掛載了兩個物件wechat和message
1、message 物件封裝了微信發來的【普通訊息】和【事件推送訊息】,若要檢視message物件的詳細資訊,請點選 這裡message物件
2、this.reply 物件是將要回復的內容,這個物件的屬性要嚴格按照要求書寫,具體規則在這裡回覆物件
3、wechat 物件是這個中介軟體中最核心的,實現了大部分的功能
現在已經實現的介面有:
wechat.getAccessToken
功能:獲取accessToken。因為呼叫accessToken的介面每天的呼叫頻率是有上限的,不能頻繁呼叫,所以這裡實現了accessToken的自管理,開發者不必關心accessToken是否過期,過期之後會自動去微信伺服器請求並更新最新的accessToken。
var wechat=ctx.wechat;
var token=await ctx.getAccessToken();
複製程式碼
wechat.getJsApiTicket()
功能:獲取jsapi_ticketj,sapi_ticket是公眾號用於呼叫微信JS介面的臨時票據。jsapi_ticket與token類似,在微信網頁開發中需要用到,也需要全域性快取。
var wechat=ctx.wechat;
var jsApiTicket=await ctx.getJsApiTicket();
複製程式碼
wechat.uploadTemporaryMaterial(type,filePath)
功能:上傳臨時素材
引數
屬性 | 型別 | 說明 |
---|---|---|
type | String | 支援的值有image, voice, video, thumb |
filePath | String | 多媒體檔案的路徑 |
返回值(json)
屬性 | 說明 |
---|---|
type | 媒體檔案型別,分別有圖片(image)、語音(voice)、視訊(video)和縮圖(thumb,主要用於視訊與音樂格式的縮圖) |
media_id | 媒體檔案上傳後,獲取標識 |
created_at | 媒體檔案上傳時間戳 |
var wechat=ctx.wechat;
var media=await ctx.uploadTemporaryMaterial("image","檔案的路徑");
複製程式碼
wechat.createMenu(menuObj)
功能:建立自定義選單
引數:
屬性 | 型別 | 說明 |
---|---|---|
menuObj | Object | 選單物件,格式要符合規定的格式 |
var menu = {
button: [
{
type: "click",
name: "今日歌曲",
key: "V1001_TODAY_MUSIC"
},
{
name: "選單",
sub_button: [
{
type: "view",
name: "搜尋",
url: "http://www.soso.com/"
},
{
type: "click",
name: "贊一下我們",
key: "V1001_GOOD"
}]
}]
};
var wechat=ctx.wechat;
await wechat.createMenu(menu);
複製程式碼
wechat.getMenu()
功能:獲取json格式的自定義選單
var wechat=ctx.wechat;
var menu=await wechat.getMenu();
複製程式碼
wechat.deleteMenu()
功能:刪除自定義選單
var wechat=ctx.wechat;
var menu=await wechat.deleteMenu();
複製程式碼
先到這裡。。。。。。
未來還會實現更多的功能