# PC 小程序插件接入指南 Beta
# 一、功能介绍
PC 小程序插件,是微信团队开发的支持外部桌面应用运行微信小程序的能力。用户不需安装或登录 PC 微信客户端,即可在开发者的桌面应用内通过微信身份登录直接唤起小程序。当前仅支持 64 位 Windows 版本。
QQ 桌面端运行 PC 小程序的体验
# 二、准备工作
- 申请开通「PC 小程序插件」能力:开发者需前往 微信开发者平台 绑定网站应用后,前往「网站应用 - 开放能力 - PC 小程序插件」申请开通此能力,详细操作步骤可查看 申请 PC 小程序插件。
- 开发环境要求:Windows 操作系统,且已安装 PC 小程序插件版,拥有有效的网站应用 AppID 和 AppSecret。
# 三、名词解释
- 宿主应用:要接入 OpenSDK 和 PC 小程序插件的微信外桌面应用。
- OpenSDK:本文用到的 OpenSDK 特指「网站应用 OpenSDK」。
- PC 小程序插件:为用户提供在宿主应用中使用 PC 小程序的能力。
# 四、初始化
首先通过文末的链接下载最新版 PC 小程序插件压缩包。先校验 md5,再解压。注意:压缩包仅包含「PC 小程序插件」,不包含「网站应用 OpenSDK」,请自行接入。
开发阶段主要关注 include、proto、host 目录中文件:
- 动态库:
wmpf_host_export_x64.dll - protobuf 定义:
wmpf_host.proto - 头文件:
wmpf_host_interface.h
初始化主要步骤:
- 调用
LoadLibrary()加载wmpf_host_export_x64.dll - 调用
GetProcAddress(),获取函数指针 - 调用
GetBrowsingService,获得IBrowsingService实例 - 调用
IBrowsingService::InitilizeBrowsingCore初始化 - 获得
IAppletManagerV3(打开/关闭小程序) - 获得
IILinkAuthManager(登录态管理)
# 五、鉴权
你的应用需要接入 网站应用 OpenSDK,以便向用户申请「使用小程序」的授权。
# 1. OpenSDK 授权
通常,你的应用接入 网站应用 OpenSDK 以便实现「微信授权登录」,所需权限(scope)是 snsapi_login。为了使用小程序插件,需额外申请 snsapi_runtime_pcsdk。
如同时申请多个权限,以英文半角逗号分割,例如:snsapi_login,snsapi_runtime_pcsdk。
# 2. 后台调用 /sns/pcsdk/login
POST https://api.weixin.qq.com/sns/pcsdk/login?access_token=ACCESS_TOKEN
返回 login_buffer 后下发给客户端。
# 3. 客户端调用 IILinkAuthManager::ThirdAppLogin 完成授权
# 4. 检查登录态
每次进程冷启动后,首先调用 IILinkAuthManager::GetUserInfo():
| IlinkLoginStatus | 说明 |
|---|---|
| kIlinkLoginSuccess | 登录成功,可直接打开小程序 |
| kIlinkRequireManualLogin | 无登录态,需重新获取 login_buffer |
| kIlinkRequireAutoLogin | 需调用 AutoLogin() 确认 |
# 5. 监听 SetSessionTimeoutCallback 处理登录态过期
# 六、打开小程序(小游戏)
前置条件:开通 安全鉴权模式,配置 AES256_GCM 密钥。加密流程需在后台进行。
# 1. 加密启动参数(Node.js 示例)
const crypto = require("crypto");
function encode(req, _appid, aes_key) {
const timestamp = Math.floor(Date.now() / 1000);
const nonce = crypto.randomBytes(16).toString("base64").replace(/=/g, "");
const reqex = { _n: nonce, _appid, _timestamp: timestamp };
const real_req = Object.assign({}, reqex, req);
const plaintext = JSON.stringify(real_req);
const aad = `jm_76zerw3f0fxs|${_appid}|${timestamp}|${aes_key.Sn}`;
const real_key = Buffer.from(aes_key.Key, "base64");
const real_iv = crypto.randomBytes(12);
const real_aad = Buffer.from(aad, "utf-8");
const real_plaintext = Buffer.from(plaintext, "utf-8");
const cipher = crypto.createCipheriv("aes-256-gcm", real_key, real_iv);
cipher.setAAD(real_aad);
const real_ciphertext = Buffer.concat([cipher.update(real_plaintext), cipher.final()]);
const real_authTag = cipher.getAuthTag();
return {
iv: real_iv.toString("base64"),
data: real_ciphertext.toString("base64"),
authtag: real_authTag.toString("base64"),
timestamp,
};
}
# 2. 启动小程序
调用 IAppletManagerV3::LaunchApplet(),传入加密参数构建 LaunchConfig protobuf。
# 七、问题与反馈
可前往 PC 小程序社区专区 咨询。