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
(Objective-C) palena.sii.cl getToken SOAP RequestDemonstrates how to call getToken SOAP request at palena.sii.cl
#import <CkoXml.h> #import <CkoXmlDSigGen.h> #import <CkoCert.h> #import <CkoStringBuilder.h> #import <CkoHttp.h> #import <NSString.h> #import <CkoHttpResponse.h> // This example requires the Chilkat API to have been previously unlocked. // See Global Unlock Sample for sample code. BOOL success; // Create the XML to be signed... CkoXml *xmlToSign = [[CkoXml alloc] init]; xmlToSign.Tag = @"getToken"; // This is the seed obtained from palena.sii.cl getSeed [xmlToSign UpdateChildContent: @"item|Semilla" value: @"033878794660"]; CkoXmlDSigGen *gen = [[CkoXmlDSigGen alloc] init]; gen.SigLocation = @"getToken"; gen.SigLocationMod = [NSNumber numberWithInt: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) CkoCert *cert = [[CkoCert alloc] init]; success = [cert LoadPfxFile: @"qa_data/pfx/cert_test123.pfx" password: @"test123"]; if (success != YES) { NSLog(@"%@",cert.LastErrorText); return; } [gen SetX509Cert: cert usePrivateKey: YES]; gen.KeyInfoType = @"X509Data"; gen.X509Type = @"Certificate"; // Load XML to be signed... CkoStringBuilder *sbXml = [[CkoStringBuilder alloc] init]; xmlToSign.EmitXmlDecl = NO; [xmlToSign GetXmlSb: sbXml]; gen.Behaviors = @"IndentedSignature"; // Sign the XML... success = [gen CreateXmlDSigSb: sbXml]; if (success != YES) { NSLog(@"%@",gen.LastErrorText); return; } // ----------------------------------------------- CkoHttp *http = [[CkoHttp alloc] init]; int responseStatusCode; http.UncommonOptions = @"AllowEmptyHeaders"; [http SetRequestHeader: @"SOAPAction" value: @""]; [http SetRequestHeader: @"Content-Type" value: @"text/xml; charset=utf-8"]; // The endpoint for this soap service is: NSString *endPoint = @"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> CkoXml *xml = [[CkoXml alloc] init]; 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 UpdateAttrAt: @"soapenv:Body|def:getToken" autoCreate: YES 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. CkoStringBuilder *sbSoapXml = [[CkoStringBuilder alloc] init]; [sbSoapXml Append: [xml GetXml]]; int numReplaced = [[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]; CkoHttpResponse *resp = [http PostXml: endPoint xmlDoc: [sbSoapXml GetAsString] charset: @"utf-8"]; if (http.LastMethodSuccess != YES) { NSLog(@"%@",http.LastErrorText); NSLog(@"%@",@"LastHeader:"); NSLog(@"%@",http.LastHeader); return; } responseStatusCode = [resp.StatusCode intValue]; NSLog(@"%@%d",@"Response Status Code: ",responseStatusCode); // You may examine the exact HTTP header sent with the POST like this: NSLog(@"%@",@"LastHeader:"); NSLog(@"%@",http.LastHeader); // Examine the XML returned by the web service: NSLog(@"%@",@"XML Response:"); CkoXml *xmlResp = [[CkoXml alloc] init]; [xmlResp LoadXml: resp.BodyStr]; NSLog(@"%@",[xmlResp GetXml]); // Use this online tool to generate parsing code from response XML: // Generate Parsing Code from XML |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.