x-wechatshare-s 微信开放平台
微信开放平台「移动应用」Open SDK 封装:跳转微信、分享卡片、拉起小程序、微信支付、微信登录。函数与类型均加 x 前缀,避免与官方同名冲突。回调统一走 DCloud success / fail / complete。
三端用的都是官方静态包,已随插件落盘,不走远程依赖:
| 平台 | 官方包 | 位置 |
|---|---|---|
| Android | wechat-sdk-android-6.8.40.aar | utssdk/app-android/libs/ |
| iOS | WechatOpenSDK.xcframework 2.0.7(含支付) | utssdk/app-ios/Frameworks/ |
| HarmonyOS | @tencent/wechat_open_sdk 1.0.20 HAR | utssdk/app-harmony/libs/ |
兼容性
| Harmony | iOS | Android | WEB | 微信小程序 |
|---|---|---|---|---|
| 支持 | 支持 | 支持 | 不支持 | 不支持 |
Web 与微信小程序导出同名空签名,全部 fail 1008。微信小程序里请用官方 wx.*,移动应用 Open SDK 只在 App 端可用。
几处官方 SDK 本身的端差异:
- HarmonyOS 版没有
WXMusicObject,xWechatShare传type: "music"会返回fail 1005 - iOS 版
PayReq没有extData/signType,传了会被忽略;对应地XWechatPayResult.extData在 iOS 恒为空串
调用
import {
xWechatRegister,
xWechatIsInstalled,
xWechatOpen,
xWechatShare,
xWechatLaunchMiniProgram,
xWechatPay,
xWechatAuth,
XWechatRegisterOptions,
XWechatShareOptions
} from "@/uni_modules/x-wechatshare-s"
// 每次冷启动先注册一次,AppID 由你的开放平台应用提供
xWechatRegister({
appId: "wx0000000000000000",
universalLink: "https://your.domain/app/",
success: (res) => {
console.log(res.registered)
}
} as XWechatRegisterOptions)
// 分享网页卡片
xWechatShare({
type: "webpage",
scene: "session",
title: "标题",
summary: "描述",
href: "https://uniapp.dcloud.net.cn",
thumb: "/static/logo.png",
success: () => {
console.log("微信已确认分享")
}
} as XWechatShareOptions)API
| 函数 | 说明 |
|---|---|
xWechatRegister(options) | 注册 AppID。iOS 建议同时传 universalLink,Android 可用 checkSignature 关闭微信客户端签名校验 |
xWechatIsInstalled(options?) | 回 installed 与 supportApi |
xWechatOpen(options?) | 拉起微信客户端 |
xWechatShare(options) | 分享卡片 |
xWechatLaunchMiniProgram(options) | 拉起小程序,success 回小程序 navigateBackApplication 带出的 extMsg |
xWechatPay(options) | 微信支付,六要素由业务服务端下单后下发 |
xWechatAuth(options?) | 微信登录,success 回 code |
xWechatShare 的 type:text / image / webpage / music / video / miniProgram / file。 scene:session 好友 / timeline 朋友圈 / favorite 收藏。小程序卡片微信只允许发到会话,插件会强制改成 session。
thumb、imagePath、filePath 支持 /static/xx.png 这类应用内路径、绝对路径和 http(s) 地址,插件会自动转换并把缩略图压到微信要求的大小内。
错误码
| 码 | 含义 |
|---|---|
| 1001 | 系统错误 |
| 1002 | 参数错误 |
| 1003 | 未调用 xWechatRegister |
| 1004 | 未安装微信 |
| 1005 | 当前微信版本或当前平台的官方 SDK 不支持此功能 |
| 1006 | 用户取消 |
| 1007 | 微信拒绝或发送失败 |
| 1008 | 当前平台不支持(Web / 微信小程序) |
success 表示微信已回调成功,不是「已打开微信」。收不到回调时先查下面的回跳配置。
回跳配置
微信把结果回传给宿主 App 的路径是平台强制的,三端要求不同。
Android:无需配置
插件的 AndroidManifest.xml 已经用 DCloud 云打包保留的 ${apk.applicationId} 占位符生成了两个别名:
{applicationId}.wxapi.WXEntryActivity{applicationId}.wxapi.WXPayEntryActivity
它们都指向插件内部的 XWechatCallbackActivity。登录和支付另外通过 callbackClassName 直接指到同一个 Activity。
如果你的工程已经自己写了 wxapi 下的这两个类(例如从原生工程迁移过来),会和插件的别名冲突,二选一:删掉自己的类,或删掉插件 AndroidManifest.xml 里的两个 activity-alias 并改用 native-templates/android/wxapi/ 下的模板(模板内部会调 XWechatShareNative.handleIntent(intent))。
注意:nativeResources/android 不支持放 Java / Kotlin 源码,所以模板只对离线打包有意义。
iOS:配 URL Scheme 和 Universal Link
插件通过 UTSiOSHookProxy 接管了 application:openURL: 和 continueUserActivity:,不需要改宿主 AppDelegate,但下面两项必须你自己配:
manifest.json→app-ios.distribute.urltypes里加上wx{你的AppID},例如wx0000000000000000- Universal Link 域名要在开放平台登记,并配到
app-ios.distribute.capabilities.entitlements的com.apple.developer.associated-domains,与xWechatRegister传的universalLink前缀一致
LSApplicationQueriesSchemes 里的 weixin / weixinULAPI 已由插件的 Info.plist 提供。
HarmonyOS:无需配置
插件在 app-harmony/index.uts 里通过 UTSHarmony.onAppAbilityCreate 和 UTSHarmony.onAppAbilityNewWant 接住微信回跳的 want 并交给 SDK。只有当你自己维护 EntryAbility.ets 并绕开了 uni-app x 的生命周期分发时,才需要参考 native-templates/harmony/EntryAbility.snippet.ets 手动转发。
你需要自己准备的
- 微信开放平台「移动应用」AppID,且三端包名 / 签名 / Bundle ID / Universal Link / 鸿蒙 BundleName 已审核通过
- 支付:商户号 + 服务端预下单,插件只负责把六要素交给
PayReq,不生成sign - 改过原生配置后必须重新提交云端打包自定义基座,标准基座里没有微信 SDK
没有真实 AppID 时代码和编译都能通过,真机拉起微信会因签名校验失败。
更新日志
1.0.0(2026-08-17)
- 新增 x-wechatshare-s:xWechatRegister、xWechatIsInstalled、xWechatOpen、xWechatShare、xWechatLaunchMiniProgram、xWechatPay、xWechatAuth。
- Android / iOS / HarmonyOS 使用官方 Open SDK 静态包真实实现,Web 与微信小程序为同名空签名并 fail 1008。
- Android 用
${apk.applicationId}别名自动接管 wxapi 回跳,iOS 用 UTSiOSHookProxy 接管 openURL / UniversalLink,鸿蒙用 UTSHarmony 生命周期接管 want,三端均无需宿主手动接线。
