# 桌面应用

「桌面应用」是网站应用的扩展功能，开发者可在已审核通过的网站应用基础上开通桌面应用能力，使桌面端应用（Windows/macOS）获得微信内网页拉起桌面应用的开放能力。

本文介绍桌面应用的开通流程、开发信息配置、开放能力申请、绑定关系管理，以及微信内网页拉起桌面应用的开发接入说明。

**操作路径**

- 前往「[微信开发者平台](https://developers.weixin.qq.com/platform/) - 我的业务 - 网站应用 - 基础信息 - 桌面应用」，即可开通和管理桌面应用

## 1、开通桌面应用

### 1.1 前置条件

- 网站应用必须已审核通过，才能开通桌面应用功能
- 如网站应用尚未创建或未通过审核，需先完成网站应用的创建和审核流程

### 1.2 申请表单

点击「开通」按钮后，进入桌面应用信息填写页面，需提供以下信息：

| 字段 | 是否必填 | 说明 |
| :--- | :---: | :--- |
| 桌面应用名称 | 是 | 2-40 字节，仅允许中文、字母、数字，空格只能出现在字母之间且不超过 1 个；半年内仅可修改 2 次 |
| 英文名称 | 否 | 仅允许字母和数字，2-40 字节 |
| 桌面应用简介 | 是 | 8-80 字节 |
| 英文简介 | 否 | 8-80 字节 |
| 应用官网 | 是 | 必须以 `http://` 或 `https://` 开头；需已完成 ICP 备案，备案主体需与开放平台主体一致或有授权关系 |
| 桌面应用水印图片 | 是 | 28×28 像素，PNG 格式，不超过 200KB |
| 桌面应用高清图片 | 是 | 108×108 像素，PNG 格式，不超过 200KB |
| 申请/修改应用说明 | 否 | 最多 200 字节，可补充审核所需的额外说明 |

注意：可能需要额外提交《营业执照》或《组织代码证》以及补充材料（最多 5 张）。

### 1.3 提交审核

填写完成后点击「提交」，预计 1-7 个工作日内完成审核。若应用中包含较复杂逻辑或其他情况，审核时间会延长。

**审核状态说明**

| 状态 | 说明 |
| :--- | :--- |
| 审核中 | 已提交申请，等待审核结果。审核中不可编辑基础信息 |
| 审核通过 | 已通过审核，可正常使用桌面应用相关能力 |
| 审核不通过 | 未通过审核，可根据驳回原因修改后重新提交 |

## 2、开发信息配置

桌面应用开通后，需配置对应平台的开发信息，支持 Windows 和 macOS 两个平台。

### 2.1 macOS 配置

| 字段 | 是否必填 | 说明 |
| :--- | :---: | :--- |
| Scheme | 是 | 用于微信回调拉起桌面应用的 URL Scheme（在 `Info.plist` 中通过 `CFBundleURLSchemes` 注册），最长 256 字节 |
| Bundle ID | 是 | macOS 应用的 Bundle Identifier，例如 `com.tencent.example`，最长 256 字节 |

### 2.2 Windows 配置

| 字段 | 是否必填 | 说明 |
| :--- | :---: | :--- |
| Scheme | 是 | 用于微信回调拉起桌面应用的 URL Scheme，例如 `weixin`,最长 256 字节 |
| 签名主体 | 是 | 主签名证书的 Subject(取自可执行文件代码签名证书)，用于身份校验，最长 256 字节 |
| 证书签名 | 是 | 主签名证书的指纹（Thumbprint），仅允许小写字母和数字，最长 256 字节 |
| 备用签名主体 | 否 | 备用签名证书 Subject，用于证书更换的过渡期，最长 256 字节 |
| 备用证书签名 | 否 | 备用签名证书指纹，仅允许小写字母和数字，与备用签名主体配套使用，最长 256 字节 |

- 补充说明：备用签名主要用于**证书过期更新的过渡期**。当线上 APP 仍使用主签名证书运行时，开发者可在后台填写新的备用签名主体/备用证书签名，使新旧证书同时生效，待全部用户升级到新版本后再用新证书替换主字段。命中主签名或备用签名任一组都视为合法。

**操作路径**

- 前往「[微信开发者平台](https://developers.weixin.qq.com/platform/) - 我的业务 - 网站应用 - 开发信息 - 桌面应用开发信息」，点击「操作」下拉菜单即可修改 Windows 或 macOS 的开发信息

## 3、开放能力

桌面应用开通并审核通过后，可使用以下开放能力：

| 能力 | 说明 | 前置条件 |
| :--- | :--- | :--- |
| 微信内网页拉起桌面应用 | 用户在微信 PC 端内置浏览器访问网页时可拉起桌面应用 | 开放平台已认证 + 桌面应用已开通且审核通过 + 已绑定已认证服务号 |

如需使用「微信内网页拉起桌面应用」能力，需同时满足以下条件：

1）开放平台账号已完成认证

2）桌面应用已开通

3）桌面应用已审核通过

4）已绑定已认证的服务号

满足以上全部条件后，可获得此能力。

## 4、绑定关系

### 4.1 绑定服务号

绑定服务号是使用「微信内网页拉起桌面应用」能力的前置条件。绑定后，可在该服务号的 JS 安全域名下的网页中拉起桌面应用。

**绑定条件**

1）服务号需已完成企业认证

2）服务号需已配置 JS 接口安全域名

3）服务号需与当前桌面应用绑定于同一开放平台账号下

**绑定操作**

- 前往「[微信开发者平台](https://developers.weixin.qq.com/platform/) - 我的业务 - 网站应用 - 绑定关系 - 服务号」，填写服务号 AppID 和 JS 安全域名后提交
- 绑定时需**服务号管理员扫码授权**确认

**解绑操作**

- 在已绑定的服务号列表中点击「删除」，确认后需**管理员扫码确认**方可完成解绑

## 5、微信内网页拉起桌面应用 - 开发接入

> 适用范围：微信 PC 端（Windows/macOS）内嵌浏览器场景下，H5 网页通过开放标签拉起本机已安装的桌面端 APP。
>
> 本节参考移动端 [《微信内网页跳转 APP 功能》](/doc/oplatform/Mobile_App/WeChat_H5_Launch_APP.md) 与 [《wx-open-launch-app 开放标签》](/doc/service/guide/h5/opentag.md) 编写，**仅描述 PC 端在能力实现、配置项、安全校验等方面与移动端的差异点**。未在本文中特别说明的内容（开通条件、前端 JS-SDK 注入、`wx-open-launch-app` 标签写法、`ready / launch / error` 事件、错误码语义等），均与移动端文档保持一致，请直接参考上述两份文档。

### 5.1 功能介绍

在 PC 端微信内置浏览器中访问网页时，部分场景下用户需要跳转到对应的桌面客户端使用完整服务。微信 PC 端复用移动端 `wx-open-launch-app` 开放标签的接入方式，提供「H5 拉起 PC APP」能力。

PC 端通过**本机自定义协议（URL Scheme）**唤起桌面 APP，因此对应用的「协议头注册」与「可执行文件签名」提出了额外要求。为防止恶意应用抢注同名协议头冒充目标 APP，PC 端会基于开发者在开放平台后台填写的签名信息（Windows 为代码签名证书的 Subject 与 Thumbprint，macOS 为 Bundle ID）做合法性校验，校验失败将无法拉起。

### 5.2 关联配置说明

PC 端复用与移动端相同的「服务号 — 域名 — 移动应用」绑定关系，只在此基础上增加了对桌面端拉起信息的额外配置。本节只描述 **PC 端独有**的配置项与校验逻辑，其余配置流程（认证条件、关联设置入口、域名绑定规则等）请参考移动端文档。

**桌面端 APP 信息配置**

开发者需在微信开放平台后台对应网站应用的管理页面中，补充填写「桌面端拉起信息」。所有字段均通过开放平台网页表单填写即可，无需额外接口调用。具体配置项详见上方第 2 节「开发信息配置」。

**关联关系校验**

每次拉起请求都会校验下列四组一致性，任何一项不匹配都会拒绝拉起：

1）发起页面所属的服务号，与开放平台关联设置中填写的服务号一致

2）网页 URL 的 host，与服务号「JS 接口安全域名」以及关联设置中绑定的域名完全一致

3）`wx-open-launch-app` 标签上的 `appid`，与关联设置中绑定的网站应用 AppID 一致

4）本机即将被拉起的目标 APP 的签名信息，与开放平台后台为该网站应用登记的桌面端配置一致：

- **Windows**：要求可执行文件的代码签名 Subject 与 Thumbprint 命中后台填写的「签名主体/证书签名」或「备用签名主体/备用证书签名」任一组
- **macOS**：要求 APP 的 Bundle ID 与后台填写的 Bundle ID 完全一致

其本质是确保「开放平台登记的 APP 身份」与「本机被拉起的 APP 身份」吻合，防止恶意应用抢注同名 Scheme 冒充目标 APP。

### 5.3 前端接入与拉起 URL 形态

前端接入方式（引入 `jweixin.js`、`wx.config` 申请 `openTagList: ['wx-open-launch-app']`、`wx-open-launch-app` 标签写法及 `appid`/`extinfo` 属性、`ready`/`launch`/`error` 事件监听等）与移动端完全一致，开发者无需为 PC 端编写额外代码，详见移动端文档。

PC 端最终通过开放平台后台配置的 Scheme 拉起本机程序，`extinfo` 会作为 query 参数附带过去，例如：

```
weixin://launch?appid=wxabcdefg1234567&extinfo=xxx
```

具体 query 字段以微信客户端最终实现为准，APP 侧需做好缺省字段兼容。

**拉起结果说明**

拉起请求发出后，可通过 `err_msg` 字段判断执行结果，目前支持以下返回值：

| err_msg | 说明 |
| :--- | :--- |
| `ok` | 拉起成功 |
| `check fail` | 校验失败 |
| `extinfo invalid` | `extinfo` 参数无效 |
| `unknown error` | 未知错误 |
| `server error` | 服务端报错，`resp` 直接返回错误 |
| `server error code:xxx` | 服务端报错，`resp` 含有效响应，后台返回具体业务错误码（`xxx` 为具体错误码） |

**服务端业务错误码说明**

当 `err_msg` 为 `server error code:xxx` 时，`xxx` 为后台返回的业务错误码，目前支持以下取值：

| 错误码 | 说明 |
| :---: | :--- |
| `10001` | 桌面应用未绑定服务号 |
| `10002` | H5 服务号与桌面应用绑定的服务号不匹配 |
| `10003` | H5 域名与服务号域名不匹配 |

**补充说明** 如果发现 wx config 之后没有渲染出开放标签按钮，则请检查是否已经满足全部的条件（可查看下方注意事项的内容）

### 5.4 参考文档

- [《微信内网页跳转 APP 功能》（移动端）](/doc/oplatform/Mobile_App/WeChat_H5_Launch_APP.md)
- [《wx-open-launch-app 开放标签使用说明》](/doc/service/guide/h5/opentag.md)

## 6、注意事项

1）桌面应用是网站应用的扩展功能，需先有审核通过的网站应用才能开通

2）桌面应用名称半年内仅可修改 2 次，请谨慎填写

3）审核中的桌面应用不可编辑基础信息，需等待审核结果后再操作

4）开发信息（Windows/macOS 配置）修改后即时生效，无需审核

5）如需使用「微信内网页拉起桌面应用」能力，需确保已绑定已认证的服务号，并完成 JS 安全域名配置

6）PC 端拉起桌面应用会进行签名校验，请确保本机安装的 APP 签名信息与开放平台后台配置一致，否则将无法拉起
