t-comm
Version:
专业、稳定、纯粹的工具库
107 lines (106 loc) • 3.81 kB
TypeScript
/**
* 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;
}>;