【问题标题】:eBay Trading API - calling structure in DelphieBay Trading API - Delphi 中的调用结构
【发布时间】:2018-11-05 13:01:51
【问题描述】:

我正在尝试通过 Delphi 调用 eBay API。经过谷歌和 StackOverflow 的长时间搜索,我现在可以正常使用“GeteBayTime”(Shopping API)和“findItemsByKeywords”(Finding API)了。

当我开始使用 Trading API 进行测试时,我不知道在哪里以及如何插入卖家的账户信息(用户名和密码)。我的第一个交易 API 程序如下所示,它以 API 调用“GetSellingManagerSoldListings”开始。

谁能告诉我一些使交易 API 工作的线索?如果还需要向 HTTP.header 或 Paramters 添加任何其他内容?

谢谢。

procedure TForm1.btnEBayGetSoldListClick(Sender: TObject);
var
  sURL, sResponse, sEndpoint: String;
  jResult: TJSONObject;
  sCallName, sSiteID, sVersion: String;
  k: Integer;
  sParameters: String;
  sHeaders: TStringList;
  sRequestBody: TStringStream;
begin
  // Trading API
  sEndpoint := 'https://api.sandbox.ebay.com/ws/api.dll';

  sCallName := 'GetSellingManagerSoldListingsRequest';
  sSiteID := '15';
  sVersion := '967';
  sAppID := 'myAppID';
  sDevID := 'myDevID';
  sToken : 'myToken';    // OAuth Token?

  sURL := sEndpoint
       + '?callname=' + sCallName
       + '&siteid=' + '15';

  sHeaders := TStringList.Create;
  with sHeaders do begin
    Add('X-EBAY-API-COMPATIBILITY-LEVEL' + '=' + sVersion);
    Add('X-EBAY-API-DEV-NAME' + '=' + sDevID);
    Add('X-EBAY-API-APP-NAME' + '=' + sAppID);
    Add('X-EBAY-API-CERT-NAME' + '=' + sCertID);
    Add('X-EBAY-API-CALL-NAME' + '=' + sCallName);
    Add('X-EBAY-API-SITEID' + '=' + sSiteID);
  end;

  objHTTP.Request.ContentType := 'text/xml';

  with objHTTP.Request.CustomHeaders do begin
    Clear;
    AddStdValues(sHeaders);
  end;
  sHeaders.Free;

  sParameters := '<GetSellingManagerSoldListingsRequest xmlns="urn:ebay:apis:eBLBaseComponents">'
               + '  <RequesterCredentials>'
               + '    <eBayAuthToken>' + sToken + '</eBayAuthToken>'
               + '   <Filter>' + 'PaidNotShipped' + '</Filter>'
               + '  </RequesterCredentials>'
               + '</GetItemTransactionsRequest>';
  sRequestBody := TStringStream.Create(sParameters, TEncoding.UTF8);

  try
    sResponse := objHTTP.Post(sURL, sRequestBody);
    memHTML.Lines.Add(sResponse);
    memHTML.Lines.Add('');
  except
    sResponse := objHTTP.ResponseText;
    memHTML.Lines.Add(sResponse);
    memHTML.Lines.Add('');
  end;
end;

【问题讨论】:

  • 究竟是什么不适合您?您是否收到来自 eBay 的错误回复?如果是这样,它究竟说了什么?您阅读过GetSellingManagerSoldListingsWorking with Selling Manager 文档吗?
  • 您是否注意到您的 XML 格式不正确?你用&lt;GetSellingManagerSoldListingsRequest&gt;打开它,但用&lt;/GetItemTransactionsRequest&gt;而不是&lt;/GetSellingManagerSoldListingsRequest&gt;关闭它
  • 非常感谢 Remy Lebeau。我收到错误消息说请求不匹配,但我根本找不到。让我纠正这个错误并再次测试它。我阅读了那些文件,但无法完全理解它们 -> 像我这样愚蠢的家伙。
  • @RemyLebeau 我粘贴了错误代码作为答案,请您花点时间看看吗?谢谢。

标签: delphi ebay-api trading


【解决方案1】:

开始吧:完成工作的 GetSellingManagerSoldListingsRequest SOAP 信封:

<?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">EbayToken</eBayAuthToken>
        <NS1:Credentials>
            <AppId xmlns="urn:ebay:apis:eBLBaseComponents">xxx</AppId>
            <DevId xmlns="urn:ebay:apis:eBLBaseComponents">xxx</DevId>
            <AuthCert xmlns="urn:ebay:apis:eBLBaseComponents">xxx</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>xxx</SearchValue>
        </Search>
        <Archived>false</Archived>
        <SaleDateRange>
            <TimeFrom>2018-08-12T17:59:32.939+02:00</TimeFrom>
            <TimeTo>2018-11-05T14:59:32.940+01:00</TimeTo>
        </SaleDateRange>
    </GetSellingManagerSoldListingsRequest>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

您可以省略“搜索”标签以获得完整列表。 大多数交易 api 请求都是这样工作的。

在delphi中最简单的方法:

只需将 THTTPReqResp 从 WebServices 选项卡放在表单上而不是 TidHTTP,设置 url (THTTPReqResp1.URL) 并使用 THTTPReqResp1.Execute(const DataMsg: String; Resp: TStream);其中 DataMsg 提供 SOAP 信封,响应保存到 TStream(例如 TStringStream)。在某些情况下,您可能还需要设置 InvokeOptions -> soIgnoreInvalidCerts。

虽然可以按照您的方式“组装”请求,但我建议使用 WSDL 向导,导入 EBAY WSDL 使用 WSDL Pruner Tool 削减不太重要的功能(以避免“E2491 超出最大 VIRDEF 计数;检查for recursion") 并继续自动生成的单元。

【讨论】:

  • 感谢 Vancalar。对我来说真正的问题是:我不知道如何将这些 XML 转换为 TidHTTP.Post 的 Delphi 代码。我仍在挖掘 eBay 文档,现在我想确定 EbayToken/AppID/DevID 是否与卖家账户相关联,而不是任何开发人员?
  • James:EbayToken 与卖家相关联,其余标识开发者。
  • 我编辑了我的答案,以包括使用 Delphi 的纯 SOAP 的最简单示例。
  • 感谢 Vancalrar。你澄清了我关于 EbayToken 的问题。我将尝试使用您的示例代码。
  • Vancalar:你提到'可以“组装”请求方式'。你能给我看看这个简单的样本吗?我想学习另一种解决方案来做同样的工作。
猜你喜欢
  • 1970-01-01
  • 2014-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多