Chilkat HOME .NET Core C# Android™ AutoIt C C# C++ Chilkat2-Python CkPython Classic ASP DataFlex Delphi ActiveX Delphi DLL Go Java Lianja Mono C# Node.js Objective-C PHP ActiveX PHP Extension Perl PowerBuilder PowerShell PureBasic Ruby SQL Server Swift 2 Swift 3,4,5... Tcl Unicode C Unicode C++ VB.NET VBScript Visual Basic 6.0 Visual FoxPro Xojo Plugin
(Swift 3,4,5...) Walmart - Send Shipping NotificationSee Shipping notifications/updates for more information about this call. Note: This example requires Chilkat v9.5.0.67 or greater.
func chilkatTest() { // --------------------------------------------------------------------------------------------------------- // 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 let sbUrl = CkoStringBuilder()! var success: Bool = sbUrl.append("https://marketplace.walmartapis.com/v3/orders/{purchaseOrderId}/shipping") var numReplaced: Int = sbUrl.replace("{purchaseOrderId}", replacement: "1111691995111").intValue var requestMethod: String? = "POST" // First we need to generate a signature for our request. // The signature needs to be re-generated for each new Walmart HTTP request. let authUtil = CkoAuthUtil()! var wmConsumerId: String? = "WALMART_CONSUMER_ID" var wmPrivateKey: String? = "WALMART_PRIVATE_KEY" var jsonStr: String? = authUtil.walmartSignature(sbUrl.getAsString(), consumerId: wmConsumerId, privateKey: wmPrivateKey, requestMethod: requestMethod) if authUtil.lastMethodSuccess != true { print("\(authUtil.lastErrorText!)") 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 let json = CkoJsonObject()! json.load(jsonStr) let http = CkoHttp()! http.setRequestHeader("WM_SVC.NAME", value: "Walmart Marketplace") http.setRequestHeader("WM_QOS.CORRELATION_ID", value: json.string(of: "correlation_id")) http.setRequestHeader("WM_SEC.TIMESTAMP", value: json.string(of: "timestamp")) http.setRequestHeader("WM_SEC.AUTH_SIGNATURE", value: json.string(of: "signature")) http.setRequestHeader("WM_CONSUMER.ID", value: wmConsumerId) http.setRequestHeader("WM_CONSUMER.CHANNEL.TYPE", value: "WALMART_CHANNEL_TYPE") http.accept = "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: var lineNumber: Int = 1 var shippingStatus: String? = "Shipped" var quantity: Int = 1 var carrier: String? = "USPS" var shippingMethod: String? = "Standard" var trackingNumber: String? = "9999869903501929298999" let dtNow = CkoDateTime()! dtNow.setFromCurrentSystemTime() var shipDateTime: String? = dtNow.getAsTimestamp(false) let xmlBody = CkoXml()! xmlBody.tag = "ns2:orderShipment" xmlBody.addAttribute("xmlns:ns2", value: "http://walmart.com/mp/v3/orders") xmlBody.addAttribute("xmlns:ns3", value: "http://walmart.com/") xmlBody.updateChildContentInt("ns2:orderLines|ns2:orderLine|ns2:lineNumber", value: lineNumber) var orderLine: CkoXml? = xmlBody.getChildWithTag("ns2:orderLines|ns2:orderLine") orderLine!.updateChildContent("ns2:orderLineStatuses|ns2:orderLineStatus|ns2:status", value: shippingStatus) orderLine = nil var orderLineStatus: CkoXml? = orderLine!.getChildWithTag("ns2:orderLineStatuses|ns2:orderLineStatus") orderLineStatus!.updateChildContent("ns2:statusQuantity|ns2:unitOfMeasurement", value: "Each") orderLineStatus!.updateChildContentInt("ns2:statusQuantity|ns2:amount", value: quantity) orderLineStatus!.updateChildContent("ns2:trackingInfo|ns2:shipDateTime", value: shipDateTime) orderLineStatus!.updateChildContent("ns2:trackingInfo|ns2:carrierName|ns2:carrier", value: carrier) orderLineStatus!.updateChildContent("ns2:trackingInfo|ns2:methodCode", value: shippingMethod) orderLineStatus!.updateChildContent("ns2:trackingInfo|ns2:trackingNumber", value: trackingNumber) orderLineStatus = nil print("POST request body:") print("\(xmlBody.getXml()!)") print("--") // 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. http.setRequestHeader("Content-Type", value: "application/xml") var resp: CkoHttpResponse? = http.postXml(sbUrl.getAsString(), xmlDoc: xmlBody.getXml(), charset: "utf-8") if http.lastMethodSuccess != true { print("\(http.lastErrorText!)") return } let xml = CkoXml()! xml.load(resp!.bodyStr) // A successful response should have a 200 response status if resp!.statusCode.intValue != 200 { print("\(xml.getXml()!)") print("Response Status Code: \(resp!.statusCode.intValue)") print("Failed.") resp = nil return } resp = nil // Show the XML response.. print("\(xml.getXml()!)") print("--") print("Success!") } |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.