eBay Trading API-Delphi中的调用结构 [英] eBay Trading API - calling structure in Delphi

查看:79
本文介绍了eBay Trading API-Delphi中的调用结构的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试通过Delphi调用eBay API。经过Google和StackOverflow的长时间搜索后,我现在可以正常使用 GeteBayTime(购物API)和 findItemsByKeywords(Finding API)。



当我开始使用Trading API进行测试,我不知道在何处以及如何插入卖方的帐户信息(用户名和密码)。我的第一个用于交易API的程序如下所示,它以API调用 GetSellingManagerSoldListings开头。以及是否需要向HTTP.header或Paramters中添加其他内容?



谢谢。

 过程TForm1.btnEBayGetSoldListClick(Sender:TObject); 
var
sURL,sResponse,sEndpoint:字符串;
jResult:TJSONObject;
sCallName,sSiteID,sVersion:字符串;
k:整数;
sParameters:字符串;
sHeaders:TStringList;
sRequestBody:TStringStream;
开始
//交易API
sEndpoint:=‘https://api.sandbox.ebay.com/ws/api.dll’;

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

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

sHeaders:= TStringList.Create;
和sHeaders一起开始
添加( X-EBAY-API-COMPATIBILITY-LEVEL + = + sVersion);
添加( X-EBAY-API-DEV-NAME + = + sDevID);
添加( X-EBAY-API-APP-NAME + = + sAppID);
添加( X-EBAY-API-CERT-NAME + = + sCertID);
添加( X-EBAY-API-CALL-NAME + = + sCallName);
添加( X-EBAY-API-SITEID + = + sSiteID);
结尾;

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

和objHTTP.Request.CustomHeaders确实以
开始;
AddStdValues(sHeaders);
结尾;
sHeaders.Free;

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

试试
sResponse:= objHTTP.Post(sURL,sRequestBody);
memHTML.Lines.Add(sResponse);
memHTML.Lines.Add(’’);
,但
除外sResponse:= objHTTP.ResponseText;
memHTML.Lines.Add(sResponse);
memHTML.Lines.Add(’’);
结尾;
结尾;


解决方案

在这里,您可以使用:完成工作的GetSellingManagerSoldListingsRequest SOAP信封:

 <?xml version = 1.0?> 
< SOAP-ENV:信封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中完成此操作的最简单方法:



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



尽管可以按照您的方式组装请求,但我建议使用WSDL向导,导入 EBAY WSDL 使用 WSDL Pruner工具,以减少次要的功能(以避免 E2491 VIRDEF的最大数量超出;请检查递归)和继续使用自动生成的单元。


I am trying to call eBay API through Delphi. After long time searching through Google and StackOverflow, I can get "GeteBayTime" (Shopping API) and "findItemsByKeywords" (Finding API) work properly now.

When I started to test with Trading API, I have no idea where and how to insert seller's account info (userid and password). My first program for trading API is shown below and it is started with API call "GetSellingManagerSoldListings".

Can any one show me some clue to make Trading API work? And if anything else needs to be added to HTTP.header or Paramters?

Thanks.

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;

解决方案

Here You go: Complete working GetSellingManagerSoldListingsRequest SOAP envelope:

<?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>

You may omit "search" tags to get full listing. Most of the trading api requests work this way.

Simplest way to do it in delphi:

Just put THTTPReqResp from WebServices tab on the form instead of TidHTTP, set url (THTTPReqResp1.URL) and run with THTTPReqResp1.Execute(const DataMsg: String; Resp: TStream); where DataMsg is provided SOAP envelope and response is saved to TStream (e.g TStringStream). You may also need to set InvokeOptions -> soIgnoreInvalidCerts in some cases.

Although it is possible to "assemble" request the way You did, i'd recomend to use WSDL wizard, import EBAY WSDL use WSDL Pruner Tool to cut less important functions (to avoid "E2491 Maximum VIRDEF count exceeded; check for recursion") and proceed with auto-generated unit.

这篇关于eBay Trading API-Delphi中的调用结构的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆