Sample code for 30+ languages & platforms
Delphi ActiveX

effectconnect Product Update

See more effectconnect Examples

Use this call to update a product (f.e. stock or price) in EffectConnect.

Chilkat Delphi ActiveX Downloads

Delphi ActiveX
uses
    Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
    Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Chilkat_TLB;

...

procedure TForm1.Button1Click(Sender: TObject);
var
success: Integer;
uri: WideString;
apiVersion: WideString;
http: TChilkatHttp;
req: TChilkatHttpRequest;
dt: TCkDateTime;
timestamp: WideString;
sbXml: TChilkatStringBuilder;
sbStringToSign: TChilkatStringBuilder;
crypt: TChilkatCrypt2;
resp: TChilkatHttpResponse;
xmlResp: TChilkatXml;
tagPath: WideString;
RequestType: WideString;
RequestAction: WideString;
RequestVersion: WideString;
ProcessedAt: WideString;
Result: WideString;
ProcessID: WideString;

begin
success := 0;

// This example assumes the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.

uri := '/products';
apiVersion := '2.0';

http := TChilkatHttp.Create(Self);
req := TChilkatHttpRequest.Create(Self);

// Use your effectconnect public key here...
req.AddHeader('KEY','PUBLIC_KEY');
req.AddHeader('VERSION',apiVersion);
req.AddHeader('URI',uri);
req.AddHeader('RESPONSETYPE','XML');
req.AddHeader('RESPONSELANGUAGE','en');

// Get the current date/time in timestamp format.
dt := TCkDateTime.Create(Self);
dt.SetFromCurrentSystemTime();
timestamp := dt.GetAsTimestamp(1);

req.AddHeader('TIME',timestamp);
Memo1.Lines.Add('timestamp = ' + timestamp);

sbXml := TChilkatStringBuilder.Create(Self);
success := sbXml.LoadFile('qa_data/xml/effectconnect/effconUpdate.xml','utf-8');
Memo1.Lines.Add('length = ' + IntToStr(sbXml.Length));

req.HttpVerb := 'PUT';
req.Path := uri;
req.ContentType := 'multipart/form-data';
success := req.AddStringForUpload('payload','effconUpdate.xml',sbXml.GetAsString(),'utf-8');
if (success = 0) then
  begin
    Memo1.Lines.Add(req.LastErrorText);
    Exit;
  end;

// Build a string-to-sign and sign it using our effectconnect private key
sbStringToSign := TChilkatStringBuilder.Create(Self);
sbStringToSign.AppendInt(sbXml.Length);
sbStringToSign.Append('PUT');
sbStringToSign.Append(uri);
sbStringToSign.Append(apiVersion);
sbStringToSign.Append(timestamp);

crypt := TChilkatCrypt2.Create(Self);
crypt.MacAlgorithm := 'hmac';
crypt.HashAlgorithm := 'sha512';
crypt.EncodingMode := 'base64';
// Use your effectconnect private key here:
crypt.SetMacKeyString('PRIVATE_KEY');
req.AddHeader('SIGNATURE',crypt.MacStringENC(sbStringToSign.GetAsString()));

resp := TChilkatHttpResponse.Create(Self);
success := http.HttpSReq('submit.effectconnect.com',443,1,req.ControlInterface,resp.ControlInterface);
if (success = 0) then
  begin
    Memo1.Lines.Add(http.LastErrorText);
    Exit;
  end;

Memo1.Lines.Add('response status code = ' + IntToStr(resp.StatusCode));

// 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 := TChilkatXml.Create(Self);
xmlResp.LoadXml(resp.BodyStr);

Memo1.Lines.Add('response body:');
Memo1.Lines.Add(xmlResp.GetXml());

// 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 := xmlResp.GetChildContent('Request|RequestType');
RequestAction := xmlResp.GetChildContent('Request|RequestAction');
RequestVersion := xmlResp.GetChildContent('Request|RequestVersion');
ProcessedAt := xmlResp.GetChildContent('Request|ProcessedAt');
Result := xmlResp.GetChildContent('Response|Result');
ProcessID := xmlResp.GetChildContent('Response|ProductsUpdateResponseContainer|ProcessID');
end;