HarmonyOS 鸿蒙Next中使用ese出现3300103错误

HarmonyOS 鸿蒙Next中使用ese出现3300103错误 我想开发的APP,可以使用ese进行刷卡,代码片段如下:

await omapi.createService().then((data) => {
  if (data == undefined || !data.isConnected()) {
    hilog.error(0x0000, 'testTag', 'secure element service disconnected.');
    return;
  }
  seService = data;
  hilog.info(0x0000, 'testTag', 'secure element service connected.');
}).catch((error: BusinessError) => {
  hilog.error(0x0000, 'testTag', 'createService error %{public}s', JSON.stringify(error));
  return;
});
// 获取读卡器
try {
  seReaders = seService.getReaders();
} catch (error) {
  hilog.error(0x0000, 'testTag', 'getReaders error %{public}s', JSON.stringify(error));
}
if (seReaders == undefined || seReaders.length == 0) {
  hilog.error(0x0000, 'testTag', 'no valid reader found.');
  seService.shutdown();
  return;
}
let reader: (omapi.Reader | undefined);
for (let i = 0; i < seReaders.length; ++i) {
  let r = seReaders[i];
  hilog.info(0x00, "testTag", "==== " + r.getName());
  if (!r.getName().includes('SIM')) {
    reader = r;
    break;
  }
}
if (reader == undefined) {
  hilog.error(0x0000, 'testTag', 'no valid sim reader.');
  return;
}
hilog.info(0x0000, 'testTag', 'reader is %{public}s', reader?.getName());

// 获取会话
try {
  seSession = reader?.openSession() as omapi.Session;
} catch (error) {
  hilog.error(0x0000, 'testTag', 'openSession error %{public}s', JSON.stringify(error));
}
if (seSession == undefined) {
  hilog.error(0x0000, 'testTag', 'seSession invalid.');
  seService.shutdown();
  return;
}

// 获取通道
try {
  // 修改此处的aid值以打开逻辑通道。
  seChannel = await seSession.openLogicalChannel(aidArray, p2);
  // seChannel = await seSession.openBasicChannel(aidArray, p2);
} catch (exception) {
  hilog.error(0x0000, 'testTag', 'openLogicalChannel exception %{public}s', JSON.stringify(exception));
}

现在返回

openLogicalChannel exception {"code":3300103,"data":""}

官方文档解释为:

3300103 无法获取访问控制规则异常

支持设备Phone

错误信息

SecurityError, the calling application cannot be granted access to this AID or the default applet on this session.

错误描述

无法获取访问控制规则异常。

可能原因

  1. 安全单元上没有应用所依赖的访问规则。

处理步骤

  1. 写入正确的访问规则到安全单元上。
  2. 关闭SE服务后重新建立连接。

这个不是很理解,应该如何解决,还是三方应用没有这个权限?


更多关于HarmonyOS 鸿蒙Next中使用ese出现3300103错误的实战教程也可以访问 https://www.itying.com/category-93-b0.html

5 回复

3300103报错表示无法获取访问控制规则异常,根据sim卡安全单元在被应用访问前需要在安全单元上设置访问规则。解决步骤:

  1. 写入正确的访问规则到安全单元上;一般是由sim卡厂家设置,不涉及HarmonyOS代码。
  2. 关闭SE服务后重新建立连接。

更多关于HarmonyOS 鸿蒙Next中使用ese出现3300103错误的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


没设置成 release 打包?

cke_410.png

参考:安全单元访问开发指南-NFC-Connectivity Kit(短距通信服务)-网络-系统 - 华为HarmonyOS开发者

[@ohos.secureElement (安全单元的通道管理)-ArkTS API-Connectivity Kit(短距通信服务)-网络-系统 - 华为HarmonyOS开发者](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-secureelement)

在HarmonyOS Next中,使用eSE(嵌入式安全元件)出现3300103错误通常表示安全环境初始化失败。该错误可能由于eSE硬件未正常启动、驱动加载异常或安全服务未正确配置导致。建议检查设备eSE硬件状态、系统日志中相关错误信息,并确认系统版本与eSE服务的兼容性。

错误代码3300103表示应用无法获取对指定AID的访问权限,通常是由于安全单元(SE)上的访问控制规则(ACR)缺失或配置不当导致的。根据您的代码,问题可能出现在openLogicalChannel调用时,系统无法验证当前应用对目标AID的访问权限。

请检查以下几点:

  1. 确保设备上的安全单元已正确配置访问规则,特别是与您使用的AID相关的规则。
  2. 确认AID值(aidArray)是否正确,且与安全单元中预配置的规则匹配。
  3. 如果使用的是逻辑通道,确保应用具有访问该AID的权限,可能需要检查签名或权限配置。

建议重新配置安全单元的访问规则,或联系相关硬件提供商确认ACR设置。完成后重启SE服务并重试。

回到顶部