Cool-Admin-Node
后台管理系统开发、Api接口开发
Cool-Admin-Node
后台管理系统开发、Api接口开发
Cool-Admin-Java
后台管理系统开发、Api接口开发
Cool-Admin-Vue
后台管理系统开发前端
Cool Uni
移动端基于 uni-app 的跨端开发框架
Cool Team(即将推出)
Ai多智能体团队协作完成任务
技术指导
提供专业的技术指导服务
定制开发
外包,承接各类软件开发
低价云服务器
特价、低价的云服务器
发布帖子
寻求帮助或分享知识
发布插件
分享您的插件
Cool-Admin-Node
Cool-Admin-Java
Cool-Admin-Vue
Cool Uni
Cool Team(即将推出)
技术指导
定制开发
低价云服务器
发布帖子
发布插件
通用微信SDK
通用的微信服务端开发 SDK,基于node-easywechat封装, 用于快速开发微信服务端应用,使用方式可以参考node-easywechat文档。
重写了该插件的缓存,使其继承 cool-admin 的缓存。
调用插件的时候需要用到标识,标识是唯一的,不能重复,建议使用英文,不要使用中文,对应插件 plugin.json
中的 key
字段
以公众号为例,其它配置参考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"
}
}
配置有
下面是插件提供的一些方法
/**
* 公众号
* @param config
* @returns
*/
async OfficialAccount(config?)
/**
* 小程序
* @param config
* @returns
*/
async MiniApp(config?)
/**
* 支付
* @param config
* @returns
*/
async Pay(config?)
/**
* 开放平台
* @param config
* @returns
*/
async OpenPlatform(config?)
/**
* 企业微信
* @param config
* @returns
*/
async Work(config?)
/**
* 企业微信开放平台
* @param config
* @returns
*/
async OpenWork(config?)
/**
* 创建请求
* @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)
v1.0.0 (2024-03-16)