更新记录
1.0.10(2026-11-02)
- 修复示例页面和辅助模块使用相对引入路径的问题,统一通过
@/uni_modules/引用插件内文件,复制页面到其他目录时无需另行复制辅助代码。 - 修复 Android 运行时
aapt2Link提示微信回调别名不是合法 Java 类名,以及随后找不到名称“R”的编译错误。 - 微信登录、分享和支付的两个回调别名统一在项目根
AndroidManifest.xml配置,保留插件内真实回调入口和图片分享 FileProvider;已有根清单配置可继续使用,未配置时请按 README 合并示例。 - 修改原生清单后需重新制作并安装 Android 自定义基座或重新打包应用;公开 API 与 iOS 实现不变。
1.0.9(2026-10-18)
- 修复 Android 1.0.8 升级后微信登录请求可以发起但回到应用后没有
success或fail回调的问题;恢复插件内置的WXEntryActivity与WXPayEntryActivity回调别名,登录、分享和支付回流可以进入同一入口。 - 需要重新制作并安装 Android 自定义基座或重新打包应用;如果项目根清单已手工声明同名微信回调入口,请合并为一组,避免重复声明。
1.0.8(2026-10-17)
- 修复 Android 在“选择哪个微信”的界面直接退出后,后续分享持续提示 9014111 的问题;返回应用且未收到微信结果时结束本次等待,允许再次分享,保留正常成功和取消回调。
- 修复 Android 运行和打包时的编译失败,以及随后出现的找不到名称“R”的问题。
- 补充 Android 微信回调入口配置示例;升级后请按 README 将配置合并到项目清单,原有 API 和调用方式保持不变。
- 需要重新制作并安装 Android 自定义基座或重新打包应用;iOS 原生内容未变,无需因本次升级重新制作 iOS 基座。
平台兼容性
uni-app(4.84)
| Vue2 | Vue3 | Chrome | Safari | app-vue | app-nvue | Android | iOS | 鸿蒙 |
|---|---|---|---|---|---|---|---|---|
| √ | √ | - | - | √ | √ | √ | √ | √ |
| 微信小程序 | 支付宝小程序 | 抖音小程序 | 百度小程序 | 快手小程序 | 京东小程序 | 鸿蒙元服务 | QQ小程序 | 飞书小程序 | 小红书小程序 | 快应用-华为 | 快应用-联盟 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| - | - | - | - | - | - | - | - | - | - | - | - |
uni-app x(4.84)
| Chrome | Safari | Android | iOS | 鸿蒙 | 微信小程序 |
|---|---|---|---|---|---|
| - | - | √ | √ | √ | - |
lizhao-wechat-kit
介绍
lizhao-wechat-kit 是面向 uni-app 与 uni-app x 的微信开放能力 UTS API 插件,用一套调用方式接入 Android/iOS 微信注册、登录、分享、支付、商家转账、打开小程序、客服和回流监听。
- 插件名:
lizhao-wechat-kit - 插件类型:UTS API 插件
- 调用环境:
uni-app/uni-app x - 导入路径:
@/uni_modules/lizhao-wechat-kit
功能特色
| 功能 | 能力与说明 |
|---|---|
| 统一API | 统一公开 API:业务代码只调用 register / login / share / pay 等统一名称,不需要判断 registerByAndroid 或 registerByIos。 |
| 微信常见业务 | 覆盖常见微信业务:支持授权登录、文本/图片/网页/小程序分享、支付、商家转账确认、打开小程序、打开客服和微信回流监听。 |
| 真实SDK状态 | 真实能力状态:注册结果、微信安装状态和 API 支持状态来自微信 SDK,不用静态值伪造成功。 |
| 一致回调 | 完整回调契约:异步 API 支持 success / fail / complete,Android 与 iOS 使用一致的业务回调语义。 |
| 明确错误边界 | 明确失败边界:统一错误码 9014101~9014111,未安装微信、未注册、参数错误、用户取消和签名配置错误可分别处理。 |
| 双宿主兼容 | 双项目兼容:同一插件 API 同时服务 uni-app 与 uni-app x,平台不支持时返回明确错误而不是静默失败。 |
适合哪些场景
| 场景 | 接入说明 |
|---|---|
| 授权登录 | App 使用微信授权登录,并将临时 code 交给业务服务端换取登录态。 |
| 内容分享 | 将文字、图片、网页、音乐、视频、文件或小程序卡片分享给微信好友、朋友圈或收藏。 |
| 小程序业务闭环 | 从 App 打开指定微信小程序页面,适用于商城、会员、活动和服务闭环。 |
| 支付与转账 | 接入微信支付或商家转账用户确认,前端只负责向微信提交服务端生成的参数。 |
| 客服与回流 | 打开微信客服会话,或监听用户从微信返回 App 时携带的回流数据。 |
| 双宿主跨平台 | 同一业务同时维护 Android/iOS、uni-app/uni-app x,希望复用一套接口和错误处理逻辑。 |
| 业务目标 | 推荐 API | 是否需要业务服务端 | 接入重点 |
|---|---|---|---|
| 只判断微信是否可用 | isInstall / isWXAppSupportApi / getApiSupportInfo |
否 | 仍建议先完成 SDK 注册,以获得完整能力状态 |
| 拉起微信客户端 | openWXApp |
否 | 设备需安装微信,SDK 注册成功 |
| 微信授权登录 | login |
是 | 服务端使用返回的 code 换取微信会话 |
| 分享内容 | share |
视分享类型而定 | 图片需本地可访问路径,小程序分享需原始 ID |
| 打开微信小程序 | launchMiniProgram |
否 | userName 使用 gh_ 开头的小程序原始 ID |
| 打开微信客服 | openCustomerService |
否 | 准备企业 ID 和客服 URL |
| 微信支付 | pay |
是 | 预支付单和签名必须由服务端生成 |
| 商家转账确认 | requestMerchantTransfer |
是 | 转账业务包和签名参数必须由服务端生成 |
| 处理微信回流 | onLaunchFromWX / offLaunchFromWX |
视业务而定 | 页面或应用初始化时订阅,销毁时解除 |
下载与导入
保留完整插件目录,从插件根入口导入;按使用宿主注册下方示例页面。文中含类型声明的脚本片段适用于 uni-app x / UTS;<script setup> 完整页需 Vue 3。普通 uni-app 使用无类型的 JavaScript 写法,Options API 示例兼容 Vue 2 / Vue 3。
import * as WeChatKit from '@/uni_modules/lizhao-wechat-kit'
业务代码只能调用下方 API 列表中的统一公开名称。不要直接调用 registerByAndroid、registerByIos 或其他 *By平台 函数;这些函数是插件内部委派入口,参数签名不属于客户接入契约。
接入前准备
- 在微信开放平台创建并审核移动应用,取得
wx开头的移动应用 AppID。 - Android 端确保最终包名和应用签名与开放平台一致;iOS 端确保 Bundle ID、URL Scheme、Universal Link 和 Associated Domains 完整配置。
- 使用包含本插件原生依赖的自定义基座或云打包安装包,标准基座和资源热更新不能新增微信 OpenSDK。
- 在真实安装了微信的设备上测试。模拟器可验证参数和失败回调,但不能代替登录、分享、支付等真实微信链路。
- 支付、商家转账和登录换取会话等敏感操作必须由业务服务端参与,禁止在客户端保存 AppSecret、商户密钥或私钥。
Android 微信回调入口配置
Android 项目需要在项目根目录 AndroidManifest.xml 配置微信返回 App 的入口,登录、分享和支付通过这些入口接收结果。插件提供实际回调 Activity,应用需要声明与最终包名对应的两个回调别名;仅升级插件不能替代这项配置。
- 请打开插件内的 Android 清单示例(uni_modules/lizhao-wechat-kit/example/android/AndroidManifest.xml),将
<application>内的一个<activity>和两个<activity-alias>合并到项目根目录AndroidManifest.xml的<application>中;根目录尚无清单时,可从该示例创建。 - 项目根清单已经声明同名微信入口时,只保留一组配置,确保真实
<activity>位于两个<activity-alias>之前,并让两个别名的android:targetActivity指向示例中的回调 Activity;不要重复声明。 - 保留示例中的
${applicationId},打包时会自动使用实际 Android 应用包名,不要填写微信 AppID。 - 两个回调别名只放在项目根清单,不要复制到插件的
uni_modules/lizhao-wechat-kit/utssdk/app-android/AndroidManifest.xml,否则可能导致 Android 资源编译失败。
完成升级或清单合并后,重新制作并安装 Android 自定义基座或重新打包应用,再验证微信返回 App 后的登录、分享和支付回调。
完整示例源码
- uni-app 综合调试页:
uni_modules/lizhao-wechat-kit/example/uniapp/wechatKit.vue - uni-app x 接入示例:
uni_modules/lizhao-wechat-kit/example/uniappx/index.uvue
综合调试页提供注册参数、安装检测、API 能力、登录、分享、支付、小程序、客服、回流监听和运行日志,适合在自定义基座中逐项验收。复制到业务页面时,只保留实际需要的能力和参数,不要把调试占位值带入生产环境。
从基础到进阶:按业务模块使用
五分钟最小接入
先完成 SDK 注册,再读取能力矩阵。这个示例适合作为接入后的第一个验证点:
import * as WeChatKit from '@/uni_modules/lizhao-wechat-kit'
WeChatKit.register({
appId: 'wx1234567890abcdef',
// Android 可传空字符串;iOS 必须填写已完成 AASA 配置的 HTTPS Universal Link。
universalLink: 'https://your.domain.com/app/',
success(registerResult) {
console.log('微信 SDK 注册成功', registerResult)
WeChatKit.getApiSupportInfo({
success(info) {
console.log('微信能力矩阵', info)
},
fail(err) {
console.error('读取能力矩阵失败', err)
},
complete(result) {
console.log('能力矩阵检查完成', result)
}
})
},
fail(err) {
console.error('微信 SDK 注册失败', err)
},
complete(result) {
console.log('微信 SDK 注册流程完成', result)
}
})
注册成功只表示当前 App 已通过微信 SDK 注册校验,不代表用户已经登录,也不代表支付或分享业务已经完成。后续能力必须分别调用对应 API。
判断微信是否安装及版本能力
isInstall 和 isWXAppSupportApi 是同步方法,可用于控制按钮是否可用:
const installed = WeChatKit.isInstall()
const supportTargetApi = WeChatKit.isWXAppSupportApi(0)
console.log('是否安装微信', installed)
console.log('是否支持目标 API', supportTargetApi)
传入的 API 级别由业务根据目标微信能力确定;不确定时优先使用 getApiSupportInfo 查看完整能力状态。
拉起微信客户端
WeChatKit.openWXApp({
success(res) {
console.log('已提交拉起微信请求', res)
},
fail(err) {
console.error('拉起微信失败', err)
},
complete(res) {
console.log('拉起微信调用完成', res)
}
})
以下示例均应在 register 成功后调用。
微信授权登录
WeChatKit.login({
state: 'login-' + Date.now().toString(),
success(res) {
console.log('微信授权成功,临时 code =', res.code)
// 将 res.code 发送给业务服务端,由服务端换取微信会话和业务登录态。
},
fail(err) {
console.error('微信授权失败', err)
},
complete(res) {
console.log('微信授权流程完成', res)
}
})
不要在客户端使用 AppSecret 换取 access_token。state 应由业务生成并在服务端校验,避免授权结果被串用。
分享文本
WeChatKit.share({
type: 0,
scene: 0,
text: '这是一段要分享给微信好友的文字',
success(res) {
console.log('文本分享请求成功', res)
},
fail(err) {
console.error('文本分享失败', err)
},
complete(res) {
console.log('文本分享流程完成', res)
}
})
分享网页
WeChatKit.share({
type: 3,
scene: 0,
title: '网页标题',
desc: '网页内容摘要',
href: 'https://example.com/article/1001',
thumbImageUrl: '/storage/emulated/0/Download/share-thumb.jpg',
success(res) {
console.log('网页分享请求成功', res)
},
fail(err) {
console.error('网页分享失败', err)
},
complete(res) {
console.log('网页分享流程完成', res)
}
})
分享本地图片
WeChatKit.share({
type: 1,
scene: 0,
imageUrl: '/storage/emulated/0/Download/share-image.jpg',
thumbImageUrl: '/storage/emulated/0/Download/share-thumb.jpg',
success(res) {
console.log('图片分享请求成功', res)
},
fail(err) {
console.error('图片分享失败', err)
},
complete(res) {
console.log('图片分享流程完成', res)
}
})
图片必须是当前 App 可以读取的本地路径。远程图片应先下载到本地并检查文件存在,再交给插件分享。
私有目录图片分享到朋友圈(uni-app / uni-app x)
1.0.7 支持直接传入应用可读取的私有目录或临时下载图片,不需要先保存到系统相册。下载仍由业务侧完成,拿到 tempFilePath 或已经写入 uni.env.USER_DATA_PATH 的图片路径后,继续使用原 share 接口:
// localImagePath 是业务已下载或生成的本地图片路径;文件必须已经存在。
function sharePrivateImage(localImagePath: string) {
WeChatKit.share({
type: 1,
scene: 1, // 朋友圈;微信好友使用 0。
imageUrl: localImagePath,
success: (res) => {
console.log('私有图片分享成功', res)
},
fail: (err) => {
console.error('私有图片分享失败', err)
},
complete: (res) => {
console.log('私有图片分享流程完成', res)
}
})
}
- Android:插件在应用私有缓存中准备独立图片副本,以 FileProvider 的
content://地址仅授予微信读取权限;分享结束或发送失败时清理临时授权及副本。不会写入相册、MediaStore 或触发媒体扫描,不修改原文件。 - Android 分享处理中会拒绝重复请求。在“选择哪个微信”的界面退出,或返回应用后仍未收到微信结果时,本次调用以
9014107触发fail / complete并允许重新分享;这不代表微信已确认分享成功或取消。仍停留在微信时保留原等待,30 分钟未收到结果则回收本次资源并报告超时。进程退出留下的副本会在下次图片分享时按过期时间和容量上限清理。 - iOS:解析当前应用的沙盒路径后直接读取图片数据交给微信 SDK,不调用相册保存接口。
- 两端支持可读绝对路径、正确编码的
file://地址和宿主支持的_doc/、_downloads/、unifile://路径。Android 也支持当前应用已有读取权限的content://图片;iOS 不支持 Android 的 content URI。 - 文件不能是目录或空文件,图片最大 25 MiB。远程
http(s)URL 不由分享接口自动下载;源文件在插件准备完成前应保持可读。 - 普通绝对路径可包含中文、空格、
#、%;传file://URI 时须正确编码文件名,避免把#当作片段或把?当作查询参数。
本功能不会帮客户执行“下载到相册”。如业务需要用户主动保存相册,请独立提供保存按钮。Android 新增原生 Provider 配置、iOS 更新原生读取逻辑,升级后两端都需重新制作匹配版本的自定义基座或重新打包安装,资源热更新不能替换原生部分。
排查分享失败时,请复制 fail 中的完整错误,以及同次操作的 [lizhao-wechat-kit][Android][图片分享] 日志;Android 日志包含请求号、准备阶段、来源类别、字节数和资源回收状态,iOS 读取错误包含路径解析、文件检查或文件读取阶段。日志不会输出图片内容或完整私有文件路径。
打开微信小程序
WeChatKit.launchMiniProgram({
userName: 'gh_xxxxxxxx',
path: 'pages/index/index?from=app',
miniProgramType: 0,
success(res) {
console.log('打开小程序请求成功', res)
},
fail(err) {
console.error('打开小程序失败', err)
},
complete(res) {
console.log('打开小程序调用完成', res)
}
})
userName 必须填写微信公众平台提供的 gh_ 开头小程序原始 ID,不是小程序 AppID。miniProgramType:0 正式版、1 开发版、2 体验版。
打开微信客服
WeChatKit.openCustomerService({
corpId: '企业ID',
url: 'https://work.weixin.qq.com/kfid/your-service-url',
success(res) {
console.log('打开微信客服请求成功', res)
},
fail(err) {
console.error('打开微信客服失败', err)
},
complete(res) {
console.log('打开微信客服调用完成', res)
}
})
支付和转账参数必须来自业务服务端。以下占位值只说明字段结构,不能直接用于生产交易。
微信支付
WeChatKit.pay({
partnerId: '服务端返回的商户号',
prepayId: '服务端返回的预支付单号',
nonceStr: '服务端返回的随机串',
timeStamp: 1720000000,
package: 'Sign=WXPay',
sign: '服务端生成的支付签名',
signType: 'MD5',
success(res) {
console.log('微信支付回调成功', res)
// 最终支付状态仍应由服务端查询微信订单或接收支付通知确认。
},
fail(err) {
console.error('微信支付失败', err)
},
complete(res) {
console.log('微信支付流程完成', res)
}
})
客户端成功回调不能代替服务端订单确认。发货、充值等业务必须以服务端验证后的支付结果为准。
商家转账用户确认
WeChatKit.requestMerchantTransfer({
mchId: '服务端返回的商户号',
package: '服务端返回的转账业务包参数',
appId: 'wx1234567890abcdef',
openId: '服务端确认的用户 openId',
transferId: '服务端返回的转账单号',
businessType: 'transfer_to_change',
success(res) {
console.log('已完成商家转账用户确认请求', res)
},
fail(err) {
console.error('商家转账确认失败', err)
},
complete(res) {
console.log('商家转账确认流程完成', res)
}
})
分享微信小程序卡片
WeChatKit.share({
type: 4,
scene: 0,
title: '小程序卡片标题',
desc: '小程序卡片说明',
thumbImageUrl: '/storage/emulated/0/Download/mini-thumb.jpg',
miniProgram: {
userName: 'gh_xxxxxxxx',
path: 'pages/index/index?from=share',
miniProgramType: 0,
webpageUrl: 'https://example.com/fallback'
},
success(res) {
console.log('小程序卡片分享请求成功', res)
},
fail(err) {
console.error('小程序卡片分享失败', err)
},
complete(res) {
console.log('小程序卡片分享流程完成', res)
}
})
监听微信回流
const launchListener = (res) => {
console.log('收到微信回流数据', res)
}
WeChatKit.onLaunchFromWX({
success: launchListener,
fail(err) {
console.error('订阅微信回流失败', err)
},
complete(res) {
console.log('微信回流订阅调用完成', res)
}
})
// 页面或业务模块销毁时解除监听。
WeChatKit.offLaunchFromWX(launchListener)
iOS 受 Swift 闭包比较限制,offLaunchFromWX(listener?) 会清空当前插件内的全部回流监听器;请按页面生命周期统一管理订阅。
使用兼容对象入口
如果旧业务习惯通过一个 SDK 对象调用能力,可以使用:
const sdk = WeChatKit.getTTWeChatSDK()
console.log('微信是否安装', sdk.isInstall())
sdk.openWXApp({
success(res) {
console.log('已提交拉起微信请求', res)
},
fail(err) {
console.error('拉起微信失败', err)
},
complete(res) {
console.log('兼容对象调用完成', res)
}
})
新项目优先直接调用模块导出的统一 API;兼容对象不提供额外能力。
API 用途速查
register(options)isInstall()isWXAppSupportApi(api)openWXApp(options)getApiSupportInfo(options)login(options)share(options)pay(options)requestMerchantTransfer(options)launchMiniProgram(options)openCustomerService(options)onLaunchFromWX(options)offLaunchFromWX(listener?)getTTWeChatSDK()
详细参数、默认值、回调与返回字段见本节下方的参数表和返回值说明。
参数与回调
以下内容用于查询完整参数。第一次接入建议先完成前面的“五分钟最小接入”,再按业务场景查阅对应 API。
register(options)
| 参数 | 类型 | 必填 | 说明 | 默认值 | 可选参数 |
|---|---|---|---|---|---|
| options | TTWeChatRegisterOptions | 是 | 注册参数对象 | 无 | appId / appid / universalLink / success / fail / complete |
| options.appId | string | 条件 | 微信开放平台 AppID,与 appid 二选一 |
无 | 无 |
| options.appid | string | 条件 | appId 兼容字段 |
无 | 无 |
| options.universalLink | string | iOS 必填 | iOS Universal Link,必须使用 HTTPS、以 / 结尾,并与开放平台配置完全一致 |
无 | 无 |
| options.success | function | 否 | 成功回调 | 无 | 无 |
| options.fail | function | 否 | 失败回调 | 无 | 无 |
| options.complete | function | 否 | 完成回调 | 无 | 无 |
isInstall()
同步返回当前设备是否安装微信。
| 参数 | 类型 | 必填 | 说明 | 默认值 | 可选参数 |
|---|---|---|---|---|---|
| 无 | 无 | 无 | 本方法不接收参数 | 无 | 无 |
返回值:boolean。
isWXAppSupportApi(api)
| 参数 | 类型 | 必填 | 说明 | 默认值 | 可选参数 |
|---|---|---|---|---|---|
| api | number | 是 | 需要检测的微信 API 支持级别 | 无 | 无 |
返回值:boolean。
openWXApp(options)
| 参数 | 类型 | 必填 | 说明 | 默认值 | 可选参数 |
|---|---|---|---|---|---|
| options | WeChatCallbackOptions | 是 | 拉起微信参数对象 | 无 | success / fail / complete |
| options.success | function | 否 | 拉起请求成功回调 | 无 | 无 |
| options.fail | function | 否 | 拉起失败回调 | 无 | 无 |
| options.complete | function | 否 | 调用完成回调 | 无 | 无 |
getApiSupportInfo(options)
| 参数 | 类型 | 必填 | 说明 | 默认值 | 可选参数 |
|---|---|---|---|---|---|
| options | WeChatCallbackOptions | 是 | 获取能力矩阵参数对象 | 无 | success / fail / complete |
| options.success | function | 否 | 成功回调,返回安装、注册、API 级别和拉起能力 | 无 | 无 |
| options.fail | function | 否 | 获取失败回调 | 无 | 无 |
| options.complete | function | 否 | 调用完成回调 | 无 | 无 |
login(options)
| 参数 | 类型 | 必填 | 说明 | 默认值 | 可选参数 |
|---|---|---|---|---|---|
| options | TTWeChatLoginOptions | 是 | 登录参数对象 | 无 | state / success / fail / complete |
| options.state | string | 否 | 登录透传状态 | 无 | 无 |
| options.success | function | 否 | 成功回调,返回 code/state/lang/country |
无 | 无 |
| options.fail | function | 否 | 失败回调 | 无 | 无 |
| options.complete | function | 否 | 完成回调 | 无 | 无 |
share(options)
| 参数 | 类型 | 必填 | 说明 | 默认值 | 可选参数 |
|---|---|---|---|---|---|
| options | TTWeChatShareOptions | 是 | 分享参数对象 | 无 | type / scene / title / desc / text / imageUrl / thumbImageUrl / videoUrl / musicUrl / href / filePath / fileExt / miniProgram / success / fail / complete |
| options.type | number | 是 | 分享类型 | 无 | 0:text / 1:image / 2:video / 3:webpage / 4:miniProgram / 5:music / 6:file |
| options.scene | number | 是 | 分享场景 | 0 | 0:会话 / 1:朋友圈 / 2:收藏 |
| options.title | string | 否 | 分享标题 | 无 | 无 |
| options.desc | string | 否 | 分享描述 | 无 | 无 |
| options.text | string | 否 | 文本分享内容 | 无 | 无 |
| options.imageUrl | string | 否 | 图片本地路径;支持应用可读私有目录与临时文件,无需先存相册 | 无 | 图片最大 25 MiB,远程图片由业务先下载 |
| options.thumbImageUrl | string | 否 | 缩略图本地路径 | 无 | 无 |
| options.videoUrl | string | 否 | 视频链接 | 无 | 无 |
| options.musicUrl | string | 否 | 音乐链接 | 无 | 无 |
| options.href | string | 否 | 网页链接 | 无 | 无 |
| options.filePath | string | 否 | 文件本地路径 | 无 | 无 |
| options.fileExt | string | 否 | 文件扩展名 | 无 | 无 |
| options.miniProgram | object | 否 | 小程序分享参数 | 无 | userName / path / miniProgramType / webpageUrl |
| options.success | function | 否 | 分享成功回调 | 无 | 无 |
| options.fail | function | 否 | 分享失败回调 | 无 | 无 |
| options.complete | function | 否 | 分享调用完成回调 | 无 | 无 |
pay(options)
| 参数 | 类型 | 必填 | 说明 | 默认值 | 可选参数 |
|---|---|---|---|---|---|
| options | TTWeChatPayOptions | 是 | 支付参数对象 | 无 | partnerId / prepayId / nonceStr / timeStamp / package / sign / signType / extData / success / fail / complete |
| options.partnerId | string | 是 | 商户号 | 无 | 无 |
| options.prepayId | string | 是 | 预支付交易会话标识 | 无 | 无 |
| options.nonceStr | string | 是 | 随机串 | 无 | 无 |
| options.timeStamp | number | 是 | 时间戳(秒) | 无 | 无 |
| options.package | string | 是 | 扩展字段 | 无 | 无 |
| options.sign | string | 是 | 支付签名 | 无 | 无 |
| options.signType | string | 否 | 签名算法 | MD5 |
无 |
| options.extData | string | 否 | 扩展数据 | 无 | 无 |
| options.success | function | 否 | 支付成功回调 | 无 | 无 |
| options.fail | function | 否 | 支付失败或用户取消回调 | 无 | 无 |
| options.complete | function | 否 | 支付调用完成回调 | 无 | 无 |
requestMerchantTransfer(options)
| 参数 | 类型 | 必填 | 说明 | 默认值 | 可选参数 |
|---|---|---|---|---|---|
| options | TTWeChatRequestMerchantTransferOptions | 是 | 商家转账用户确认参数 | 无 | mchId / package / appId / openId / subAppId / subMchId / transferId / businessType / success / fail / complete |
| options.mchId | string | 是 | 商户号 | 无 | 无 |
| options.package | string | 是 | 转账业务包参数 | 无 | 无 |
| options.appId | string | 否 | 子应用 appId | 无 | 无 |
| options.openId | string | 否 | 用户 openId | 无 | 无 |
| options.subAppId | string | 否 | 子商户 appId | 无 | 无 |
| options.subMchId | string | 否 | 子商户号 | 无 | 无 |
| options.transferId | string | 否 | 转账单号 | 无 | 无 |
| options.businessType | string | 否 | 业务类型 | transfer_to_change |
无 |
| options.success | function | 否 | 转账确认请求成功回调 | 无 | 无 |
| options.fail | function | 否 | 转账确认失败回调 | 无 | 无 |
| options.complete | function | 否 | 转账确认调用完成回调 | 无 | 无 |
launchMiniProgram(options)
| 参数 | 类型 | 必填 | 说明 | 默认值 | 可选参数 |
|---|---|---|---|---|---|
| options | TTWeChatLaunchMiniProgramOptions | 是 | 打开小程序参数 | 无 | userName / path / miniProgramType / success / fail / complete |
| options.userName | string | 是 | 小程序原始 ID | 无 | 无 |
| options.path | string | 否 | 小程序页面路径 | 无 | 无 |
| options.miniProgramType | number | 否 | 小程序版本 | 0 | 0:正式 / 1:开发 / 2:体验 |
| options.success | function | 否 | 小程序拉起请求成功回调 | 无 | 无 |
| options.fail | function | 否 | 小程序拉起失败回调 | 无 | 无 |
| options.complete | function | 否 | 小程序拉起调用完成回调 | 无 | 无 |
userName 必须填写微信公众平台提供的 gh_ 开头小程序原始 ID,不是小程序 AppID。
WeChatKit.launchMiniProgram({
userName: 'gh_xxxxxxxx',
path: 'pages/index/index',
miniProgramType: 0,
success(res) {
console.log('打开小程序请求成功', res)
},
fail(err) {
console.error('打开小程序失败', err)
},
complete(res) {
console.log('打开小程序调用完成', res)
}
})
openCustomerService(options)
| 参数 | 类型 | 必填 | 说明 | 默认值 | 可选参数 |
|---|---|---|---|---|---|
| options | TTWeChatOpenCustomerServiceOptions | 是 | 微信客服参数 | 无 | corpId / url / success / fail / complete |
| options.corpId | string | 否 | 企业 ID | 无 | 无 |
| options.url | string | 是 | 客服会话或 URL 跳转地址 | 无 | 无 |
| options.success | function | 否 | 客服拉起请求成功回调 | 无 | 无 |
| options.fail | function | 否 | 客服拉起失败回调 | 无 | 无 |
| options.complete | function | 否 | 客服拉起调用完成回调 | 无 | 无 |
onLaunchFromWX(options)
| 参数 | 类型 | 必填 | 说明 | 默认值 | 可选参数 |
|---|---|---|---|---|---|
| options | TTWeChatLaunchListenerOptions | 是 | 微信回流事件订阅参数 | 无 | success / fail / complete |
| options.success | function | 是 | 回流事件回调,返回 data/scene/platform/timestamp |
无 | 无 |
| options.fail | function | 否 | 失败回调 | 无 | 无 |
| options.complete | function | 否 | 完成回调 | 无 | 无 |
offLaunchFromWX(listener?)
取消微信回流事件监听。受 Swift 闭包不支持可靠相等比较的限制,iOS 传入或不传入
listener 都会清空当前全部微信回流监听器;其他平台仍按原有实现处理指定监听器。
getTTWeChatSDK()
返回包含统一公开能力的兼容对象,适用于旧业务按 SDK 对象组织调用的场景。该方法不接收参数,也不会自动注册微信 SDK;仍需先调用返回对象的 register(options)。
| 字段 | 类型 | 说明 |
|---|---|---|
| register | function | 注册微信 SDK |
| isInstall | function | 判断微信是否安装 |
| isWXAppSupportApi | function | 判断目标 API 级别是否支持 |
| openWXApp | function | 拉起微信 |
| getApiSupportInfo | function | 获取能力矩阵 |
| login / share / pay | function | 登录、分享与支付能力 |
| requestMerchantTransfer | function | 商家转账用户确认 |
| launchMiniProgram / openCustomerService | function | 打开小程序与客服 |
| onLaunchFromWX / offLaunchFromWX | function | 管理微信回流监听 |
返回值说明
| 字段 | 类型 | 说明 |
|---|---|---|
| code | string | 登录授权码(服务端换取 access_token) |
| state | string | 登录透传状态 |
| platform | string | 当前平台 |
| completed | boolean | 当前链路是否完成 |
| opened | boolean | 拉起动作是否成功触发 |
| registered | boolean | SDK 是否已注册 |
| installed | boolean | 当前设备是否安装微信 |
| supportApi | boolean | 当前微信是否支持目标 API |
| appSupportApiLevel | number | 微信客户端报告的 API 支持级别 |
| canOpenWeChat | boolean | 当前状态是否允许拉起微信 |
| appId | string | 当前成功注册的微信移动应用 AppID;未注册时为空字符串 |
| data | string | 微信回流携带的业务数据 |
| scene | string | 分享场景或微信回流场景 |
| timestamp | number | 回流事件时间戳 |
错误码说明
错误主题 errSubject 为 lizhao-wechat-kit;失败时保留 errCode 和 errMsg,按下表处理。
| 错误码 | 含义 | 说明 |
|---|---|---|
| 9014101 | platform unsupported | 当前平台不支持该能力 |
| 9014102 | wechat sdk not registered | 未先调用 register |
| 9014103 | invalid options | 参数非法 |
| 9014104 | wechat not installed | 设备未安装微信 |
| 9014105 | wechat api not supported | 当前微信版本不支持目标 API |
| 9014106 | user cancel | 用户取消 |
| 9014107 | wechat request failed | 请求发送或回调失败 |
| 9014108 | wechat signature or config invalid | 签名、配置或 universalLink 不匹配 |
| 9014109 | not implemented | 当前平台实现未提供 |
| 9014110 | system error | 系统环境异常 |
| 9014111 | operation busy | 操作冲突或微信返回 busy |
注意事项
支持平台
| 平台 | 是否支持 | 说明 |
|---|---|---|
| uni-app | 是 | 支持 API 调用 |
| uni-app x | 是 | 支持 API 调用 |
| Android | 是 | 接入微信 OpenSDK |
| iOS | 是 | 接入微信 OpenSDK(需 universalLink) |
| Harmony | 否 | 当前版本返回明确不支持错误 |
| Web | 否 | 当前版本返回明确不支持错误 |
| 微信小程序 | 否 | 当前版本返回明确不支持错误 |
| 支付宝小程序 | 否 | 当前版本返回明确不支持错误 |
权限说明
- Android:按微信 OpenSDK 要求完成应用与权限配置。
- iOS:需配置 URL Scheme 与 Universal Link。
自定义基座说明
本插件接入微信 OpenSDK(原生依赖与平台配置),默认需要自定义基座。
- 必须先调用
register,再调用其他微信能力。 pay与requestMerchantTransfer的签名参数必须由服务端生成。- 不支持平台会返回明确错误,不会静默成功。
- iOS 需确保开放平台配置与
universalLink严格一致。
iOS 必须配置有效的 Universal Link、AASA、签名和 Associated Domains;完整配置与 9014108 排查见本页的“iOS 接入前必检”。支付与转账的最终状态必须由业务服务端确认。
iOS 接入前必检
iOS 微信 OpenSDK 注册依赖宿主应用的签名、URL Scheme、Associated Domains 和 Universal Link。微信开放平台页面已经填写并不代表配置已经进入最终 IPA;建议在调用 register 前完成以下检查。
1. Universal Link 强制要求
- 必须使用
https://,不支持http://。 - 必须以
/结尾,例如https://your.domain.com/app/。 - 代码传入的
universalLink必须与微信开放平台 iOS 应用配置完全一致,包括协议、域名、路径、大小写和结尾/。 - 域名必须能从公网正常访问;证书无效、重定向、鉴权页面、HTML 错误页或
4xx/5xx都会导致校验失败。
2. AASA 在线检查
服务器应在以下标准地址之一提供 apple-app-site-association 文件,推荐同时支持两个地址:
https://your.domain.com/apple-app-site-association
https://your.domain.com/.well-known/apple-app-site-association
可以在打包前直接检查响应:
curl -i https://your.domain.com/apple-app-site-association
curl -i https://your.domain.com/.well-known/apple-app-site-association
有效响应应为 HTTP 200,不能跳转到其他地址或登录页。AASA 最小示例:
{
"applinks": {
"apps": [],
"details": [
{
"appID": "ABCDE12345.com.example.app",
"paths": ["*"]
}
]
}
}
其中 ABCDE12345 替换为 Apple Team ID,com.example.app 替换为最终 IPA 的 Bundle ID。
paths 如何填写
paths 不是固定值,它用于限制该域名下哪些路径可以关联并唤起 App,必须覆盖实际使用的 Universal Link 路径。
| Universal Link | AASA paths 示例 |
说明 |
|---|---|---|
https://your.domain.com/ |
["*"] |
使用域名根路径时,可匹配该域名下全部路径 |
https://your.domain.com/ulink/ |
["/ulink/*"] |
只允许 /ulink/ 目录下的链接 |
例如 AASA 配置为 "paths": ["/ulink/*"] 时,微信开放平台、manifest.json 和 register 参数中的 Universal Link 都应使用 https://your.domain.com/ulink/,不能仍填写域名根路径。
3. IPA 必须包含的配置
- Bundle ID 与微信开放平台 iOS 应用配置一致。
- URL Scheme 包含微信移动应用 AppID,例如
wx1234567890abcdef。 - Associated Domains entitlement 包含对应域名,例如
applinks:your.domain.com,这里不要填写https://或路径。 - Apple Developer 后台对应 App ID 已开启 Associated Domains,且打包使用的描述文件包含该能力。
uni-app 项目可在 HBuilderX 的 manifest.json 可视化界面中进入“App 常用其它设置 → iOS 设置 → 关联域(Associated Domains)”进行配置,也可以在源码视图的 app-plus.distribute.ios 节点中加入:
{
"capabilities": {
"entitlements": {
"com.apple.developer.associated-domains": [
"applinks:your.domain.com"
]
}
}
}
uni-app x 项目在 HBuilderX 4.71 及以上版本可使用 manifest.json 的 iOS 关联域可视化配置;如项目采用 iOS 原生资源配置,则在 nativeResources/ios/UniApp.entitlements 中写入同一个 com.apple.developer.associated-domains 数组。不要在 uni-app x 项目中照搬 uni-app 的 app-plus 节点。
微信 SDK 配置中的 UniversalLinks 和 Associated Domains 是两项不同配置,不能互相替代:
{
"sdkConfigs": {
"share": {
"weixin": {
"appid": "wx1234567890abcdef",
"UniversalLinks": "https://your.domain.com/"
}
}
}
}
UniversalLinks使用完整 HTTPS 地址,包含实际路径并以/结尾。- Associated Domains 只填写
applinks:域名,不包含https://、路径和结尾/。 - 只在
sdkConfigs中填写UniversalLinks,不代表 Associated Domains 已进入最终 IPA 的签名权限。
更换域名后是否需要重新生成 Profile
Apple Developer 网站中的 Associated Domains 开关只表示 App ID 可以使用该能力,不保存具体 Universal Link 域名。因此,已经开启该能力且当前 Profile 已包含 Associated Domains 时,更换域名通常不需要关闭后重新开启,也不需要仅因域名变化重新生成 Profile。
以下情况需要重新生成 Profile:
- Associated Domains 是在当前 Profile 生成之后才首次开启的。
- 云打包提示 Profile 不支持 Associated Domains。
- 检查 Profile 后确认其中不包含
com.apple.developer.associated-domains。
Profile 允许 Associated Domains 仍不等于最终 IPA 已写入目标域名,最终应以 App 主程序的签名 entitlements 为准。
以上任一项发生变化后,都必须重新云打包,或重新制作并安装 iOS 自定义基座。资源热更新、WGT/appResource 更新不能改变 IPA 的 Info.plist、entitlement 或签名描述文件。
4. 9014108 排查顺序
注册时会输出以 [lizhao-wechat-kit][iOS] 微信注册诊断: 开头的单行 JSON;失败回调的 err.details 和 err.data 也包含同一份诊断字符串。出现问题时,复制这一整行或完整失败对象,并补充使用的是 uni-app 还是 uni-app x、HBuilderX 版本及是否已安装新 iOS 原生包。
1.0.7 使用微信官方 WechatOpenSDK-XCFramework 2.0.5,Swift 模块名为 WechatOpenSDK。已移除 SDK 缺失时仍可编译安装的备用实现;如果原生打包提示找不到模块,应解决 Pods 集成后重打包。此版本原生构建标识为 wechat-ios-sdk-fix-20261016,可用于确认客户实际安装的代码。
先查看诊断中的 reason,区分错误发生在哪一层:
| reason | 含义 | 处理方向 |
|---|---|---|
sdk_unavailable |
旧诊断基座无法导入微信 SDK,尚未调用微信注册方法 | 当前版本已改为缺 SDK 时编译失败;出现此值说明仍需更新原生包 |
invalid_app_id |
实际传入的 AppID 为空,错误码为 9014103 |
核查 appId / appid 入参 |
request_in_progress |
业务仍在等待微信回流,本次未更换 SDK 注册配置,错误码为 9014111 |
等待原请求结束后再注册 |
sdk_register_rejected |
已调用微信 SDK,但它返回注册失败,错误码为 9014108 |
继续核查下面的应用与链接配置;此结果本身不指出哪一项不正确 |
registered |
本次微信 SDK 注册返回成功 | 再分别验收登录、分享等业务 |
诊断还会记录本次请求标识、原生构建标识、实际注册参数、Bundle ID、应用版本、URL Scheme、查询白名单和线程状态。链接中的账号、密码、查询参数及片段不回显;诊断不会读取设备唯一标识、登录授权码或支付签名。AASA 与最终签名中的 Associated Domains 不由这段本地日志自动验证,不能把“未检查”当成“配置正确”。浏览器出现横幅也不能证明当前插件已加载微信 SDK。
若没有上述诊断行、构建标识不同,或失败详情仍只有 register wechat sdk failed,先确认正在运行的是更新后的 iOS 原生包;仅更新页面资源不会替换这部分代码。升级本次修复需要重新制作并安装 iOS 自定义基座或重新打包。
插件会自动接收 URL Scheme 和 Universal Link 回流,无需页面手动转发。发送请求被微信 SDK 接收不等于业务成功,登录、分享、支付等成功回调以微信真实响应为准;同一时刻正在等待回流的业务未结束时,再发起业务会返回忙碌错误。iOS 的 success / fail / complete 均异步派发,客户回调抛错不会阻止 complete。
当 reason 为 sdk_register_rejected 时,按以下顺序处理:
- 用上方
curl命令确认 AASA 当前返回200,先解决超时、重定向或502等服务器问题。 - 逐字符核对微信开放平台、代码
universalLink和打包配置中的地址。 - 核对微信 AppID、最终 Bundle ID、Apple Team ID 与 AASA
appID。 - 检查最终 IPA 的 URL Scheme、Associated Domains entitlement 和描述文件,不要只查看后台截图。
- 删除旧应用,安装重新打包后的基座或正式包,再调用
register。
重新打包后,最终 IPA 的主程序签名中应能看到类似内容:
<key>com.apple.developer.associated-domains</key>
<array>
<string>applinks:your.domain.com</string>
</array>
如果签名中没有该字段,即使 HBuilderX、微信开放平台和服务器截图看起来都已配置,微信 SDK 仍可能注册失败。重新打包时还应提升 iOS 构建号;构建号低于已安装、TestFlight 或 App Store 中的版本时,可能无法覆盖安装或上传。
Android 正常不代表 iOS 配置正确:Android 不使用 iOS Universal Link、AASA 和 Associated Domains。9014108 发生在 SDK 注册阶段时,后续登录、分享、支付或打开小程序都不会执行。
常见问题
返回 9014102 wechat sdk not registered
其他微信能力调用早于 register 成功回调。请把业务调用放到注册成功后的状态流程中,不要仅在页面加载时并行调用。
返回 9014104 wechat not installed
当前设备未安装微信,或系统无法识别微信客户端。先使用 isInstall() 检查,并在安装了正式微信的真机复测。
iOS 返回 9014108,但 Android 正常
优先检查 Universal Link、AASA、URL Scheme、Bundle ID、Associated Domains 和描述文件。Android 不使用这些 iOS 配置,因此 Android 正常不能排除 iOS 宿主配置问题。
修改 Universal Link 后仍然报旧错误
Universal Link、entitlement、URL Scheme 和签名配置进入原生安装包,不能通过页面热更新或 WGT/appResource 更新。请重新云打包或制作 iOS 自定义基座,卸载旧应用后再安装测试。
回调日志出现 ReferenceError: Can't find variable
检查客户页面回调参数名是否一致。例如 fail(er) 内部必须读取 er,或统一写成 fail(err) 后读取 err。插件已经触发失败回调时,客户回调函数内部的变量错误会覆盖真正的 SDK 错误日志。
success 是否代表支付或分享业务最终成功
不同能力的成功语义不同。支付结果必须由服务端查询订单或接收微信通知确认;拉起小程序、客服或微信客户端的成功回调表示请求已成功提交,不代表用户完成了后续业务。
作者系列 UTS 插件
以下为作者已上架的 UTS 插件,详情见各市场页面或作者主页。
| 插件 | 能力方向 | 插件市场 |
|---|---|---|
lizhao-app-keepalive |
应用保活、唤醒、自愈与报告 | 查看插件 |
lizhao-bg-audio |
背景音频播放、队列、倍速与事件 | 查看插件 |
lizhao-ble |
BLE 扫描、连接、读写、通知与自动重连 | 查看插件 |
lizhao-call-kit |
电话、短信、通讯录原生能力 | 查看插件 |
lizhao-camera-pro |
原生相机、拍照录像、水印与媒体保存 | 查看插件 |
lizhao-cast-screen |
DLNA 投屏、AirPlay 路由入口 | 查看插件 |
lizhao-choose-file |
原生文件选择、上传、进度与取消 | 查看插件 |
lizhao-device-id |
设备标识、隐私策略与诊断 | 查看插件 |
lizhao-doc-corrector |
文档扫描、矫正、增强与识别 | 查看插件 |
lizhao-emu-detect |
模拟器环境检测、风险评分与证据 | 查看插件 |
lizhao-float-window |
悬浮窗、画中画、权限与诊断 | 查看插件 |
lizhao-gallery-pro |
相册媒体分页、筛选、缩略图与导出 | 查看插件 |
lizhao-hce-card |
NFC 虚拟卡、APDU 交互与 NDEF 标签模拟 | 查看插件 |
lizhao-health |
健康数据授权、查询、统计与写入 | 查看插件 |
lizhao-http-server |
本地 HTTP 服务、文件传输与实时通信 | 查看插件 |
lizhao-icon-pro |
SVG 图标组件、多主题与缓存 | 查看插件 |
lizhao-id-photo |
证件照制作、尺寸换算、换底色与模板换装 | 查看插件 |
lizhao-img-eraser |
图片去水印、局部修复与原生编辑器 | 查看插件 |
lizhao-live-activity |
实时活动、系统胶囊与普通通知降级 | 查看插件 |
lizhao-nfc-pro |
NFC 标签读写、NDEF、IsoDep 与诊断 | 查看插件 |
lizhao-notify-pro |
本地通知、点击动作、进度与定时提醒 | 查看插件 |
lizhao-novel-reader |
原生小说阅读、仿真翻页与段落评论 | 查看插件 |
lizhao-office-view |
Office 与 PDF 文件预览、进度与缓存管理 | 查看插件 |
lizhao-pdf-pro |
PDF 阅读、签批、真实写回与页面处理 | 查看插件 |
lizhao-scan-pro |
原生扫码、连续扫码、相册识别 | 查看插件 |
lizhao-serial-port |
路径串口、USB 串口、多会话收发与诊断 | 查看插件 |
lizhao-share-plus |
系统分享、远程文件下载后分享 | 查看插件 |
lizhao-smart-tts |
系统 TTS、云端合成、听书方案 | 查看插件 |
lizhao-sqlite-pro |
原生 SQLite、迁移、备份与诊断 | 查看插件 |
lizhao-sse-pro |
SSE、Line、JSONL 与 Raw 流式请求 | 查看插件 |
lizhao-tcp-pro |
TCP 客户端、服务端、多连接与诊断 | 查看插件 |
lizhao-usb-storage |
U 盘、移动硬盘文件浏览、读写与批量复制 | 查看插件 |
lizhao-video-editor |
视频裁剪、压缩、取帧与 FFmpeg/FFprobe | 查看插件 |
lizhao-video-feed |
短视频上下滑、短剧选集与分页加载 | 查看插件 |
lizhao-video-player |
原生视频播放器、清晰度与播放交互 | 查看插件 |
lizhao-video-thumb |
视频封面、批量取帧与 Base64 返回 | 查看插件 |
lizhao-vpn-pro |
企业 VPN、IKEv2、安全接入与脱敏诊断 | 查看插件 |
lizhao-wechat-kit |
微信登录、分享、支付、小程序与客服 | 查看插件 |

收藏人数:
购买源码授权版(
试用
赞赏(0)
下载 6486
赞赏 5
下载 12737881
赞赏 1959
赞赏
京公网安备:11010802035340号