一個基於koa2的微信開發中間件koa-easywechat,開箱即用

GitHub地址,歡迎你們starjavascript

koa-easywechat

koa-easywechat是一個微信公衆號開發中間件.java

因爲使用的是koa2,異步開發使用async/await的寫法,因此請保證你的node版本>=7.6node

安裝

$ npm install koa-easywechat -S
複製代碼

API

快速開始

注意:koa-easywechat中間件要寫在最前面,也就是要第一個use,由於我在ctx上掛載了一個wechat對象,這個對象實現了大部分的微信接口,這樣才能保證開發者在本身的寫路由裏,獲取到ctx.wechat進行本身的業務開發git

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")
});
複製代碼

上面這段代碼用於回覆一段文字github

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()將控制權交給以後的中間件處理shell

async replyHandler(next){
  await next();
}
複製代碼

在這個函數裏,this就是koa框架中的上下文(ctx)的引用,我在ctx對象上掛載了兩個對象wechatmessagenpm

一、message 對象封裝了微信發來的【普通消息】和【事件推送消息】,若要查看message對象的詳細信息,請點擊 這裏message對象

二、this.reply 對象是將要回復的內容,這個對象的屬性要嚴格按照要求書寫,具體規則在這裏回覆對象

三、wechat 對象是這個中間件中最核心的,實現了大部分的功能

如今已經實現的接口有:

wechat.getAccessToken

​ 功能:獲取accessToken。由於調用accessToken的接口天天的調用頻率是有上限的,不能頻繁調用,因此這裏實現了accessToken的自管理,開發者沒必要關心accessToken是否過時,過時以後會自動去微信服務器請求並更新最新的accessToken。json

var wechat=ctx.wechat;
var token=await ctx.getAccessToken();
複製代碼

wechat.getJsApiTicket()

​ 功能:獲取jsapi_ticketj,sapi_ticket是公衆號用於調用微信JS接口的臨時票據。jsapi_ticket與token相似,在微信網頁開發中須要用到,也須要全局緩存。api

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();
複製代碼

先到這裏。。。。。。

將來還會實現更多的功能

相關文章
相關標籤/搜索