UNPKG

t-comm

Version:

专业、稳定、纯粹的工具库

107 lines (106 loc) 3.81 kB
/** * qq-wxmini-plugin 微信小程序插件封装 * * 背景:QQ 用户无法直接打开微信小程序,但微信提供了 qq-wxmini-plugin 插件, * 让 QQ 用户能够以 QQ 身份访问微信小程序。本文件封装插件初始化与环境检测。 * * 使用前置条件: * 1. 在微信公众平台后台添加 qq-wxmini-plugin 插件授权 * 2. 在 manifest.json / app.json 的 plugins 节点声明: * { * "qq-wxmini-plugin": { * "version": "1.0.7", * "provider": "wx41f6784ad4052201" * } * } */ /** * QQ 插件接口(最小可用子集) */ export interface QQWXMiniPlugin { /** 初始化插件(必须先调用) */ initPlugin(wx: any): void; /** 判断当前是否为 QQ 环境(QQ 用户通过插件访问微信小程序) */ isQQEnv(): boolean; /** * QQ 环境下直接拿 QQ 登录 code(无需跳腾讯 QQ 小程序) * * 文档:https://doc.weixin.qq.com/doc/w3_ANAAAgaEACcCN60gP1LZiRDujSMor */ login?(): Promise<{ code: string; }>; [key: string]: any; } /** * 加载并初始化 qq-wxmini-plugin * * 内部带缓存,重复调用安全。 * * @returns 插件实例;非微信小程序环境或未安装插件时返回 undefined */ export declare function initQQMiniPlugin(): QQWXMiniPlugin | undefined; /** * 获取插件实例(不重复初始化时使用) */ export declare function getQQWXMiniPlugin(): QQWXMiniPlugin | undefined; /** * 检测当前是否为 QQ 环境(QQ 用户通过 qq-wxmini-plugin 访问微信小程序) * * 注意:必须先调用 initQQMiniPlugin(本函数内部会兜底调用)。 * * @returns true 表示 QQ 环境;非微信小程序环境或插件未安装时返回 false */ export declare function checkIsQQEnv(): boolean; /** * QQ 环境下若检测到微信登录态则清除 storage * * 由调用方提供「当前是否为微信登录态」的判断函数, * 以避免本工具与具体 cookie/storage 字段耦合。 * * 典型用法: * ```ts * clearWxLoginStorageIfQQEnv({ * isWxLoggedIn: () => cookie.get('tip_utype') === '2', * }); * ``` * * @param options.isWxLoggedIn 判断当前是否为微信登录态(必填) * @param options.clearStorage 自定义清除函数,默认 wx.clearStorageSync * @param options.shouldForceQQ 是否强制 QQ 登录态(即在 QQ 环境下 * 一旦检测到微信登录态就清掉 storage 让用户重走 QQ 登录)。 * * 默认 `() => true`(保留旧行为)。 * * 若业务希望「QQ App 下也允许用户手动用微信账号登录」,请传入 `() => false`, * 或基于业务自身的「用户是否手动切到微信账号」状态返回值。 */ export declare function clearWxLoginStorageIfQQEnv(options: { isWxLoggedIn: () => boolean; clearStorage?: () => void; shouldForceQQ?: () => boolean; }): boolean; /** * QQ 环境下直接通过 qq-wxmini-plugin 拿 QQ 登录 code * * 适用场景:用户已在 QQ App 中(即 `checkIsQQEnv() === true`), * 此时无需 `wx.navigateToMiniProgram` 跳腾讯 QQ 小程序, * 可直接调用插件的 `plugin.login()` 同步拿到 QQ code, * 再交给业务后台用 `_ltype=tiploginqqproc` 换登录态。 * * @returns code 字符串;插件不可用或登录失败时 reject */ export declare function qqPluginLogin(): Promise<{ code: string; }>; /** * 通过 wx.login 拿微信登录 code * * 适用场景:微信宿主下走微信登录,或 QQ App 下用户主动选择「微信账号登录」时。 * 拿到 code 后由业务后台用 `_ltype=tiploginwxproc` 换登录态。 * * @returns code 字符串;wx.login 不可用或失败时 reject */ export declare function wxLogin(): Promise<{ code: string; }>;