鸿蒙CMCASDK接入指南

cmcasdk-default.tgz 使用前必读
1.
从华为官网下载DevEco Studio(开发工具版本号是DevEco Studio 5.0.2 Release),新建或打开已有的HarmonyOS工程。
2.
右键项目名称,选择 New -> Folder 新建一个名为 libs 的文件夹。将 cmcasdk-default.tgz 复制到 libs 文件夹下。
3.
在文件夹下 oh-package.json5 添加依赖:
"dependencies": {
    "cmcasdk": "file:./src/libs/cmcasdk-default.tgz"
}
4.
执行 ohpm install,执行成功后
5.
module.json5"requestPermissions" 中添加使用网络的权限:
{
    "name": "ohos.permission.INTERNET"
}
6.
API支持14 (5.0.2)

接口调用

1. 获取token

/**
* 获取token
* @param url 请求地址
* @param msisdn 手机号码
* @returns
*/
export async function tokenPostRequest(url: string, msisdn: string): Promise<http.HttpResponse> {}

接口调用示例

onClick(async () => {
        try {
             const response = await tokenPostRequest(
              this.url, //传入的IP地址
              5          this.phoneNumber  //手机
              );
              if (response.responseCode === 200) {
                let rspData = JSON.parse(response.result.toString()) as RespData;
                 let tokenRes = parseResponseGetToken(rspData)//解析出来token
                 promptAction.showToast({ message: '请求成功!获取到的token是===》' + tokenRes });
                 this.responseData = tokenRes;
                 console.info('tokenRes========>' + tokenRes);
    
               }
             } catch (error) {
               this.responseData = error.message;
             }
      

2.申请证书

 /***
 * 获取公钥
 */
export async function getPubKey() : Promise{}

/**
 * 获取私钥
 * @returns
 */
 export async function getPriKey() : Promise{}
      
  /**
 * 申请证书
 * @param url
 * @param token
 * @param data (
 *        algType: string; 算法类型
          deviceType: string;v设备类型
          imei: string;设备imei
          imsi: string;设备imsi
           misdn: string;手机号码
           publicKey: string;公钥
                      transactionID: string;)时间ID
  * @returns
  */
 export async function applyCertPostRequest(url: string, token: string, data: object): Promise {
    
调用示例
onClick(async () => {
                     ToastUtil.showLong("申请证书中请稍后。。。")
                      // 加载状态层
             
                      // if(StrUtil.isEmpty(await PreferencesUtil.getStringSync(CERT)) && !StrUtil.equal(this.phoneNumber,await PreferencesUtil.getStringSync(MSISDN))){
                      let pubKey = await getPubKey(); //公钥
                  
                      let applyCertBean = new ApplyCertBean();
                      let applyCert: BaseBean = new BaseBean();
                       applyCertBean.misdn = this.phoneNumber;
                       applyCertBean.transactionID = "20250221103647665199";
                       applyCertBean.algType = "1";
                       applyCertBean.deviceType = 'M2007J22C';
                       applyCertBean.imei = "a40174a8b94cb592";
                       applyCertBean.imsi = "a40174a8b94cb592";
                       applyCertBean.publicKey = pubKey;
                       applyCert.data = applyCertBean; //拼接data
                       try {
                         const response = await applyCertPostRequest(
                           this.url,
                           this.responseData, applyCert
                         );
                
                         if (response.responseCode === 200) {
                           this.isLoading = false  // 无论成功失败都关闭加载
                           let rspCertData = JSON.parse(response.result.toString()) as RespData;
                           let cert = parseResponseGetCert(rspCertData) //解析出来证书
                           this.certTextInfo = cert 
                           PreferencesUtil.putSync(CERT, cert);
                         }
                       } catch (error) {
                         this.isLoading = false  // 无论成功失败都关闭加载
                         this.certTextInfo = error.message;
                       }
                    

3.获取算法类型

/**
* 获取算法类型
* @param url
* @param qrString 二维码信息
* @returns 
*/
export async function getAlgTypePostStrRequest(url: string, qrString: string): Promise {—}
                    
调用示例
onClick(async () => {
                       ToastUtil.showLong("申请证书中请稍后。。。")
                       // 加载状态层
            
                       // if(StrUtil.isEmpty(await PreferencesUtil.getStringSync(CERT)) && !StrUtil.equal(this.phoneNumber,await PreferencesUtil.getStringSync(MSISDN))){
                       let pubKey = await getPubKey(); //公钥
                   
                       let applyCertBean = new ApplyCertBean();
                       let applyCert: BaseBean = new BaseBean();
                        applyCertBean.misdn = this.phoneNumber;
                        applyCertBean.transactionID = "20250221103647665199";
                        applyCertBean.algType = "1";
                        applyCertBean.deviceType = 'M2007J22C';
                        applyCertBean.imei = "a40174a8b94cb592";
                        applyCertBean.imsi = "a40174a8b94cb592";
                        applyCertBean.publicKey = pubKey;
                        applyCert.data = applyCertBean; //拼接data
                        try {
                          const response = await applyCertPostRequest(
                            this.url,
                            this.responseData, applyCert
                          );
            
                          if (response.responseCode === 200) {
                            this.isLoading = false  // 无论成功失败都关闭加载
                            let rspCertData = JSON.parse(response.result.toString()) as RespData;
                            let cert = parseResponseGetCert(rspCertData) //解析出来证书
                            this.certTextInfo = cert 
                            PreferencesUtil.putSync(CERT, cert);
                          }
                        } catch (error) {
                          this.isLoading = false  // 无论成功失败都关闭加载
                          this.certTextInfo = error.message;
                    }
                    

3.获取算法类型

 /**
  * 获取算法类型
  * @param url
  * @param qrString 二维码信息
  * @returns 
  */
 export async function getAlgTypePostStrRequest(url: string, qrString: string): Promise {—}
调用示例
onClick(async () => {
                    const algTypeResp = await getAlgTypePostStrRequest(
                      this.url,
                      this.mStrQrtext
                    );
                    if (algTypeResp.responseCode === 200) {
              
                      let rspAlgTypeData = JSON.parse(algTypeResp.result.toString()) as RespData;
                      this.rspAlgTypeData = JSON.stringify(algTypeResp.result);
                       let getPlatFormData = parseResponseGetPlatFormName(rspAlgTypeData);//解析出来的平台名称
                       promptAction.showToast({ message: '平台名称是!' + getPlatFormData });
                     }
                   });
    

4.查询证书

 /**
 * 查询证书
 * @param url
 * @param data {
 *  msisdn: string;手机号码
    algType: number;算法类型
    certNo: string;证书序列号
 * }
 * @returns
  */
 export async function QueryCertRequest(url: string, data: object): Promise {
    
调用示例
onClick(async () => {
                  let certNoData = await getCertNo(this.certTextInfo);
                  // 使用 await 等待请求完成(看似同步)
                  let queryCertBean = new QueryCertBean();
                  queryCertBean.certNo = certNoData;
                  queryCertBean.algType = 1;
                  queryCertBean.msisdn = this.phoneNumber;
                  let queryCertBeanData: BaseBean = new BaseBean()
                  queryCertBeanData.data = queryCertBean;
                  const queryCertResp = await QueryCertRequest(
                    this.url,
                    queryCertBeanData
                  );
                  if (queryCertResp.responseCode === 200) {
             
                    this.rspQueryData = JSON.stringify(queryCertResp.result);
                    promptAction.showToast({ message: '查询证书的结果是====》' + queryCertResp.result });
                  }
                });
    

5.扫码登录

 /**
 * 扫码登录
 * @param url
 * @param qrCode 二维码信息
 * @param userId  userID
 * @returns
 */
export async function QrLoginPostRequest(url: string,qrCode :string,userId:string): Promise {
    

6.加密

/**
 * 加密
 * @param orgData 原文
 * @param pinStr 6位PIN
 * @returns 
*/
export async function Encrypted(orgData :string,pinStr :string): Promise {
    
调用示例
onClick(async () => {
                    let str = await Encrypted(this.encryptedStrData, this.setPin);
                    promptAction.showToast({ message: `加密后的数据是后的数据是: ${await str}` });
                    this.dataStr = str;
                      });

8.设置PIN

/**
  * 设置PIN
  * @param pinStr
  * @returns
*/
 
 export async function SettingPIN(pinStr: string): Promise {}
调用示例
onClick(async () => {
                let str = SettingPIN(this.setPin);
                promptAction.showToast({ message: `` + await str });
              }).width(320);
            

9.重置PIN

/** * 重置PIN * @param pinStr * @returns    */ export async function ReSettingPIN(pinStrData: string): Promise {}
调用示例
 .onClick(async () => {
                 let reset =  ReSettingPIN(this.reSetPIN);
                 promptAction.showToast({ message: `` + await reset });
               });
    

10.修改PIN

/**
 * 修改PIN
 * @param orgPinStr 原PIN
 * @param endPin 修改后的PIN
 * @returns
*/
export async function ChangerPIN(orgPinStr: string,endPin:string): Promise {}
  
调用示例
Button("修改PIN").width(320)
           .onClick(async () => {
             let str = ChangerPIN(this.oldPIN,this.newPIN);
             promptAction.showToast({ message: `` + await str });
           });