Sample code for 30+ languages & platforms
Unicode C

effectconnect Read Orderlist

See more effectconnect Examples

Get a set of orders filtered by the parameters in the XML payload.

Chilkat Unicode C Downloads

Unicode C
#include <C_CkHttpW.h>
#include <C_CkDateTimeW.h>
#include <C_CkXmlW.h>
#include <C_CkStringBuilderW.h>
#include <C_CkCrypt2W.h>
#include <C_CkHttpResponseW.h>

void ChilkatSample(void)
    {
    BOOL success;
    const wchar_t *fullUri;
    const wchar_t *uri;
    const wchar_t *apiVersion;
    HCkHttpW http;
    HCkDateTimeW dt;
    const wchar_t *timestamp;
    HCkXmlW xml;
    HCkStringBuilderW sbXml;
    HCkStringBuilderW sbStringToSign;
    HCkCrypt2W crypt;
    HCkHttpResponseW resp;
    HCkXmlW xmlResp;

    success = FALSE;

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

    fullUri = L"https://submit.effectconnect.com/orderlist";
    uri = L"/orderlist";
    apiVersion = L"2.0";

    http = CkHttpW_Create();

    // Use your effectconnect public key here..
    CkHttpW_SetRequestHeader(http,L"KEY",L"PUBLIC_KEY");
    CkHttpW_SetRequestHeader(http,L"VERSION",apiVersion);
    CkHttpW_SetRequestHeader(http,L"URI",uri);
    CkHttpW_SetRequestHeader(http,L"RESPONSETYPE",L"XML");
    CkHttpW_SetRequestHeader(http,L"RESPONSELANGUAGE",L"en");

    // Get the current date/time in timestamp format.
    dt = CkDateTimeW_Create();
    CkDateTimeW_SetFromCurrentSystemTime(dt);
    timestamp = CkDateTimeW_getAsTimestamp(dt,TRUE);

    CkHttpW_SetRequestHeader(http,L"TIME",timestamp);
    wprintf(L"timestamp = %s\n",timestamp);

    // Create the following XML request body:
    // <?xml version="1.0" encoding="utf-8"?>
    // <list>
    //   <filters>
    //     <fromDateFilter>
    //       <filterValue>2018-09-14T12:12:12+01:00</filterValue>
    //     </fromDateFilter>
    //     <toDateFilter>
    //       <filterValue>2019-04-13T23:59:59+01:00</filterValue>
    //     </toDateFilter>
    //     <hasStatusFilter>
    //       <filterValue>paid</filterValue>
    //     </hasStatusFilter>
    //     <hasTagFilter>
    //       <filterValue>
    //         <tagName>Test</tagName>
    //         <exclude>false</exclude>
    //       </filterValue>
    //     </hasTagFilter>
    //   </filters>
    // </list>

    // Use this online tool to generate the code from sample XML: 
    // Generate Code to Create XML

    xml = CkXmlW_Create();
    CkXmlW_putTag(xml,L"list");
    CkXmlW_UpdateChildContent(xml,L"filters|fromDateFilter|filterValue",L"2018-09-14T12:12:12+01:00");
    CkXmlW_UpdateChildContent(xml,L"filters|toDateFilter|filterValue",L"2019-04-13T23:59:59+01:00");
    CkXmlW_UpdateChildContent(xml,L"filters|hasStatusFilter|filterValue",L"paid");
    CkXmlW_UpdateChildContent(xml,L"filters|hasTagFilter|filterValue|tagName",L"Test");
    CkXmlW_UpdateChildContent(xml,L"filters|hasTagFilter|filterValue|exclude",L"false");
    CkXmlW_putEmitCompact(xml,TRUE);

    sbXml = CkStringBuilderW_Create();
    CkXmlW_GetXmlSb(xml,sbXml);

    // Build a string-to-sign and sign it using our effectconnect private key
    sbStringToSign = CkStringBuilderW_Create();
    CkStringBuilderW_AppendInt(sbStringToSign,CkStringBuilderW_getLength(sbXml));
    CkStringBuilderW_Append(sbStringToSign,L"POST");
    CkStringBuilderW_Append(sbStringToSign,uri);
    CkStringBuilderW_Append(sbStringToSign,apiVersion);
    CkStringBuilderW_Append(sbStringToSign,timestamp);

    crypt = CkCrypt2W_Create();
    CkCrypt2W_putMacAlgorithm(crypt,L"hmac");
    CkCrypt2W_putHashAlgorithm(crypt,L"sha512");
    CkCrypt2W_putEncodingMode(crypt,L"base64");
    // Use your effectconnect private key here:
    CkCrypt2W_SetMacKeyString(crypt,L"PRIVATE_KEY");
    CkHttpW_SetRequestHeader(http,L"SIGNATURE",CkCrypt2W_macStringENC(crypt,CkStringBuilderW_getAsString(sbStringToSign)));

    // Send the POST..
    resp = CkHttpResponseW_Create();
    success = CkHttpW_HttpStr(http,L"POST",fullUri,CkXmlW_getXml(xml),L"utf-8",L"application/xml",resp);
    if (success == FALSE) {
        wprintf(L"%s\n",CkHttpW_lastErrorText(http));
        CkHttpW_Dispose(http);
        CkDateTimeW_Dispose(dt);
        CkXmlW_Dispose(xml);
        CkStringBuilderW_Dispose(sbXml);
        CkStringBuilderW_Dispose(sbStringToSign);
        CkCrypt2W_Dispose(crypt);
        CkHttpResponseW_Dispose(resp);
        return;
    }

    wprintf(L"response status code = %d\n",CkHttpResponseW_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 = CkXmlW_Create();
    CkXmlW_LoadXml(xmlResp,CkHttpResponseW_bodyStr(resp));

    wprintf(L"response body:\n");
    wprintf(L"%s\n",CkXmlW_getXml(xmlResp));

    // Remove previously set headers (unless we want the same headers for the next request,
    // in which case we may remove or update individual headers by calling SetRequestHeader.
    CkHttpW_ClearHeaders(http);


    CkHttpW_Dispose(http);
    CkDateTimeW_Dispose(dt);
    CkXmlW_Dispose(xml);
    CkStringBuilderW_Dispose(sbXml);
    CkStringBuilderW_Dispose(sbStringToSign);
    CkCrypt2W_Dispose(crypt);
    CkHttpResponseW_Dispose(resp);
    CkXmlW_Dispose(xmlResp);

    }