Tcl
Tcl
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 Tcl Downloads
load ./chilkat.dll
set success 0
# This example assumes the Chilkat API to have been previously unlocked.
# See Global Unlock Sample for sample code.
set uri "/products"
set apiVersion "2.0"
set http [new_CkHttp]
set req [new_CkHttpRequest]
# 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.
set dt [new_CkDateTime]
CkDateTime_SetFromCurrentSystemTime $dt
set timestamp [CkDateTime_getAsTimestamp $dt 1]
CkHttpRequest_AddHeader $req "TIME" $timestamp
puts "timestamp = $timestamp"
set sbXml [new_CkStringBuilder]
set success [CkStringBuilder_LoadFile $sbXml "qa_data/xml/effectconnect/effconCreate.xml" "utf-8"]
puts "length = [CkStringBuilder_get_Length $sbXml]"
CkHttpRequest_put_HttpVerb $req "POST"
CkHttpRequest_put_Path $req $uri
CkHttpRequest_put_ContentType $req "multipart/form-data"
set success [CkHttpRequest_AddStringForUpload $req "payload" "effcon.xml" [CkStringBuilder_getAsString $sbXml] "utf-8"]
if {$success == 0} then {
puts [CkHttpRequest_lastErrorText $req]
delete_CkHttp $http
delete_CkHttpRequest $req
delete_CkDateTime $dt
delete_CkStringBuilder $sbXml
exit
}
# Build a string-to-sign and sign it using our effectconnect private key
set sbStringToSign [new_CkStringBuilder]
CkStringBuilder_AppendInt $sbStringToSign [CkStringBuilder_get_Length $sbXml]
CkStringBuilder_Append $sbStringToSign "POST"
CkStringBuilder_Append $sbStringToSign $uri
CkStringBuilder_Append $sbStringToSign $apiVersion
CkStringBuilder_Append $sbStringToSign $timestamp
set crypt [new_CkCrypt2]
CkCrypt2_put_MacAlgorithm $crypt "hmac"
CkCrypt2_put_HashAlgorithm $crypt "sha512"
CkCrypt2_put_EncodingMode $crypt "base64"
# Use your effectconnect private key here:
CkCrypt2_SetMacKeyString $crypt "PRIVATE_KEY"
CkHttpRequest_AddHeader $req "SIGNATURE" [CkCrypt2_macStringENC $crypt [CkStringBuilder_getAsString $sbStringToSign]]
set resp [new_CkHttpResponse]
set success [CkHttp_HttpSReq $http "submit.effectconnect.com" 443 1 $req $resp]
if {$success == 0} then {
puts [CkHttp_lastErrorText $http]
delete_CkHttp $http
delete_CkHttpRequest $req
delete_CkDateTime $dt
delete_CkStringBuilder $sbXml
delete_CkStringBuilder $sbStringToSign
delete_CkCrypt2 $crypt
delete_CkHttpResponse $resp
exit
}
puts "response status code = [CkHttpResponse_get_StatusCode $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.
set xmlResp [new_CkXml]
CkXml_LoadXml $xmlResp [CkHttpResponse_bodyStr $resp]
puts "response body:"
puts [CkXml_getXml $xmlResp]
# 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...
set RequestType [CkXml_getChildContent $xmlResp "Request|RequestType"]
set RequestAction [CkXml_getChildContent $xmlResp "Request|RequestAction"]
set RequestVersion [CkXml_getChildContent $xmlResp "Request|RequestVersion"]
set ProcessedAt [CkXml_getChildContent $xmlResp "Request|ProcessedAt"]
set Result [CkXml_getChildContent $xmlResp "Response|Result"]
set ProcessID [CkXml_getChildContent $xmlResp "Response|ProductsCreateResponseContainer|ProcessID"]
delete_CkHttp $http
delete_CkHttpRequest $req
delete_CkDateTime $dt
delete_CkStringBuilder $sbXml
delete_CkStringBuilder $sbStringToSign
delete_CkCrypt2 $crypt
delete_CkHttpResponse $resp
delete_CkXml $xmlResp