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...) palena.sii.cl getToken SOAP RequestDemonstrates how to call getToken SOAP request at palena.sii.cl
func chilkatTest() { // This example requires the Chilkat API to have been previously unlocked. // See Global Unlock Sample for sample code. var success: Bool // Create the XML to be signed... let xmlToSign = CkoXml()! xmlToSign.tag = "getToken" // This is the seed obtained from palena.sii.cl getSeed xmlToSign.updateChildContent("item|Semilla", value: "033878794660") let gen = CkoXmlDSigGen()! gen.sigLocation = "getToken" gen.sigLocationMod = 0 gen.sigNamespacePrefix = "" gen.sigNamespaceUri = "http://www.w3.org/2000/09/xmldsig#" gen.signedInfoCanonAlg = "EXCL_C14N" gen.signedInfoDigestMethod = "sha1" gen.addSameDocRef("", digestMethod: "sha1", canonMethod: "", prefixList: "", refType: "") // Provide a certificate + private key. (PFX password is test123) let cert = CkoCert()! success = cert.loadPfxFile("qa_data/pfx/cert_test123.pfx", password: "test123") if success != true { print("\(cert.lastErrorText!)") return } gen.setX509Cert(cert, usePrivateKey: true) gen.keyInfoType = "X509Data" gen.x509Type = "Certificate" // Load XML to be signed... let sbXml = CkoStringBuilder()! xmlToSign.emitXmlDecl = false xmlToSign.getSb(sbXml) gen.behaviors = "IndentedSignature" // Sign the XML... success = gen.createXmlDSigSb(sbXml) if success != true { print("\(gen.lastErrorText!)") return } // ----------------------------------------------- let http = CkoHttp()! var responseStatusCode: Int http.uncommonOptions = "AllowEmptyHeaders" http.setRequestHeader("SOAPAction", value: "") http.setRequestHeader("Content-Type", value: "text/xml; charset=utf-8") // The endpoint for this soap service is: var endPoint: String? = "https://palena.sii.cl/DTEWS/GetTokenFromSeed.jws" // Send the following SOAP XML // <soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:def="http://DefaultNamespace"> // <soapenv:Header/> // <soapenv:Body> // <def:getToken soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> // <pszXml>SIGNED_XML_GOES_HERE</pszXml> // </def:getToken> // </soapenv:Body> // </soapenv:Envelope> let xml = CkoXml()! xml.tag = "soapenv:Envelope" xml.addAttribute("xmlns:xsi", value: "http://www.w3.org/2001/XMLSchema-instance") xml.addAttribute("xmlns:xsd", value: "http://www.w3.org/2001/XMLSchema") xml.addAttribute("xmlns:soapenv", value: "http://schemas.xmlsoap.org/soap/envelope/") xml.addAttribute("xmlns:def", value: "http://DefaultNamespace") xml.updateChildContent("soapenv:Header", value: "") xml.updateAttr(at: "soapenv:Body|def:getToken", autoCreate: true, attrName: "soapenv:encodingStyle", attrValue: "http://schemas.xmlsoap.org/soap/encoding/") xml.updateChildContent("soapenv:Body|def:getToken|pszXml", value: "SIGNED_XML_GOES_HERE") // We must replace the "SIGNED_XML_GOES_HERE" with the exact contents of the signed XML to ensure the signed XML is not modified in any way. let sbSoapXml = CkoStringBuilder()! sbSoapXml.append(xml.getXml()) var numReplaced: Int = sbXml.replace("&", replacement: "&").intValue numReplaced = sbXml.replace(">", replacement: ">").intValue numReplaced = sbXml.replace("<", replacement: "<").intValue numReplaced = sbXml.replace("\"", replacement: """).intValue numReplaced = sbSoapXml.replace("SIGNED_XML_GOES_HERE", replacement: sbXml.getAsString()).intValue var resp: CkoHttpResponse? = http.postXml(endPoint, xmlDoc: sbSoapXml.getAsString(), charset: "utf-8") if http.lastMethodSuccess != true { print("\(http.lastErrorText!)") print("LastHeader:") print("\(http.lastHeader!)") return } responseStatusCode = resp!.statusCode.intValue print("Response Status Code: \(responseStatusCode)") // You may examine the exact HTTP header sent with the POST like this: print("LastHeader:") print("\(http.lastHeader!)") // Examine the XML returned by the web service: print("XML Response:") let xmlResp = CkoXml()! xmlResp.load(resp!.bodyStr) print("\(xmlResp.getXml()!)") // Use this online tool to generate parsing code from response XML: // Generate Parsing Code from XML resp = nil } |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.