通用微信SDK

v1.0.1发布于:2024-03-16 17:24

说明文档
回复列表 (0)

介绍

通用的微信服务端开发 SDK,基于node-easywechat封装, 用于快速开发微信服务端应用,使用方式可以参考node-easywechat文档。

重写了该插件的缓存,使其继承 cool-admin 的缓存。

标识

调用插件的时候需要用到标识,标识是唯一的,不能重复,建议使用英文,不要使用中文,对应插件 plugin.json 中的 key 字段

  • 标识:wx

配置

以公众号为例,其它配置参考node-easywechat 文档

{
  "OfficialAccount": {
    "app_id": "公众号的 app key",
    "secret": "公众号的 app secret",
    "token": "公众号的 token",
    "aes_key": "EncodingAESKey",
    "oauth": {
      "scope": "网页授权类型 如:snsapi_userinfo",
      "redirect": "网页授权回调地址,完整的URL"
    },
    "use_stable_access_token": true
  }
}

小程序,其他以此类推

{
  "MiniApp": {
    "app_id": "小程序的 app key",
    "secret": "小程序的 app secret"
  }
}

配置有

  • OfficialAccount:公众号
  • MiniApp:小程序
  • Pay:支付,不推荐
  • OpenPlatform:开放平台,如:app 登录
  • Work:企业微信
  • OpenWork:企业微信开放平台

配置参考node-easywechat 文档

方法

下面是插件提供的一些方法

  • OfficialAccount
   /**
   * 公众号
   * @param config
   * @returns
   */
  async OfficialAccount(config?)
  • MiniApp
   /**
   * 小程序
   * @param config
   * @returns
   */
  async MiniApp(config?)
  • Pay
   /**
   * 支付
   * @param config
   * @returns
   */
  async Pay(config?)
  • OpenPlatform
   /**
   * 开放平台
   * @param config
   * @returns
   */
  async OpenPlatform(config?)
  • Work
   /**
   * 企业微信
   * @param config
   * @returns
   */
  async Work(config?)
  • OpenWork
   /**
   * 企业微信开放平台
   * @param config
   * @returns
   */
  async OpenWork(config?)
  • createRequest
  /**
   * 创建请求
   * @param req Cool Admin中可以传入 this.ctx.req
   * @returns
   */
  async createRequest(req: IncomingMessage) {
    return await ServerRequest.createFromIncomingMessage(req);
  }

调用示例

  • 常用
@Inject()
pluginService: PluginService;

// 获取插件实例
const instance = await this.pluginService.getInstance('wx');

// 获得公众号实例
const OfficialAccount = await instance.OfficialAccount();

// 获取公众号的 access token
const token = await OfficialAccount.getAccessToken();
console.log('token', await token.getToken());

  • 根据公众号回调处理消息

Controller

import { CoolController, BaseController } from "@cool-midway/core";
import { All, Inject, Query } from "@midwayjs/core";
import { Context } from "koa";
import { DemoMpService } from "../../service/mp";

/**
 * 微信公众号
 */
@CoolController()
export class DemoMpController extends BaseController {
  @Inject()
  ctx: Context;

  @Inject()
  demoMpService: DemoMpService;

  // 注意需要开放这个接口,不能有权限校验
  @All("/callback", { summary: "消息回调" })
  async callback(@Query("label") label: string) {
    const response = await this.demoMpService.callback(label, this.ctx);
    this.ctx.type = response.getHeader("content-type");
    this.ctx.body = response.getBody();
  }
}

Service

import { Inject, Provide } from "@midwayjs/decorator";
import { BaseService } from "@cool-midway/core";
import { Context } from "koa";
import { PluginService } from "../../plugin/service/info";

/**
 * 公众号
 */
@Provide()
export class DemoMpService extends BaseService {
  @Inject()
  pluginService: PluginService;

  /**
   * 回调
   * @param label 标签
   * @param ctx 请求上下文
   */
  async callback(label: string, ctx: Context) {
    const server = await this.getServer(ctx);
    server.with(async (message) => {
      if (message.MsgType == "text") {
        console.log("message", message);
        return "你好";
      }
    });
    return server.serve();
  }

  /**
   * 获得服务
   * @param ctx
   */
  async getServer(ctx: Context) {
    // 获取插件实例
    const instance = await this.pluginService.getInstance("wx");
    // 获得公众号实例
    const app = await instance.OfficialAccount();

    // 创建请求
    const request = await instance.createRequest(ctx.req);
    app.setRequest(request);

    // 获得服务
    const server = app.getServer();
    return server;
  }
}

更新日志

  • v1.0.1 (2024-07-03)

    • 新增 createRequest 创建请求方法
    • 新增处理微信公众号消息的示例
  • v1.0.0 (2024-03-16)

    • 初始版本