博客 / 詳情

返回

CabloyJS一站式助力微信、企業微信、釘釘開發 - 微信篇

前言

現在軟件開發不僅要面對前端碎片化,還要面對後端碎片化。針對前端碎片化,CabloyJS提供了pc=mobile+pad的跨端自適應方案,參見:自適應佈局:pc = mobile + pad

在這裏,咱們重點要解決的是後端碎片化。比如要開發一個業務系統,既需要與微信、企業微信整合,又需要與釘釘整合,該如何設計整個架構呢?

其實,不論是微信、企業微信,還是釘釘,面向實際業務層面的API都不復雜,複雜的是各自獨立的賬號體系如何與業務系統打通的問題。當賬號接口對接完成,後續的業務開發就很順暢了

CabloyJS設計了一套用户系統身份認證系統完全分離的機制,從而可以實現一個用户可以綁定多種登錄方式。而且,這些不同的登錄方式都是通過Provider的組件方式動態插入系統的。所以,剩下的工作就是按照Provider的方式來分別對接微信、企業微信和釘釘了

相關文章參考

  • Cabloy-通用的身份認證機制
  • Cabloy-微信
  • Cabloy-企業微信
  • Cabloy-釘釘

Cabloy-微信是什麼

Cabloy-微信是基於CabloyJS全棧業務開發框架開發的微信接口模塊,當前整合了微信公眾號微信Web登錄微信小程序的接口,達到開箱即用的使用效果。在Cabloy-微信的基礎上,可以很方便的開發各類微信業務系統

核心目標

微信開發最複雜的就是賬號體系對接,比如:

  1. 消息推送系統中,對新用户進行註冊
  2. 通過網頁登錄,對新用户進行註冊
  3. 通過微信小程序登錄,對新用户進行註冊
  4. 如果啓用微信開放平台,如何通過unionid關聯同一用户
  5. 如果系統已經運行一段時間,再啓用unionid機制,如果關聯舊賬號

一旦完成了這些場景下的賬號體系對接,真正的業務開發就很簡單了

因此,Cabloy-微信模塊的核心目標,就是自動完成這些場景下的賬號體系對接,我們所需要做的就是提供一些配置參數,然後就可以愉快的開啓業務邏輯的開發了

特性

基於CabloyJS全棧框架提供的便利性和靈活性,Cabloy-微信主要有如下特性:

1. 一站式整合

當前整合了微信公眾號微信Web登錄微信小程序的接口,具體如下:

場景 名稱 説明
微信公眾號 消息推送系統 自動完成接口對接,並自動進行用户註冊
微信公眾號 網頁登錄 自動跳轉微信登錄,並自動進行用户註冊
微信公眾號 網頁JSSDK 自動注入JSSDK,並自動完成配置
微信Web登錄 只需提供appID和appSecret,即可自動完成登錄接口對接
微信小程序 客服系統 自動完成接口對接
微信小程序 後台登錄接口 自動完成接口對接,並自動進行用户註冊
微信小程序 前端SDK 提供SDK,便於微信小程序前端直接訪問CabloyJS後端API
微信開放平台 unionid 自動匹配賬户,自動聚斂

2. 開箱即用

只需配置好微信賬號參數,所有接口自動完成對接

3. 自動聚斂

我們知道,通過微信開放平台提供的unionid機制,可以為微信公眾號微信小程序提供同一身份。但是在實際場景中,往往先開發並部署了微信公眾號微信小程序。這時候,二者的用户賬户是獨立的。那麼當我們配置好了微信開放平台unionid機制後,以前獨立的用户賬户會自動進行合併。這種機制,我們稱之為自動聚斂

4. 多小程序支持

微信公眾號可以關聯多個微信小程序,因此,模塊也提供了多小程序支持。如果啓用了unionid機制,這些小程序同樣也可以實現統一身份的打通

5. 多租户/多站點支持

通過CabloyJS提供的多實例特性,可以實現多租户/多站點支持,比如為不同的企業提供微信服務。請參見:EggBornJS:多實例

新建CabloyJS項目

在進行後續模塊的安裝之前,您必須先創建一個CabloyJS項目

請務必參照文檔步驟配置MySQL數據庫連接參數、Redis連接參數

請參見:指南:快速開始

安裝微信模塊

安裝微信模塊a-wechat

$ npm i egg-born-module-a-wechat

安裝微信測試模塊(可選)

微信測試模塊用於演示如何在模塊a-wechat的基礎上進行具體的業務開發(同時包含微信小程序的demo程序)。有兩種方式來使用微信測試模塊

1. 安裝到node_modules

如果僅僅是預覽效果,可以直接安裝到{project}/node_modules

$ npm i egg-born-module-test-wechat

2. 安裝到src/module

可以將測試模塊安裝到{projecct}/src/module,然後在此模塊的基礎上進行自定義開發

$ mv {project}/node_modules/egg-born-module-test-wechat src/module/test-wechat

配置微信參數

直接在項目配置文件中配置微信公眾號Web微信登錄微信小程序的參數

src/backend/config/config.default.js

// modules
config.modules = {
  'a-wechat': {
    account: {
      // 微信公眾號
      public: {
        appID: 'wxf27f7550a33caaaa',
        appSecret: 'bbbb6a3addddbccccc200f973e91aaaa',
        token: 'CabloyJS',
        encodingAESKey: 'qHvLnaaaabufbbbbIbkRBcccctxUIBGddddCo5aeeee',
        message: {
          reply: {
            // 默認回覆
            default: 'You are welcome!',
            // 當關注公眾號時的回覆
            subscribe: 'You are subscribed!',
          },
        },
      },
      // web登錄
      web: {
        appID: '',
        appSecret: '',
      },
      // 微信小程序
      minis: {
        default: {
          appID: 'wx823df04764b9bbbb',
          appSecret: 'c2eaaaada3bbbbe4073cccc381bbdddd',
          token: 'CabloyJS',
          encodingAESKey: 'kakPaaaa48mbubbbbRe0w0ccccGbj1v0rWowctVdddd',
        },
      },
    },
  },
};
  • account.public: 微信公眾號
  • account.web: 支持微信登錄Web網站,需要事先通過微信開放平台申請網站應用,獲得appID和appSecret
  • account.minis: 支持多個微信小程序。為了實際開發上的便利,我們默認提供一個default小程序。如果需要開發其他微信小程序,直接在minis添加新的配置即可

運行

啓動後端服務

$ npm run dev:backend

啓動前端服務

$ npm run dev:front

nginx配置

由於微信應用一定要綁定域名。為了支持開發調試,可以有不同的策略。如果我們想在服務器上配置開發環境,然後通過nginx把前端服務和後端服務反向代理給前端,請參見:nginx配置

如何訪問系統

1. 進入後台管理頁面

  • 網址:http://yourdomain.com/
  • 用户名:root
  • 密碼:123456

2. 微信公眾號網頁

微信中或微信開發者工具中直接訪問首頁,系統會自動進行微信登錄

  • 首頁:http://yourdomain.com/

3. 微信Web登錄

瀏覽器中直接訪問首頁,登錄頁面會自動顯示微信登錄按鈕,點擊按鈕,即可顯示二微信,通過手機微信掃描,自動完成登錄

  • 首頁:http://yourdomain.com/

微信小程序開發

測試模塊test-wechat已經包含了一個微信小程序的demo程序,使用步驟如下:

  1. 微信開發者工具中直接導入demo程序,目錄路徑:{project}/src/module/test-wechat/front/demo/miniprogram
  2. 修改小程序中的appid,文件路徑:{project}/src/module/test-wechat/front/demo/miniprogram/project.config.json
  3. 修改初始化參數:

{project}/src/module/test-wechat/front/demo/miniprogram/app.js

// 初始化cabloy
const cabloyOptions = {
  base: {
    scene: 'default',
    locale: 'en-us',
  },
  api: {
    baseURL: 'http://yourdomain.com',
  },
};
this.cabloy = Cabloy(this, cabloyOptions);

默認對應的是default小程序,如果要開發其他小程序,只需修改如下參數

名稱 説明
base.scene 小程序場景名,默認為default
base.locale 前端默認使用的語言
api.baseURL 後端服務的API地址

相關鏈接

  • 官網: https://cabloy.com/
  • GitHub: https://github.com/zhennann/cabloy
user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.