【问题标题】:404 requesting SyncStatus... a.k.a. Status404 请求同步状态...又名状态
【发布时间】:2013-08-21 20:52:38
【问题描述】:

我正在尝试进行查询以获取失败的 SyncStatus 对象。在 API Explorer 中,您必须选择“状态”菜单选项才能对此进行测试并将请求提交到 https:///sb/STATUS/v2/,即使响应 XML 将其称为 SyncStatus... 所以不是真的很确定应该叫什么。

但这不是我的问题。我的问题是,当我提交请求时(详情如下),我收​​到 404 错误。它在 API Explorer 中完美运行,正文中的 XML 完全相同。我一直在对 API 进行其他调用,所以我知道我的框架正在工作。

帮助?

请求标头

Content-Length: 322
Authorization:
OAuth
oauth_consumer_key="KEY",
oauth_nonce="NONCE",
oauth_signature="SIG",
oauth_signature_method="HMAC-SHA1",
oauth_timestamp="1377117362",
oauth_token="TOKEN",
oauth_version="1.0"
Content-Type: text/xml
Host: services.intuit.com
Connection: Keep-Alive

请求正文

<?xml version="1.0" encoding="UTF-8" standalone="no" ?><SyncStatusRequest ErroredObjectsOnly="true" xmlns="http://www.intuit.com/sb/cdm/v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.intuit.com/sb/cdm/xmlrequest RestDataFilter.xsd"><OfferingId>ipp</OfferingId></SyncStatusRequest>

响应(添加了一些新行以提高可读性)

<html><head><title>JBoss Web/2.1.12.GA-patch-03 - Error report</title><style><!--H1 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:22px;} H2 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:16px;} H3 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:14px;} BODY {font-family:Tahoma,Arial,sans-serif;color:black;background-color:white;} B {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;} P {font-family:Tahoma,Arial,sans-serif;background:white;color:black;font-size:12px;}A {color : black;}A.name {color : black;}HR {color : #525D76;}--></style> </head>
<body>
<h1>HTTP Status 404 - Null subresource for path: https://internal.services.intuit.com/sb/status/v2/725079435</h1>
<HR size="1" noshade="noshade">
<p>
<b>type</b> 
Status report</p><p><b>message</b> <u>Null subresource for path: https://internal.services.intuit.com/sb/status/v2/725079435</u>
</p><p>
<b>description</b> 
<u>The requested resource (Null subresource for path: https://internal.services.intuit.com/sb/status/v2/725079435) is not available.</u>
</p>
<HR size="1" noshade="noshade">
<h3>JBoss Web/2.1.12.GA-patch-03</h3>
</body></html>

编辑:我发现我使用的是 GET 而不是 POST。我已经解决了这个问题,但现在我在响应中得到了一个不同的错误:

NEW RESPONSE(为提高可读性添加了新行):

<?xml version="1.0" ?>
<RestResponse xmlns="http://www.intuit.com/sb/cdm/v2">
<Error RequestId="347b6e52b653439493b57db68250b61a">
<RequestName>ErrorRequest</RequestName>
<ProcessedTime>2013-08-21T21:57:50.693Z</ProcessedTime>
<ErrorCode>-2001</ErrorCode>
<ErrorDesc>Premature end of file.</ErrorDesc>
</Error>
</RestResponse>

【问题讨论】:

  • 不过,在使用 API Explorer 时,我不必发送任何这些东西。查看 Mana 在下面提到的第一个 Post Body,只是一个空的 标记,根本没有提及 ID 或类型。当我在 API Explorer 中运行该查询时,它会为我提供所有错误对象的列表,无论是什么类型。这就是我想在我的应用中得到的。
  • 其实在你给我的链接里,它特别说我可以用这个body请求SyncStatus:intuit.com/sb/cdm/v2"> 这将为我提供所有错误对象的列表。我错过了什么吗?
  • 好的,我仍然感谢您对这个问题的关注,我很难真正解决我在 API 上遇到的问题。您对文件过早结束错误有任何见解吗?

标签: intuit-partner-platform


【解决方案1】:

刚才,我已经尝试过使用 devkit。我正在共享端点和帖子正文。请试一试,让我知道它是否也适合您。

必填页眉

Content-Type: text/xml

帖子正文

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<SyncStatusRequest ErroredObjectsOnly="true" xmlns="http://www.intuit.com/sb/cdm/v2"/>

另一个 发布正文(当我传递任何 Id 时)

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<SyncStatusRequest ErroredObjectsOnly="true" xmlns="http://www.intuit.com/sb/cdm/v2">
    <NgIdSet>
        <NgId>660607</NgId>
        <NgObjectType>Customer</NgObjectType>
    </NgIdSet>
</SyncStatusRequest>

端点

https://services.intuit.com/sb/status/v2/657117515

Java 代码

public void testSyncStatus(String id) {
    QBSyncStatusRequest syncStatusRequest = QBObjectFactory.getQBObject(
            context, QBSyncStatusRequest.class);
    syncStatusRequest.setErroredObjectsOnly(true);
    NgIdSet ngIdSet = new NgIdSet();
    ngIdSet.setNgId(id);
    ngIdSet.setNgObjectType(ObjectName.CUSTOMER);
    List<NgIdSet> idSets = new ArrayList<NgIdSet>();
    idSets.add(ngIdSet);
    syncStatusRequest.setNgIdSet(idSets);
    logger.debug("inside testSyncStatus");

    try {
        QBSyncStatusRequestService service = QBServiceFactory.getService(
                context, QBSyncStatusRequestService.class);
        List<QBSyncStatusResponse> response = service.getSyncStatus(
                context, syncStatusRequest);
        System.out.println(response);
        Iterator<QBSyncStatusResponse> iterator = response.iterator();

        while (iterator.hasNext()) {
            QBSyncStatusResponse each = (QBSyncStatusResponse) iterator
                    .next();
            System.out.println(" Message Code - " + each.getMessageCode()
                    + " Message Desc - " + each.getMessageDesc());
        }
    } catch (QBInvalidContextException e) {
        e.printStackTrace();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

谢谢

【讨论】:

  • 嗯,你帮我找出了我的一个问题。我使用的是 GET,而不是 POST。但是,我现在有另一个错误。查看我对原始问题的修改。
  • 顺便说一句,当我尝试您的帖子正文的任一版本时,我会遇到同样的文件过早结束错误,包括空的 SyncStatusRequest 标记和带有 ID 的标记(使用实际上在我使用 API Explorer 时的响应)
  • 如果可能的话,你能分享一下代码吗?我无法重现此错误。谢谢
  • 我正在使用 Google Go 进行开发,它没有官方的 Intuit 开发工具包......所以会有很多代码要展示。
  • 它有任何 OAuth 库吗?您可以分享它的名称和/或下载链接。我将尝试使用 Go 创建 POC(我不想错过这个学习机会 :))谢谢
猜你喜欢
  • 1970-01-01
  • 2016-03-22
  • 2022-11-13
  • 2020-09-18
  • 2013-04-10
  • 2021-04-10
  • 2019-10-12
  • 2015-07-19
  • 2023-01-21
相关资源
最近更新 更多