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
相关产品推荐
相关产品推荐

