0.0.2 • Published 11 months ago

@pagoda-tools/qywx-node v0.0.2

Weekly downloads
-
License
-
Repository
-
Last release
11 months ago

@pagoda-tools/qywx-node

安装

yarn add @pagoda-tools/qywx-node

初始化

interface UserInfo {
  name: string;
  code: string;
}
export const qwMpSdk = new QwMpSdk<UserInfo>({
  // 配置企业应用相关信息
  appList: [
    {
      corpid: 'corpid',
      corpsecret: 'corpsecret',
    },
  ],
  // 数据加密时的 secret
  secret: 'secret',
  getUserInfo(authInfo) {
    // 此处能拿到企业微信授权成功之后的信息
    // { corpid: string; userid: number; sessionKey: string; }
    // 可以在这里自定义获取用户信息数据,返回的用户信息将会被存在 sesssion 或者 token 中
    return {
      code: 'code',
      name: 'name'
    }
  },
});

登录

// code 为客户端调用 wx.login 拿到的临时凭证
// 使用 jwt 鉴权
const data = await qwMpSdk.loginByJwt(code);
// 可将 token 返回客户端保存,请求时在请求头中携带 x-qwmp-token
console.log(data.token);
// 使用 session 鉴权
const data = await qwMpSdk.login(code);
// 可将 session 返回客户端保存,请求时在请求头中携带 x-qwmp-id: data.session.id, x-qwmp-skey: data.session.skey
console.log(data.session);

检验登录

可在中间件中检验登录状态,以下以 express 中间件为例

const middleware = (req, res, next) => {
  const { success, reason, tokenData } = await qwMpSdk.checkAuthByToken(
    req.headers,
  );

  if (!success) {
    res.json({
      code: -1,
      message: '登录失效,请重新登录'
    })
    return;
  }

  req.qwmpSession = tokenData!;

  next();
}

调用企微接口

skd做了以下处理:

  • 默认自动在请求前获取accessToken,并在请求query参数中携带
  • 调用企微接口返回accessToken过期时,会自动获取新的accessToken并重新发起一次请求
const data = await qwMpSdk.request({
  method: 'get',
  url: '/cgi-bin/user/get',
  params: {
    userid: 'xxxxxx',
  },
  // 需要从登录信息中拿到企业id
  corpid: req.qwmpSession.authInfo.corpid,
  // 如果当前接口不需要携带accessToken,可关闭
  // accessToken: false
});

配置项

interface QwMPSdkConfig<U> {
  /**
   * 小程序已绑定企业的企业id和应用secret
   *
   * @param corpid 企业 corpid
   *
   * 查看方式:登录企业微信管理后台-我的企业-企业信息-企业ID
   *
   * @param agentId 企业应用 id
   *
   * 查看方式:登录企业微信管理后台-应用管理-打开对应应用详情-查看AgentId
   *
   * @param corpsecret 企业应用 corpsecret
   *
   * 查看方式:登录企业微信管理后台-应用管理-打开对应应用详情-查看Secret
   */
  appList: AppInfo[];
  // 自定义处理 accessToken 过期时间,默认为企微返回的过期时间提前10分钟
  handleAccessTokenExpiresIn?(expiresIn: number): number;
  // 用来存储 accessToken 和 session 的 store,如果不配置,默认存储在内存中
  store?: {
    get(key: string): string;
    set(key: string, val: string, expiresIn: number): void;
    del(key: string): void;
  };
  // 自定义获取用户信息函数,如果不配置,则 session和token中不存储userInfo
  getUserInfo?(authData: AuthInfo): Promise<U>;
  // 自定义处理企业微信接口调用异常(errcode 不为 0时),默认为抛出 error
  onApiBusinessError?<T = QwMpBaseRes & Record<string, any>, D = any>(
    response: AxiosResponse<T, D>,
  ): void;
  /**
   * 用于 jsonwebtoken 的 secret
   */
  secret: Secret;
  /**
   * 登录态过期时间,默认 24 小时,单位:秒
   */
  maxAge?: number;
  /**
   * 是否开启调试日志,默认不开启
   */
  debugLog?: boolean;
}
0.0.2

11 months ago

0.0.1

1 year ago