从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 18:45

嗨安东,

您能够解决此问题吗? 我没有HTTP 500错误的解释,但发现直接通过curl和其他前端客户端调用某些服务相当挑剔。 不知道有多少SAP对其他产品感兴趣,但是看起来他们在为您解决此问题。

thx,gm

小灯塔
3楼-- · 2020-08-15 19:04

您是否尝试过致电您的 通过邮递员使用API​​?

我建议您获取令牌,然后通过邮递员调用您的API。
好吧,我更喜欢AJAX调用,所以我只向您提供AJAX的代码段。

在下面的代码中,我们正在调用API并接收令牌; 然后再次使用该令牌和主体调用API。 下面提到的代码是在MTA UI5下的node.js中编写的。

//更新证明历史
 app.get('/UPDATE_OBJECT_HISTORY',函数(req,res,next){
 var uname = req.query.USERNAME;
 var pass = req.query.PASSWORD;
 var dats = req.query.TIMESTAMP;
//获取令牌
 var tokenoptions = {
 方法:" GET",
 网址:configData.tokenUrl,
 qs:{
 grant_type:" client_credentials"
 },
 标头:{
 'cache-control':'no-cache',
 授权:configData.authorization
 }
 };
 请求(令牌选项,功能(错误,响应,正文){
 如果(错误)抛出新的错误(错误);
 数据= JSON.parse(body);
 令牌= data.access_token;
 var dataoptions = {
 方法:" PATCH",
 网址:configData.blockServUrl +'/logon',
 标头:{
 'cache-control':'no-cache',
 'Content-Type':'application/json',
 接受:" application/json",
 授权:" Bearer" +令牌
 },
//对您而言重要
 身体: {
 使用者名称:uname,
 密码:通过
 时间戳:日期
 },
 json:是
 };


 request(dataoptions,function(error,response,body){
 如果(错误)抛出新的错误(错误);
 res.json(globalBody);
 });
 });
 });
 
软件心理学工程师
4楼-- · 2020-08-15 19:01

嗨,格雷戈里,

不,我没有足够的时间让它无法正常运行。 克里斯托弗·弗里斯(Christopher Fries)的回答确实说明了正在发生的事情。 将来我很可能会再试一次。

谢谢,
安东

樱桃小丸子0093
5楼-- · 2020-08-15 18:59

一个问题。 您是否正在区块链服务和UI5调用之间使用区块链启用服务? 呼叫流程必须类似于上面所述,其中区块链服务可以是多链,仲裁或超级账本。

灬番茄
6楼-- · 2020-08-15 18:39

嗨,克里斯托弗,

您的代码确实是我的临时解决方案,因为理想情况下,我希望看到一个在PoS中创建每个交易的用户。

有趣 我在生成的技术令牌中看到了范围" uaa.resource"。 但这是一个多带带的对话:)

非常感谢您的帮助!

干杯,
Anton

Alawn_Xu
7楼-- · 2020-08-15 18:52

嘿,我也遇到了问题 状态证明API。 我试图从SAP API业务中心进行调用,但收到消息:"未经授权"。 我提供了所有OAuth2.0信息...是否需要进行一些其他配置才能调用api?

一周热门 更多>