一個基於koa2的微信開發中介軟體koa-easywechat,開箱即用

king121456發表於2019-03-03

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物件上掛載了兩個物件wechatmessage

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

先到這裡。。。。。。

未來還會實現更多的功能

相關文章