从Web应用程序调用区块链状态证明服务时出错

2020-08-15 18:09发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


大家好,

能帮我从我的应用程序中调用状态证明服务的实例吗?

我一直在关注本指南以构建服务。 它已经启动并正在运行,并且从SAP API Hub调用它没有任何问题。 这是我在下面保存了ID为" 3"的原始示例有效负载后的201响应:

 {" test":" value"} 

现在,如果我尝试生成JavaScript代码段,并在自己的应用程序中使用它直接调用该服务,则会收到500错误。 这是我使用的代码:

 writeData:function(){
 var data = JSON.stringify({
 " test":"值"
 });
 var xhr = new XMLHttpRequest();
 xhr.withCredentials = false;
 xhr.open(" POST"," https://blockchain-service.cfapps.us10.hana.ondemand.com/blockchain/proofOfState/api/v1/states/4");
 xhr.setRequestHeader(" Content-Type"," application/json");
 xhr.setRequestHeader(" Accept"," application/json");
 xhr.setRequestHeader(" Access-Control-Allow-Credentials"," true");
 xhr.setRequestHeader(" Access-Control-Allow-Origin"," https:// -approuter.cfapps.us10.hana.ondemand.com");
 xhr.setRequestHeader(" Access-Control-Allow-Headers","访问控制允许来源,授权,内容类型");
             xhr.setRequestHeader(" Access-Control-Allow-Methods"," GET,HEAD,PUT,PATCH,POST,DELETE");
 xhr.setRequestHeader(" Authorization"," Bearer ");

 xhr.onload = function(){
 如果(xhr.status === 200){
 alert("已成功调用API!");
 }其他{
 alert("调用API失败");
 }
 };
 xhr.send(data);
 }
 
这是该服务的500条响应:

{"错误":{"代码":500,"消息":" {\" statusCode \":500}-请在 https://help上查看我们的文档。 sap.com/viewer/p/BLOCKCHAIN_APPLICATION_ENABLEMENT /"}}


请注意,这不是403或CORS错误。 我已经解决了。 呼叫确实到达了服务,我可以在仪表板中看到它,如下所示:

我不明白为什么是500? 最糟糕的是,该服务没有提供说明,并且该错误在任何地方都无法跟踪。 我怀疑我的有效负载不正确,但是文档中没有提供任何适合后期操作的有效负载示例。

因此,如果您能提出任何建议或提供示例说明,我将不胜感激 服务应该被调用。

谢谢!

-------------------------------------- ----------------

我已经查看了以下示例,但找不到答案:
https://developers.sap.com/tutorials/blockchain-application-enablement-proofstate.html
https://help.sap.com/viewer/71a0bb282b2144c6b27fefc772394cfb/BLOCK-AIN4
https://github.wdf.sap.corp/区块链/时间戳/blob/master/index.js

(141.5 kB)

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


大家好,

能帮我从我的应用程序中调用状态证明服务的实例吗?

我一直在关注本指南以构建服务。 它已经启动并正在运行,并且从SAP API Hub调用它没有任何问题。 这是我在下面保存了ID为" 3"的原始示例有效负载后的201响应:

 {" test":" value"} 

现在,如果我尝试生成JavaScript代码段,并在自己的应用程序中使用它直接调用该服务,则会收到500错误。 这是我使用的代码:

 writeData:function(){
 var data = JSON.stringify({
 " test":"值"
 });
 var xhr = new XMLHttpRequest();
 xhr.withCredentials = false;
 xhr.open(" POST"," https://blockchain-service.cfapps.us10.hana.ondemand.com/blockchain/proofOfState/api/v1/states/4");
 xhr.setRequestHeader(" Content-Type"," application/json");
 xhr.setRequestHeader(" Accept"," application/json");
 xhr.setRequestHeader(" Access-Control-Allow-Credentials"," true");
 xhr.setRequestHeader(" Access-Control-Allow-Origin"," https:// -approuter.cfapps.us10.hana.ondemand.com");
 xhr.setRequestHeader(" Access-Control-Allow-Headers","访问控制允许来源,授权,内容类型");
             xhr.setRequestHeader(" Access-Control-Allow-Methods"," GET,HEAD,PUT,PATCH,POST,DELETE");
 xhr.setRequestHeader(" Authorization"," Bearer ");

 xhr.onload = function(){
 如果(xhr.status === 200){
 alert("已成功调用API!");
 }其他{
 alert("调用API失败");
 }
 };
 xhr.send(data);
 }
 
这是该服务的500条响应:

{"错误":{"代码":500,"消息":" {\" statusCode \":500}-请在 https://help上查看我们的文档。 sap.com/viewer/p/BLOCKCHAIN_APPLICATION_ENABLEMENT /"}}


请注意,这不是403或CORS错误。 我已经解决了。 呼叫确实到达了服务,我可以在仪表板中看到它,如下所示:

我不明白为什么是500? 最糟糕的是,该服务没有提供说明,并且该错误在任何地方都无法跟踪。 我怀疑我的有效负载不正确,但是文档中没有提供任何适合后期操作的有效负载示例。

因此,如果您能提出任何建议或提供示例说明,我将不胜感激 服务应该被调用。

谢谢!

-------------------------------------- ----------------

我已经查看了以下示例,但找不到答案:
https://developers.sap.com/tutorials/blockchain-application-enablement-proofstate.html
https://help.sap.com/viewer/71a0bb282b2144c6b27fefc772394cfb/BLOCK-AIN4
https://github.wdf.sap.corp/区块链/时间戳/blob/master/index.js

(141.5 kB)
付费偷看设置
发送
9条回答
哎,真难
1楼 · 2020-08-15 18:53.采纳回答

安东,

我来自SAP区块链团队,并检查了您的问题。 看来该问题是由令牌交换引起的,该令牌交换以某种方式无法正常工作。

我在您的代码中看到,您传递了用户令牌来检索refresh_token,然后通过刷新令牌来检索服务的技术令牌(因此,技术令牌会随用户数据进行扩展)。 问题是所需的uaa.user范围似乎丢失了。 如果您使用该令牌调用区块链服务,它也想为结构服务进行令牌交换,但由于范围丢失而失败。 (这导致了500错误-我们将在此处改善消息和状态代码)。

目前,对您来说,最简单的选择是仅使用技术令牌而不进行令牌交换来调用服务。

这是一个代码示例:

//获取访问令牌
 request.post({
     网址:baas_options.authentication.url +'/oauth/token?grant_type = client_credentials',
     json:是的,
     标头:{
         授权:"基本" + Buffer.from(baas_options.authentication.clientId +':'+ baas_options.authentication.clientSecret,'utf8')
             .toString('base64')
     }
 },函数(err,r,body){
    //呼叫BAE服务
     request.get({
         网址:bcService.serviceUrl +'/states/',
         json:是的,
         标头:{
             授权:" Bearer" + body.access_token,
         }
     },函数(err,r,body2){
        //…
     });
 }); 

最好

Christopher

当学会了学习
2楼-- · 2020-08-15 19:03

试图直接通过Postman进行调用。 相同结果500,无说明。

POST到 https://blockchain-service.cfapps.us10.hana.ondemand.com/blockchain/proofOfState/api/v1/states/15

 {
     "错误":{
         "代码":500,
         " message":" {\" statusCode \":500}-请在https://help.sap.com/viewer/p/BLOCKCHAIN_APPLICATION_ENABLEMENT/中查看我们的文档。
     }
 }
 
Alawn_Xu
3楼-- · 2020-08-15 18:59

您好Rudramani,

我很高兴您没有为此放弃。

是的,您的照片恰好是我的通话顺序 应用程序。 除了一点点外,UI5和Node.js应用之间还有一个应用路由器。 我已经在"状态的区块链证明"服务计划下创建了一个区块链应用程序启用服务实例,并将其连接到Hyperledger。

从Node.js应用程序调用服务失败后,我 ve尝试使用SAP API Hub生成的JavaScript代码段直接从UI5调用它(我的第一篇文章是该问题的一部分)。 我在那里也失败了。 试图直接从Postman调用它-也失败了。 不知道该怎么办。 我所有的呼叫都到达了"区块链应用程序启用服务"实例,但是返回状态500。

我想我将尝试创建另一种类型的BC AE Service实例并尝试使用它。 不知道我的错误在哪里。

谢谢,
安东

一周热门 更多>