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

Hyperledger Composer身份签发报错:无法下载卡片且请求类型未识别

解决Hyperledger Composer身份签发API的卡片下载问题

首先,那个Treating unknown remoting type "issueidentityrequest" as "any"的警告其实是关键线索——它说明你的AJAX请求没有按照Composer API要求的格式发送,服务端没法正确识别你提交的请求类型。虽然身份侥幸创建成功了,但后续的卡片下载流程因为请求格式错误直接失败了。

问题根源

你当前的AJAX请求有两个核心问题:

  • jQuery默认会把data里的对象编码成application/x-www-form-urlencoded格式,但Composer的/api/system/identities/issue接口需要的是application/json格式的请求体
  • 没有显式指定请求的Content-Type,服务端无法正确解析你的请求数据,只能把它当作任意类型处理

修复后的代码

把你的AJAX请求调整成下面这样,重点是指定Content-Type并将请求数据序列化为JSON字符串:

const identity = { 
  "participant": `org.acme.sample.Company#${companyId}`, 
  "userID": companyId, 
  "options": {} 
};

$.ajax({ 
  url: "http://localhost:3000/api/system/identities/issue", 
  type: "POST", 
  dataType: 'blob',
  contentType: 'application/json', // 关键:指定JSON格式的请求体
  data: JSON.stringify(identity),   // 关键:把对象序列化为JSON字符串
  success: function (cardData) { 
    console.log('CARD-DATA', cardData);
    // 可以在这里添加卡片保存逻辑,比如生成下载链接
    const url = window.URL.createObjectURL(cardData);
    const downloadLink = document.createElement('a');
    downloadLink.href = url;
    downloadLink.download = `${companyId}.card`;
    document.body.appendChild(downloadLink);
    downloadLink.click();
    window.URL.revokeObjectURL(url);
  },
  error: function (xhr, status, error) { 
    console.log("请求出错详情:", error);
    console.log("服务端响应内容:", xhr.responseText);
  }, 
  complete: function (xhr, status) { 
    console.log("请求完成!"); 
  } 
});

额外说明

为什么Composer Playground能成功?因为Playground内部发送请求时,严格遵循了Composer API的规范:设置了正确的Content-Type: application/json,并且把请求数据序列化为标准JSON格式,服务端能正确识别IssueIdentityRequest类型,所以创建身份+返回卡片的整个流程都能正常执行。

内容的提问来源于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 06:16:24