Delphi DLL
Delphi DLL
effectconnect Product Update
See more effectconnect Examples
Use this call to update a product (f.e. stock or price) in EffectConnect.Chilkat Delphi DLL Downloads
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Http, CkDateTime, HttpRequest, HttpResponse, StringBuilder, Xml, Crypt2;
...
procedure TForm1.Button1Click(Sender: TObject);
var
success: Boolean;
uri: PWideChar;
apiVersion: PWideChar;
http: HCkHttp;
req: HCkHttpRequest;
dt: HCkDateTime;
timestamp: PWideChar;
sbXml: HCkStringBuilder;
sbStringToSign: HCkStringBuilder;
crypt: HCkCrypt2;
resp: HCkHttpResponse;
xmlResp: HCkXml;
tagPath: PWideChar;
RequestType: PWideChar;
RequestAction: PWideChar;
RequestVersion: PWideChar;
ProcessedAt: PWideChar;
Result: PWideChar;
ProcessID: PWideChar;
begin
success := False;
// This example assumes the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
uri := '/products';
apiVersion := '2.0';
http := CkHttp_Create();
req := CkHttpRequest_Create();
// Use your effectconnect public key here...
CkHttpRequest_AddHeader(req,'KEY','PUBLIC_KEY');
CkHttpRequest_AddHeader(req,'VERSION',apiVersion);
CkHttpRequest_AddHeader(req,'URI',uri);
CkHttpRequest_AddHeader(req,'RESPONSETYPE','XML');
CkHttpRequest_AddHeader(req,'RESPONSELANGUAGE','en');
// Get the current date/time in timestamp format.
dt := CkDateTime_Create();
CkDateTime_SetFromCurrentSystemTime(dt);
timestamp := CkDateTime__getAsTimestamp(dt,True);
CkHttpRequest_AddHeader(req,'TIME',timestamp);
Memo1.Lines.Add('timestamp = ' + timestamp);
sbXml := CkStringBuilder_Create();
success := CkStringBuilder_LoadFile(sbXml,'qa_data/xml/effectconnect/effconUpdate.xml','utf-8');
Memo1.Lines.Add('length = ' + IntToStr(CkStringBuilder_getLength(sbXml)));
CkHttpRequest_putHttpVerb(req,'PUT');
CkHttpRequest_putPath(req,uri);
CkHttpRequest_putContentType(req,'multipart/form-data');
success := CkHttpRequest_AddStringForUpload(req,'payload','effconUpdate.xml',CkStringBuilder__getAsString(sbXml),'utf-8');
if (success = False) then
begin
Memo1.Lines.Add(CkHttpRequest__lastErrorText(req));
Exit;
end;
// Build a string-to-sign and sign it using our effectconnect private key
sbStringToSign := CkStringBuilder_Create();
CkStringBuilder_AppendInt(sbStringToSign,CkStringBuilder_getLength(sbXml));
CkStringBuilder_Append(sbStringToSign,'PUT');
CkStringBuilder_Append(sbStringToSign,uri);
CkStringBuilder_Append(sbStringToSign,apiVersion);
CkStringBuilder_Append(sbStringToSign,timestamp);
crypt := CkCrypt2_Create();
CkCrypt2_putMacAlgorithm(crypt,'hmac');
CkCrypt2_putHashAlgorithm(crypt,'sha512');
CkCrypt2_putEncodingMode(crypt,'base64');
// Use your effectconnect private key here:
CkCrypt2_SetMacKeyString(crypt,'PRIVATE_KEY');
CkHttpRequest_AddHeader(req,'SIGNATURE',CkCrypt2__macStringENC(crypt,CkStringBuilder__getAsString(sbStringToSign)));
resp := CkHttpResponse_Create();
success := CkHttp_HttpSReq(http,'submit.effectconnect.com',443,True,req,resp);
if (success = False) then
begin
Memo1.Lines.Add(CkHttp__lastErrorText(http));
Exit;
end;
Memo1.Lines.Add('response status code = ' + IntToStr(CkHttpResponse_getStatusCode(resp)));
// Examine the response. The response status code can be 200 for both errors and success.
// The success or error is based on the XML returned in the response body.
xmlResp := CkXml_Create();
CkXml_LoadXml(xmlResp,CkHttpResponse__bodyStr(resp));
Memo1.Lines.Add('response body:');
Memo1.Lines.Add(CkXml__getXml(xmlResp));
// A sample response:
// <?xml version="1.0" encoding="utf-8"?>
// <ApiResponseContainer>
// <Request>
// <RequestType>Products</RequestType>
// <RequestAction>Update</RequestAction>
// <RequestVersion>2.0</RequestVersion>
// <RequestIdentifier/>
// <ProcessedAt>2019-04-18T15:37:32+02:00</ProcessedAt>
// </Request>
// <Response>
// <Result>Success</Result>
// <ProductsUpdateResponseContainer>
// <ProcessID><![CDATA[f81ngzD2S7gooFk3]]></ProcessID>
// </ProductsUpdateResponseContainer>
// </Response>
// </ApiResponseContainer>
//
RequestType := CkXml__getChildContent(xmlResp,'Request|RequestType');
RequestAction := CkXml__getChildContent(xmlResp,'Request|RequestAction');
RequestVersion := CkXml__getChildContent(xmlResp,'Request|RequestVersion');
ProcessedAt := CkXml__getChildContent(xmlResp,'Request|ProcessedAt');
Result := CkXml__getChildContent(xmlResp,'Response|Result');
ProcessID := CkXml__getChildContent(xmlResp,'Response|ProductsUpdateResponseContainer|ProcessID');
CkHttp_Dispose(http);
CkHttpRequest_Dispose(req);
CkDateTime_Dispose(dt);
CkStringBuilder_Dispose(sbXml);
CkStringBuilder_Dispose(sbStringToSign);
CkCrypt2_Dispose(crypt);
CkHttpResponse_Dispose(resp);
CkXml_Dispose(xmlResp);
end;