HarmonyOS鸿蒙Next中Web拉起微信收银台报错;应用使用鸿蒙原生壳子内嵌食堂web链接,iOS和安卓可唤起微信支付,鸿蒙端无法唤起
HarmonyOS鸿蒙Next中Web拉起微信收银台报错;应用使用鸿蒙原生壳子内嵌食堂web链接,iOS和安卓可唤起微信支付,鸿蒙端无法唤起 现在的应用是用的鸿蒙原生的壳子,内嵌加载一个食堂的web链接,这个链接内有web端的微信支付可以直接唤起微信收银台。在iOS和安卓上面都是可以唤起的。鸿蒙端的就是无法唤起
【问题描述】:
现在的应用是用的鸿蒙原生的壳子,内嵌加载一个食堂的web链接,这个链接内有web端的微信支付可以直接唤起微信收银台。在iOS和安卓上面都是可以唤起的。鸿蒙端的就是无法唤起
【问题现象】:


【版本信息】:开发工具版本:6.0、、Api语言版本:20
【尝试解决方案】:包名 + 签名指纹和微信开放平台填的完全一致
更多关于HarmonyOS鸿蒙Next中Web拉起微信收银台报错;应用使用鸿蒙原生壳子内嵌食堂web链接,iOS和安卓可唤起微信支付,鸿蒙端无法唤起的实战教程也可以访问 https://www.itying.com/category-93-b0.html
开发者你好 16000019是隐式拉起失败,原因是隐式启动的参数配置有误或者指定的HAP包未安装。 排查方式:
-
检查代码中的skills配置:
- “entities"列表中必须包含"entity.system.browsable”;
- “actions"列表中必须包含"ohos.want.action.viewData”;
- “uris"列表中必须包含"scheme"为"https"且"host"为域名地址的元素,可选属性包含"path”、“pathStartWith"和"pathRegex”,具体请参见“uris标签说明”;
- "domainVerify"设置为true,表示开启域名校验开关。
-
检查应用中指定的HAP包是否安装成功。
Web页面跳转其他应用,可以通过获取URL Scheme进行跳转,先通过getRequestUrl获取请求的URL再使用Deep Linking实现应用间跳转或者Want方式拉起小程序,具体实现可以参考此H5页面跳转微信小程序示例。(链接来自gitee)
import { common, OpenLinkOptions } from '@kit.AbilityKit';
import { BusinessError } from '@kit.BasicServicesKit';
@Entry
@Component
struct Index {
build() {
Column() {
Button('click me')
.onClick(() => {
// t值由云侧生成
let link: string = "";
const context = getContext(this) as common.UIAbilityContext;
let openLinkOptions: OpenLinkOptions = {
appLinkingOnly: false,
};
try {
context.openLink(link, openLinkOptions)
.then(() => {
}).catch((err: BusinessError) => {
})
} catch (paramError) {
}
})
}.width('100%')
.height('100%')
}
}
若开发者参考以上方案还存在问题,方便的话还请开发者提供下加载的链接,谢谢了。
更多关于HarmonyOS鸿蒙Next中Web拉起微信收银台报错;应用使用鸿蒙原生壳子内嵌食堂web链接,iOS和安卓可唤起微信支付,鸿蒙端无法唤起的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
根据您的问题描述和截图,这是一个在HarmonyOS Next上,WebView内嵌的H5页面无法通过URL Scheme或Intent拉起微信客户端的典型问题。iOS和安卓正常而鸿蒙失败,核心原因在于HarmonyOS Next的应用沙箱和安全模型与Android有显著差异。
主要原因分析:
- WebView的跳转限制:HarmonyOS Next的
WebView组件出于安全考虑,默认禁止或严格管控页面内发起的、指向其他应用(如weixin://)的跳转请求。这与Android WebView的默认行为不同。 - URL Scheme/Intent的调用方式变更:HarmonyOS Next使用
Want作为统一的对象传递载体,替代了Android的Intent。传统的H5页面中通过window.location.href或<iframe>触发weixin://协议链接的方式,可能无法被系统正确识别并路由到微信应用。
排查与解决步骤:
第一步:检查并配置WebView的跳转权限
在您的ArkTS/JS UI中,为WebView组件显式设置允许打开其他应用的链接。关键属性是overviewModeAccess和javaScriptAccess。
// 示例代码片段
import web_webview from '@ohos.web.webview';
@Entry
@Component
struct MyWebView {
controller: web_webview.WebviewController = new web_webview.WebviewController();
build() {
Column() {
// 创建WebView组件
Web({
src: '您的食堂支付链接',
controller: this.controller
})
.javaScriptAccess(true) // 必须开启JavaScript权限
.overviewModeAccess(true) // 允许导航到其他应用(关键设置)
.onBeforeLoad((event) => {
// 可以在此处拦截并处理特定scheme的URL
console.info('Loading url: ' + event.url);
if (event.url.startsWith('weixin://')) {
// 第二步:在这里处理微信Scheme
// 可以调用系统能力尝试拉起微信
// 为了确保拉起,可能需要使用`want`方式
// 此处可以先注释掉默认行为进行测试: return false;
}
return true;
})
}
}
}
第二步:在WebView的拦截回调中处理微信Scheme
在onBeforeLoad或onUrlLoadIntercept回调中,捕获以weixin://开头的URL。然后使用HarmonyOS的UIAbility启动机制来拉起微信。
import common from '@ohos.app.ability.common';
import wantConstant from '@ohos.app.ability.wantConstant';
import { BusinessError } from '@ohos.base';
// 在onBeforeLoad回调的逻辑分支中
if (event.url.startsWith('weixin://')) {
// 阻止WebView默认的加载行为
// 尝试使用Want拉起微信
let want = {
action: 'ohos.want.action.viewData',
// 微信在HarmonyOS上的包名,需要确认。通常与Android一致或由微信提供。
bundleName: 'com.tencent.mm',
abilityName: 'com.tencent.mm.ui.LauncherUI', // 微信的Ability名,需要微信公开或自行探索
uri: event.url // 将完整的weixin://pay... URL作为参数传递
};
let context: common.UIAbilityContext = getContext(this) as common.UIAbilityContext;
context.startAbility(want).then(() => {
console.info('Start ability success.');
}).catch((err: BusinessError) => {
console.error(`Failed to start ability. Code: ${err.code}, message: ${err.message}`);
// 如果Want方式失败,可以尝试使用更底层的`openLink`接口(如果系统支持)
});
return false; // 必须返回false以阻止WebView继续加载此URL
}
第三步:确认微信的HarmonyOS适配情况 目前,微信官方对HarmonyOS Next的原生适配进度是关键。您需要:
- 核实微信是否已发布HarmonyOS Next版本的应用,并公开了其用于支付的
Want参数规范(如bundleName,abilityName, 以及具体的parameters)。 - 联系食堂Web页面的提供方,询问其是否针对HarmonyOS环境进行了支付接口的适配。他们可能需要提供HarmonyOS专用的拉起方式或SDK。
总结: 问题的根本是HarmonyOS Next的安全机制拦截了WebView内的直接应用拉起。解决方案的核心是:
- 配置
WebView允许外部跳转(overviewModeAccess(true))。 - 在WebView的回调函数中拦截微信支付URL。
- 使用HarmonyOS的
Want机制尝试拉起微信。 - 最终依赖微信官方对HarmonyOS Next的适配程度,提供准确的
Want参数。
由于微信支付涉及第三方应用深度集成,在微信未完全公开HarmonyOS接入规范前,可能存在无法完美解决的情况。请优先从配置WebView和拦截处理入手,并同步关注微信官方的HarmonyOS开发者公告。


