soapenv: Server.userException -> ошибка от eBay Trading API GetSellingManagerSoldListingsRequest - PullRequest
0 голосов
/ 07 ноября 2018

Спасибо за советы Ванкалара и XML-коды (см .: eBay Trading API - структура вызовов в Delphi ), я сделал тестовые программы, как показано ниже:

procedure TForm1.Button1Click(Sender: TObject);
var
  sSOAP: String;
  sCallName, sSiteID, sVersion: String;
  sResponseBody: TStringStream;
  xDoc: IXMLDocument;
begin
  sCallName := 'GetSellingManagerSoldListingsRequest';
  sSiteID := '15';                       // 15 for Australia
  sVersion := '945';

  sSOAP := '<?xml version="1.0"?>'
        + '<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"'
        + '  xmlns:xsd="http://www.w3.org/2001/XMLSchema"'
        + '  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">'
        + '  <SOAP-ENV:Header>'
        + '    <NS1:RequesterCredentials xmlns:NS1="urn:ebay:apis:eBLBaseComponents">'
        + '      <eBayAuthToken xmlns="urn:ebay:apis:eBLBaseComponents">' + sToken + '</eBayAuthToken>'
        + '      <NS1:Credentials>'
        + '        <AppId xmlns="urn:ebay:apis:eBLBaseComponents">' + sAppID + '</AppId>'
        + '        <DevId xmlns="urn:ebay:apis:eBLBaseComponents">' + sDevID + '</DevId>'
        + '        <AuthCert xmlns="urn:ebay:apis:eBLBaseComponents">' + sCertID + '</AuthCert>'
        + '      </NS1:Credentials>'
        + '    </NS1:RequesterCredentials>'
        + '  </SOAP-ENV:Header>'
        + '  <SOAP-ENV:Body>'
        + '    <GetSellingManagerSoldListingsRequest xmlns="urn:ebay:apis:eBLBaseComponents">'
        + '      <DetailLevel>ReturnAll</DetailLevel>'
        + '      <ErrorLanguage>en_GB</ErrorLanguage>'
        + '      <Version>945</Version>'
        {
        + '      <Search>'
        + '        <SearchType>SaleRecordID</SearchType>'
        + '        <SearchValue>' + '1981' + '</SearchValue>'
        + '      </Search>'
        }
        + '    <Archived>false</Archived>'
        + '    <SaleDateRange>'
        + '      <TimeFrom>2018-11-05T17:59:32.939+02:00</TimeFrom>'
        + '      <TimeTo>2018-11-06T23:59:59.940+01:00</TimeTo>'
        + '    </SaleDateRange>'
        + '  </GetSellingManagerSoldListingsRequest>'
        + '</SOAP-ENV:Body>';

  objHttpReqResp.URL := 'https://api.ebay.com/wsapi';

  sResponseBody := TStringStream.Create();
  try
    objHttpReqResp.Execute(sSOAP, sResponseBody);

    xDoc := TXMLDocument.Create(nil);
    xDoc.LoadFromStream(sResponseBody);
    xDoc.SaveToFile('XML_Output.txt');

    memHTML.Lines.LoadFromFile('XML_Output.txt');
    memHTML.Lines.Add('');
  except
    memHTML.Lines.Add('Error happened!');
    memHTML.Lines.Add('');
  end;
end;

Возвращаемый результат:

<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <soapenv:Body>
        <soapenv:Fault>
            <faultcode>soapenv:Server.userException</faultcode>
            <faultstring>org.xml.sax.SAXParseException: XML document structures must start and end within the same entity.</faultstring>
            <detail/>
        </soapenv:Fault>
    </soapenv:Body>
</soapenv:Envelope>

Означает ли это, что:

  1. Информация о пользователе содержит ошибку (Token / AppID / DevID / CertID)?
  2. или Мой код имеет проблему, которая смешала некоторые параметры?

Любой совет? sToken - это токен продавца eBay, и он только что был применен на сайте Developer.ebay.com.

Спасибо.

#

Программа обновлена ​​следующим образом:

procedure TForm1.Button1Click(Sender: TObject);
var
  sXML: String;
  sCallName, sSiteID, sVersion: String;
  sResponseBody: TStringStream;
  xDoc: IXMLDocument;
  sSaleNo: String;
begin
  sCallName := 'GetSellingManagerSoldListingsRequest';
  sSiteID := '15';
  sVersion := '945';
  sSaleNo := '2000';

  sXML := '<?xml version="1.0"?>'
        + '<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"'
        + '  xmlns:xsd="http://www.w3.org/2001/XMLSchema"'
        + '  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">'
        + '  <SOAP-ENV:Header>'
        + '    <NS1:RequesterCredentials xmlns:NS1="urn:ebay:apis:eBLBaseComponents">'
        + '      <eBayAuthToken xmlns="urn:ebay:apis:eBLBaseComponents">' + sToken + '</eBayAuthToken>'
        + '      <NS1:Credentials>'
        + '        <AppId xmlns="urn:ebay:apis:eBLBaseComponents">' + sAppID + '</AppId>'
        + '        <DevId xmlns="urn:ebay:apis:eBLBaseComponents">' + sDevID + '</DevId>'
        + '        <AuthCert xmlns="urn:ebay:apis:eBLBaseComponents">' + sCertID + '</AuthCert>'
        + '      </NS1:Credentials>'
        + '    </NS1:RequesterCredentials>'
        + '  </SOAP-ENV:Header>'
        + '  <SOAP-ENV:Body>'
        + '    <GetSellingManagerSoldListingsRequest xmlns="urn:ebay:apis:eBLBaseComponents">'
        + '      <Archived>false</Archived>'
        + '      <DetailLevel>ReturnAll</DetailLevel>'
        + '      <Filter>PaidNotShipped</Filter>'
        + '      <ErrorLanguage>en_AU</ErrorLanguage>'
        + '      <Version>' + sVersion + '</Version>'
        + '    </GetSellingManagerSoldListingsRequest>'
        + '  </SOAP-ENV:Body>'
        + '</SOAP-ENV:Envelope>';

  objHttpReqResp.URL := 'https://api.sandbox.ebay.com/wsapi'
                      + '?callname=' + sCallName
                      + '&siteid=' + sSiteID
                      + '&appid=' + sAppID
                      + '&version=' + sVersion
                      + '&routing=default';

  sResponseBody := TStringStream.Create();
  try
    objHttpReqResp.Execute(sXML, sResponseBody);

    xDoc := TXMLDocument.Create(nil);
    xDoc.LoadFromStream(sResponseBody);
    xDoc.SaveToFile('XML_Output.txt');

    memHTML.Lines.LoadFromFile('XML_Output.txt');
    memHTML.Lines.Add('');

    memHTML.Lines.Add(objHttpReqResp.URL);
    memHTML.Lines.Add('');
  except
    memHTML.Lines.Add('Error happened!');
    memHTML.Lines.Add('');
  end;
  sResponseBody.Free;
end;

Теперь сообщение об ошибке меняется на:

<faultcode>soapenv:Server.userException</faultcode>
<faultstring>
  com.ebay.app.pres.service.hosting.WebServiceDisabledException:
  The web service GetSellingManagerSoldListingsRequest is not properly
  configured or not found and is disabled.
</faultstring>

Обратитесь к Faltstring, где написано "неправильно настроен". Я прочитал eBay Developer Document https://developer.ebay.com/devzone/xml/docs/reference/ebay/GetSellingManagerSoldListings.html#Request.Pagination.EntriesPerPage, но все еще не знаю, как правильно его настроить.

1 Ответ

0 голосов
/ 11 ноября 2018

Похоже, вы не читали внимательно Документация по EBAY API и Неправильно работает веб-служба xxx настроен или не найден и отключен. в соответствии с предоставлением ссылки для звонков SOAP. Вы называете CallName как:

sCallName := 'GetSellingManagerSoldListingsRequest';

но должно быть:

sCallName := 'GetSellingManagerSoldListings';

Также я думаю, что вместо try ... кроме того, что вы должны использовать try ... finally блок (или оба).

Подумайте, что произойдет, если возникнет исключение во время вашего звонка:

 var
    sResponseBody: TStringStream; 
 begin
 ...
 sResponseBody := TStringStream.Create();
    try
     objHttpReqResp.Execute(sXML, sResponseBody);

   xDoc := TXMLDocument.Create(nil);
   xDoc.LoadFromStream(sResponseBody);
   xDoc.SaveToFile('XML_Output.txt');

    memHTML.Lines.LoadFromFile('XML_Output.txt');
    memHTML.Lines.Add('');

    memHTML.Lines.Add(objHttpReqResp.URL);
    memHTML.Lines.Add('');
except
    memHTML.Lines.Add('Error happened!');
    memHTML.Lines.Add('');
end;
 sResponseBody.Free;

эта строка:

 sResponseBody.Free;

никогда не будет выполнен, что приведет к утечке памяти ...

Я не думаю, что Ты "тупой программист", но ясно видно, что Ты неопытный:)

Переполнение стека - это глоссарий, а не дискуссионный форум, и вы должны это учитывать. Я настоятельно рекомендую вам прочитать Как задать раздел , чтобы избежать понижения голосов и "грубых" комментариев и ответов.

Пожалуйста, примите во внимание, что я не агрессивен здесь, вы, вероятно, поняли, что я потратил пару дней, просто пытаясь помочь Вам, и информация, которую вы, наконец, достигли, - это лучший приз, который я мог выиграть там :)

С уважением

...