eBay Trading API - Delphi 中的调用结构
eBay Trading API - calling structure in Delphi
我正在尝试通过 Delphi 联系 eBay API。经过长时间搜索 Google 和 Whosebug,我现在可以正常使用 "GeteBayTime"(购物 API)和 "findItemsByKeywords"(查找 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;
给你:完成工作 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>
您可以省略 "search" 标签以获得完整列表。
大多数交易 api 请求都是这样工作的。
在 delphi 中最简单的方法:
只需将 WebServices 选项卡中的 THTTPReqResp 而不是 TidHTTP 放在表单上,将 url (THTTPReqResp1.URL) 和 运行 设置为 THTTPReqResp1.Execute(const DataMsg: String; Resp : 流);其中 DataMsg 提供 SOAP 信封,响应保存到 TStream(例如 TStringStream)。在某些情况下,您可能还需要设置 InvokeOptions -> soIgnoreInvalidCerts。
虽然可以"assemble"像你那样请求,但我建议使用 WSDL 向导,导入 EBAY WSDL use WSDL Pruner Tool 以削减不太重要的功能(避免 "E2491 Maximum VIRDEF count exceeded; check for recursion")并继续使用自动生成的单位。
我正在尝试通过 Delphi 联系 eBay API。经过长时间搜索 Google 和 Whosebug,我现在可以正常使用 "GeteBayTime"(购物 API)和 "findItemsByKeywords"(查找 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;
给你:完成工作 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>
您可以省略 "search" 标签以获得完整列表。 大多数交易 api 请求都是这样工作的。
在 delphi 中最简单的方法:
只需将 WebServices 选项卡中的 THTTPReqResp 而不是 TidHTTP 放在表单上,将 url (THTTPReqResp1.URL) 和 运行 设置为 THTTPReqResp1.Execute(const DataMsg: String; Resp : 流);其中 DataMsg 提供 SOAP 信封,响应保存到 TStream(例如 TStringStream)。在某些情况下,您可能还需要设置 InvokeOptions -> soIgnoreInvalidCerts。
虽然可以"assemble"像你那样请求,但我建议使用 WSDL 向导,导入 EBAY WSDL use WSDL Pruner Tool 以削减不太重要的功能(避免 "E2491 Maximum VIRDEF count exceeded; check for recursion")并继续使用自动生成的单位。