C
C
effectconnect Product Update
See more effectconnect Examples
Use this call to update a product (f.e. stock or price) in EffectConnect.Chilkat C Downloads
#include <C_CkHttp.h>
#include <C_CkHttpRequest.h>
#include <C_CkDateTime.h>
#include <C_CkStringBuilder.h>
#include <C_CkCrypt2.h>
#include <C_CkHttpResponse.h>
#include <C_CkXml.h>
void ChilkatSample(void)
{
BOOL success;
const char *uri;
const char *apiVersion;
HCkHttp http;
HCkHttpRequest req;
HCkDateTime dt;
const char *timestamp;
HCkStringBuilder sbXml;
HCkStringBuilder sbStringToSign;
HCkCrypt2 crypt;
HCkHttpResponse resp;
HCkXml xmlResp;
const char *tagPath;
const char *RequestType;
const char *RequestAction;
const char *RequestVersion;
const char *ProcessedAt;
const char *Result;
const char *ProcessID;
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);
printf("timestamp = %s\n",timestamp);
sbXml = CkStringBuilder_Create();
success = CkStringBuilder_LoadFile(sbXml,"qa_data/xml/effectconnect/effconUpdate.xml","utf-8");
printf("length = %d\n",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) {
printf("%s\n",CkHttpRequest_lastErrorText(req));
CkHttp_Dispose(http);
CkHttpRequest_Dispose(req);
CkDateTime_Dispose(dt);
CkStringBuilder_Dispose(sbXml);
return;
}
// 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) {
printf("%s\n",CkHttp_lastErrorText(http));
CkHttp_Dispose(http);
CkHttpRequest_Dispose(req);
CkDateTime_Dispose(dt);
CkStringBuilder_Dispose(sbXml);
CkStringBuilder_Dispose(sbStringToSign);
CkCrypt2_Dispose(crypt);
CkHttpResponse_Dispose(resp);
return;
}
printf("response status code = %d\n",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));
printf("response body:\n");
printf("%s\n",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);
}