![]() |
Chilkat HOME Android™ AutoIt C C# C++ Chilkat2-Python CkPython Classic ASP DataFlex Delphi DLL Go Java Node.js Objective-C PHP Extension Perl PowerBuilder PowerShell PureBasic Ruby SQL Server Swift Tcl Unicode C Unicode C++ VB.NET VBScript Visual Basic 6.0 Visual FoxPro Xojo Plugin
(C) Walmart - Send Shipping NotificationNote: This example uses classes, properties, or methods discontinued in Chilkat v11.0.0 or greater. See Shipping notifications/updates for more information about this call. Note: This example requires Chilkat v9.5.0.67 or greater.
#include <C_CkStringBuilder.h> #include <C_CkAuthUtil.h> #include <C_CkJsonObject.h> #include <C_CkHttp.h> #include <C_CkDateTime.h> #include <C_CkXml.h> #include <C_CkHttpResponse.h> void ChilkatSample(void) { HCkStringBuilder sbUrl; BOOL success; int numReplaced; const char *requestMethod; HCkAuthUtil authUtil; const char *wmConsumerId; const char *wmPrivateKey; const char *jsonStr; HCkJsonObject json; HCkHttp http; int lineNumber; const char *shippingStatus; int quantity; const char *carrier; const char *shippingMethod; const char *trackingNumber; HCkDateTime dtNow; const char *shipDateTime; HCkXml xmlBody; HCkXml orderLine; HCkXml orderLineStatus; HCkHttpResponse resp; HCkXml xml; // --------------------------------------------------------------------------------------------------------- // Note: This example is deprecated. The Walmart API no longer uses the Signature method of authenticating. // Walmart now uses OAuth2. // --------------------------------------------------------------------------------------------------------- // This example requires the Chilkat API to have been previously unlocked. // See Global Unlock Sample for sample code. // Sends the following POST request: // POST https://marketplace.walmartapis.com/v3/orders/{purchaseOrderId}/shipping sbUrl = CkStringBuilder_Create(); success = CkStringBuilder_Append(sbUrl,"https://marketplace.walmartapis.com/v3/orders/{purchaseOrderId}/shipping"); numReplaced = CkStringBuilder_Replace(sbUrl,"{purchaseOrderId}","1111691995111"); requestMethod = "POST"; // First we need to generate a signature for our request. // The signature needs to be re-generated for each new Walmart HTTP request. authUtil = CkAuthUtil_Create(); wmConsumerId = "WALMART_CONSUMER_ID"; wmPrivateKey = "WALMART_PRIVATE_KEY"; jsonStr = CkAuthUtil_walmartSignature(authUtil,CkStringBuilder_getAsString(sbUrl),wmConsumerId,wmPrivateKey,requestMethod); if (CkAuthUtil_getLastMethodSuccess(authUtil) != TRUE) { printf("%s\n",CkAuthUtil_lastErrorText(authUtil)); CkStringBuilder_Dispose(sbUrl); CkAuthUtil_Dispose(authUtil); return; } // The JSON returned by WalmartSignature contains the values to be used in the following // header fields: WM_SEC.AUTH_SIGNATURE, WM_SEC.TIMESTAMP, and WM_QOS.CORRELATION_ID json = CkJsonObject_Create(); CkJsonObject_Load(json,jsonStr); http = CkHttp_Create(); CkHttp_SetRequestHeader(http,"WM_SVC.NAME","Walmart Marketplace"); CkHttp_SetRequestHeader(http,"WM_QOS.CORRELATION_ID",CkJsonObject_stringOf(json,"correlation_id")); CkHttp_SetRequestHeader(http,"WM_SEC.TIMESTAMP",CkJsonObject_stringOf(json,"timestamp")); CkHttp_SetRequestHeader(http,"WM_SEC.AUTH_SIGNATURE",CkJsonObject_stringOf(json,"signature")); CkHttp_SetRequestHeader(http,"WM_CONSUMER.ID",wmConsumerId); CkHttp_SetRequestHeader(http,"WM_CONSUMER.CHANNEL.TYPE","WALMART_CHANNEL_TYPE"); CkHttp_putAccept(http,"application/xml"); // Note: Do not explicitly set the "Host" header. Chilkat will set it automatically. // The body of the POST request will be XML that looks something like this: // <?xml version="1.0" encoding="UTF-8" standalone="yes"?> // <ns2:orderShipment // xmlns:ns2="http://walmart.com/mp/v3/orders" // xmlns:ns3="http://walmart.com/"> // <ns2:orderLines> // <ns2:orderLine> // <ns2:lineNumber>2</ns2:lineNumber> // <ns2:orderLineStatuses> // <ns2:orderLineStatus> // <ns2:status>Shipped</ns2:status> // <ns2:statusQuantity> // <ns2:unitOfMeasurement>Each</ns2:unitOfMeasurement> // <ns2:amount>1</ns2:amount> // </ns2:statusQuantity> // <ns2:trackingInfo> // <ns2:shipDateTime>2016-06-27T05:30:15.000Z</ns2:shipDateTime> // <ns2:carrierName> // <ns2:carrier>FedEx</ns2:carrier> // </ns2:carrierName> // <ns2:methodCode>Standard</ns2:methodCode> // <ns2:trackingNumber>12333634122</ns2:trackingNumber> // </ns2:trackingInfo> // </ns2:orderLineStatus> // </ns2:orderLineStatuses> // </ns2:orderLine> // </ns2:orderLines> // </ns2:orderShipment> // Build the XML request body: lineNumber = 1; shippingStatus = "Shipped"; quantity = 1; carrier = "USPS"; shippingMethod = "Standard"; trackingNumber = "9999869903501929298999"; dtNow = CkDateTime_Create(); CkDateTime_SetFromCurrentSystemTime(dtNow); shipDateTime = CkDateTime_getAsTimestamp(dtNow,FALSE); xmlBody = CkXml_Create(); CkXml_putTag(xmlBody,"ns2:orderShipment"); CkXml_AddAttribute(xmlBody,"xmlns:ns2","http://walmart.com/mp/v3/orders"); CkXml_AddAttribute(xmlBody,"xmlns:ns3","http://walmart.com/"); CkXml_UpdateChildContentInt(xmlBody,"ns2:orderLines|ns2:orderLine|ns2:lineNumber",lineNumber); orderLine = CkXml_GetChildWithTag(xmlBody,"ns2:orderLines|ns2:orderLine"); CkXml_UpdateChildContent(orderLine,"ns2:orderLineStatuses|ns2:orderLineStatus|ns2:status",shippingStatus); CkXml_Dispose(orderLine); orderLineStatus = CkXml_GetChildWithTag(orderLine,"ns2:orderLineStatuses|ns2:orderLineStatus"); CkXml_UpdateChildContent(orderLineStatus,"ns2:statusQuantity|ns2:unitOfMeasurement","Each"); CkXml_UpdateChildContentInt(orderLineStatus,"ns2:statusQuantity|ns2:amount",quantity); CkXml_UpdateChildContent(orderLineStatus,"ns2:trackingInfo|ns2:shipDateTime",shipDateTime); CkXml_UpdateChildContent(orderLineStatus,"ns2:trackingInfo|ns2:carrierName|ns2:carrier",carrier); CkXml_UpdateChildContent(orderLineStatus,"ns2:trackingInfo|ns2:methodCode",shippingMethod); CkXml_UpdateChildContent(orderLineStatus,"ns2:trackingInfo|ns2:trackingNumber",trackingNumber); CkXml_Dispose(orderLineStatus); printf("POST request body:\n"); printf("%s\n",CkXml_getXml(xmlBody)); printf("--\n"); // This is a simple POST that can be sent w/ the PostXml method. // Explicitly set the Content-Type header, otherwise "text/xml" will be used. CkHttp_SetRequestHeader(http,"Content-Type","application/xml"); resp = CkHttp_PostXml(http,CkStringBuilder_getAsString(sbUrl),CkXml_getXml(xmlBody),"utf-8"); if (CkHttp_getLastMethodSuccess(http) != TRUE) { printf("%s\n",CkHttp_lastErrorText(http)); CkStringBuilder_Dispose(sbUrl); CkAuthUtil_Dispose(authUtil); CkJsonObject_Dispose(json); CkHttp_Dispose(http); CkDateTime_Dispose(dtNow); CkXml_Dispose(xmlBody); return; } xml = CkXml_Create(); CkXml_LoadXml(xml,CkHttpResponse_bodyStr(resp)); // A successful response should have a 200 response status if (CkHttpResponse_getStatusCode(resp) != 200) { printf("%s\n",CkXml_getXml(xml)); printf("Response Status Code: %d\n",CkHttpResponse_getStatusCode(resp)); printf("Failed.\n"); CkHttpResponse_Dispose(resp); CkStringBuilder_Dispose(sbUrl); CkAuthUtil_Dispose(authUtil); CkJsonObject_Dispose(json); CkHttp_Dispose(http); CkDateTime_Dispose(dtNow); CkXml_Dispose(xmlBody); CkXml_Dispose(xml); return; } CkHttpResponse_Dispose(resp); // Show the XML response.. printf("%s\n",CkXml_getXml(xml)); printf("--\n"); printf("Success!\n"); CkStringBuilder_Dispose(sbUrl); CkAuthUtil_Dispose(authUtil); CkJsonObject_Dispose(json); CkHttp_Dispose(http); CkDateTime_Dispose(dtNow); CkXml_Dispose(xmlBody); CkXml_Dispose(xml); } |
© 2000-2025 Chilkat Software, Inc. All Rights Reserved.