You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Ionic Cordova移动应用访问Hyperledger Composer区块链业务网络?

嘿,我来帮你梳理清楚这个问题——用Ionic Cordova访问Hyperledger Composer其实不需要每个参与者都跑REST服务器,下面一步步给你讲清楚架构、配置和示例:

如何用Ionic Cordova应用访问Hyperledger Composer业务网络

1. 核心架构:无需每个参与者部署REST服务器

先给你吃个定心丸:完全不需要每个参与者都运行composer-rest-server。正确的做法是:管理员在服务器端部署一个(或集群化的)composer-rest-server作为API网关,所有移动端参与者通过这个网关和区块链交互就行。这样既降低了参与者的门槛,也方便管理员统一维护和管控权限。

2. 服务器端:配置composer-rest-server

首先确保你的业务网络已经成功部署到Hyperledger Fabric集群,然后在服务器上完成以下步骤:

  • 先安装依赖:npm install -g composer-rest-server
  • 启动REST服务(给你一个常用的测试环境配置,生产环境要调整安全参数):
composer-rest-server -c admin@your-business-network -n never -u true -d true -w true

参数解释一下:

  • -c:指定管理员身份对应的业务网络连接配置(比如admin@my-supply-chain-network)
  • -n never:测试环境禁用TLS,生产环境记得改成-n true启用加密
  • -u true:启用用户注册功能,允许移动端用户通过API获取访问令牌
  • -d true:自动生成对应业务网络的动态API
  • -w true:开启WebSocket支持,方便移动端监听区块链实时事件(比如交易完成通知)

启动后,REST服务默认跑在http://你的服务器IP:3000,你可以直接访问这个地址打开Swagger UI,先手动测试API是否正常。

3. Ionic Cordova应用:配置连接与API调用

在Ionic应用里,我们可以用Angular自带的HttpClient来调用REST API,步骤如下:

步骤1:配置API基础地址

在src/environments/environment.ts里添加服务器地址,方便后续修改:

export const environment = {
  production: false,
  composerApiBaseUrl: 'http://你的服务器IP:3000/api'
};

步骤2:封装Composer API服务

先生成一个服务来统一处理和REST服务器的交互:

ionic generate service services/composer-api

然后在composer-api.service.ts里编写核心方法:

import { Injectable } from '@angular/core';
import { HttpClient, HttpHeaders } from '@angular/common/http';
import { environment } from '../../environments/environment';

@Injectable({
  providedIn: 'root'
})
export class ComposerApiService {
  private apiBaseUrl = environment.composerApiBaseUrl;
  private authToken: string | null = null;

  constructor(private http: HttpClient) {}

  // 第一步:用户用管理员分配的密钥注册,获取访问令牌
  registerUser(participantId: string, enrollmentSecret: string) {
    return this.http.post(`${this.apiBaseUrl}/system/identities/issue`, {
      participant: `net.your-namespace.YourParticipant#${participantId}`,
      userID: participantId,
      enrollmentSecret: enrollmentSecret
    });
  }

  // 设置认证令牌,后续所有请求都要带上
  setAuthToken(token: string) {
    this.authToken = token;
    // 把令牌存在安全存储里(生产环境建议用Ionic Secure Storage,这里先用localStorage示例)
    localStorage.setItem('composer_auth_token', token);
  }

  // 从本地存储加载令牌
  loadAuthToken() {
    const token = localStorage.getItem('composer_auth_token');
    if (token) {
      this.authToken = token;
    }
  }

  // 示例:查询业务网络中的资产
  getAssets(assetType: string) {
    if (!this.authToken) throw new Error('请先登录');
    const headers = new HttpHeaders({
      'X-Access-Token': this.authToken
    });
    return this.http.get(`${this.apiBaseUrl}/${assetType}`, { headers });
  }

  // 示例:提交交易到区块链
  submitTransaction(transactionType: string, transactionData: any) {
    if (!this.authToken) throw new Error('请先登录');
    const headers = new HttpHeaders({
      'X-Access-Token': this.authToken,
      'Content-Type': 'application/json'
    });
    return this.http.post(`${this.apiBaseUrl}/${transactionType}`, transactionData, { headers });
  }
}

步骤3:在页面中使用服务

比如在首页实现登录和查询资产的功能,home.page.ts示例:

import { Component } from '@angular/core';
import { ComposerApiService } from '../services/composer-api.service';

@Component({
  selector: 'app-home',
  templateUrl: 'home.page.html',
  styleUrls: ['home.page.scss'],
})
export class HomePage {
  participantId = '';
  enrollmentSecret = '';
  assets: any[] = [];

  constructor(private composerApi: ComposerApiService) {}

  ngOnInit() {
    // 页面加载时自动加载本地存储的令牌
    this.composerApi.loadAuthToken();
  }

  async onLogin() {
    try {
      const response = await this.composerApi.registerUser(this.participantId, this.enrollmentSecret).toPromise();
      // 保存令牌并设置到服务中
      this.composerApi.setAuthToken(response['token']);
      // 登录成功后查询资产
      await this.loadAssets();
    } catch (error) {
      console.error('登录失败:', error);
      alert('登录失败,请检查参与者ID和密钥是否正确');
    }
  }

  async loadAssets() {
    try {
      // 替换成你业务网络中的资产类型,比如'Product'
      const assets = await this.composerApi.getAssets('Product').toPromise();
      this.assets = assets as any[];
    } catch (error) {
      console.error('加载资产失败:', error);
    }
  }
}

步骤4:处理跨域问题

开发阶段如果在浏览器中运行Ionic应用,可能会遇到CORS错误。解决方法有两个:

  1. 启动composer-rest-server时添加-a true参数,允许所有来源的跨域请求(测试环境用,生产环境别这么干):
composer-rest-server -c admin@your-business-network -n never -u true -d true -w true -a true
  1. 用Nginx做反向代理,把Ionic应用的请求转发到REST服务器,同时配置CORS规则(生产环境推荐)。

4. 关键注意事项

  • 身份管理:管理员需要预先在业务网络中创建参与者(可以用Composer CLI或Admin UI),然后给每个参与者分配唯一的enrollmentSecret,用户在移动端用这个密钥注册获取令牌。
  • 安全性:生产环境必须启用TLS(启动REST服务时用-n true),并且不要用-a true,要指定允许的移动端域名;令牌要存在安全的存储中(比如Ionic Secure Storage),不要用localStorage。
  • 实时事件:如果需要监听区块链的实时事件(比如交易被确认),可以用WebSocket连接到ws://你的服务器IP:3000,订阅对应的事件主题。

内容的提问来源于stack exchange,提问作者Arnaud Carrere

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 04:02:40