Sample code for 30+ languages & platforms
Lianja

effectconnect Create or Replace Product Catalog

See more effectconnect Examples

Use this call to create or replace a product catalog in EffectConnect. This is always a purge and replace action for the entire catalog.

Chilkat Lianja Downloads

Lianja
llSuccess = .F.

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

lcUri = "/products"
lcApiVersion = "2.0"

loHttp = createobject("CkHttp")
loReq = createobject("CkHttpRequest")

// Use your effectconnect public key here...
loReq.AddHeader("KEY","PUBLIC_KEY")
loReq.AddHeader("VERSION",lcApiVersion)
loReq.AddHeader("URI",lcUri)
loReq.AddHeader("RESPONSETYPE","XML")
loReq.AddHeader("RESPONSELANGUAGE","en")

// Get the current date/time in timestamp format.
loDt = createobject("CkDateTime")
loDt.SetFromCurrentSystemTime()
lcTimestamp = loDt.GetAsTimestamp(.T.)

loReq.AddHeader("TIME",lcTimestamp)
? "timestamp = " + lcTimestamp

loSbXml = createobject("CkStringBuilder")
llSuccess = loSbXml.LoadFile("qa_data/xml/effectconnect/effconCreate.xml","utf-8")
? "length = " + str(loSbXml.Length)

loReq.HttpVerb = "POST"
loReq.Path = lcUri
loReq.ContentType = "multipart/form-data"
llSuccess = loReq.AddStringForUpload("payload","effcon.xml",loSbXml.GetAsString(),"utf-8")
if (llSuccess = .F.) then
    ? loReq.LastErrorText
    release loHttp
    release loReq
    release loDt
    release loSbXml
    return
endif

// Build a string-to-sign and sign it using our effectconnect private key
loSbStringToSign = createobject("CkStringBuilder")
loSbStringToSign.AppendInt(loSbXml.Length)
loSbStringToSign.Append("POST")
loSbStringToSign.Append(lcUri)
loSbStringToSign.Append(lcApiVersion)
loSbStringToSign.Append(lcTimestamp)

loCrypt = createobject("CkCrypt2")
loCrypt.MacAlgorithm = "hmac"
loCrypt.HashAlgorithm = "sha512"
loCrypt.EncodingMode = "base64"
// Use your effectconnect private key here:
loCrypt.SetMacKeyString("PRIVATE_KEY")
loReq.AddHeader("SIGNATURE",loCrypt.MacStringENC(loSbStringToSign.GetAsString()))

loResp = createobject("CkHttpResponse")
llSuccess = loHttp.HttpSReq("submit.effectconnect.com",443,.T.,loReq,loResp)
if (llSuccess = .F.) then
    ? loHttp.LastErrorText
    release loHttp
    release loReq
    release loDt
    release loSbXml
    release loSbStringToSign
    release loCrypt
    release loResp
    return
endif

? "response status code = " + str(loResp.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.
loXmlResp = createobject("CkXml")
loXmlResp.LoadXml(loResp.BodyStr)

? "response body:"
? loXmlResp.GetXml()

// A sample response:

// <?xml version="1.0" encoding="utf-8"?>
// <ApiResponseContainer>
//     <Request>
//         <RequestType>Products</RequestType>
//         <RequestAction>Create</RequestAction>
//         <RequestVersion>2.0</RequestVersion>
//         <RequestIdentifier/>
//         <ProcessedAt>2019-04-18T15:28:55+02:00</ProcessedAt>
//     </Request>
//     <Response>
//         <Result>Success</Result>
//         <ProductsCreateResponseContainer>
//             <ProcessID><![CDATA[J048hgS4OkNn0JnH]]></ProcessID>
//         </ProductsCreateResponseContainer>
//     </Response>
// </ApiResponseContainer>

// Parsing the response...

lcRequestType = loXmlResp.GetChildContent("Request|RequestType")
lcRequestAction = loXmlResp.GetChildContent("Request|RequestAction")
lcRequestVersion = loXmlResp.GetChildContent("Request|RequestVersion")
lcProcessedAt = loXmlResp.GetChildContent("Request|ProcessedAt")
lcResult = loXmlResp.GetChildContent("Response|Result")
lcProcessID = loXmlResp.GetChildContent("Response|ProductsCreateResponseContainer|ProcessID")


release loHttp
release loReq
release loDt
release loSbXml
release loSbStringToSign
release loCrypt
release loResp
release loXmlResp