Sample code for 30+ languages & platforms
PHP ActiveX

palena.sii.cl getToken SOAP Request

See more SII Chile Examples

Demonstrates how to call getToken SOAP request at palena.sii.cl

Chilkat PHP ActiveX Downloads

PHP ActiveX
<?php

$success = 0;

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

// Create the XML to be signed...
$xmlToSign = new COM("Chilkat.Xml");
$xmlToSign->Tag = 'getToken';
// This is the seed obtained from palena.sii.cl getSeed
$xmlToSign->UpdateChildContent('item|Semilla','033878794660');

$gen = new COM("Chilkat.XmlDSigGen");

$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('','sha1','','','');

// Provide a certificate + private key. (PFX password is test123)
$cert = new COM("Chilkat.Cert");
$success = $cert->LoadPfxFile('qa_data/pfx/cert_test123.pfx','test123');
if ($success == 0) {
    print $cert->LastErrorText . "\n";
    exit;
}

$gen->SetX509Cert($cert,1);

$gen->KeyInfoType = 'X509Data';
$gen->X509Type = 'Certificate';

// Load XML to be signed...
$sbXml = new COM("Chilkat.StringBuilder");
$xmlToSign->EmitXmlDecl = 0;
$xmlToSign->GetXmlSb($sbXml);

$gen->Behaviors = 'IndentedSignature';

// Sign the XML...
$success = $gen->CreateXmlDSigSb($sbXml);
if ($success == 0) {
    print $gen->LastErrorText . "\n";
    exit;
}

// -----------------------------------------------

$http = new COM("Chilkat.Http");

$http->UncommonOptions = 'AllowEmptyHeaders';
$http->SetRequestHeader('SOAPAction','');

// The endpoint for this soap service is:
$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>

$xml = new COM("Chilkat.Xml");
$xml->Tag = 'soapenv:Envelope';
$xml->AddAttribute('xmlns:xsi','http://www.w3.org/2001/XMLSchema-instance');
$xml->AddAttribute('xmlns:xsd','http://www.w3.org/2001/XMLSchema');
$xml->AddAttribute('xmlns:soapenv','http://schemas.xmlsoap.org/soap/envelope/');
$xml->AddAttribute('xmlns:def','http://DefaultNamespace');
$xml->UpdateChildContent('soapenv:Header','');
$xml->UpdateAttrAt('soapenv:Body|def:getToken',1,'soapenv:encodingStyle','http://schemas.xmlsoap.org/soap/encoding/');
$xml->UpdateChildContent('soapenv:Body|def:getToken|pszXml','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.
$sbSoapXml = new COM("Chilkat.StringBuilder");
$sbSoapXml->Append($xml->getXml());
$numReplaced = $sbXml->Replace('&','&amp;');
$numReplaced = $sbXml->Replace('>','&gt;');
$numReplaced = $sbXml->Replace('<','&lt;');
$numReplaced = $sbXml->Replace('\'','&quot;');
$numReplaced = $sbSoapXml->Replace('SIGNED_XML_GOES_HERE',$sbXml->getAsString());

$xmlStr = $sbSoapXml->getAsString();
$resp = new COM("Chilkat.HttpResponse");
$success = $http->HttpStr('POST',$endPoint,$xmlStr,'utf-8','text/xml',$resp);
if ($success == 0) {
    print $http->LastErrorText . "\n";
    exit;
}

$responseStatusCode = $resp->StatusCode;

print 'Response Status Code: ' . $responseStatusCode . "\n";

// You may examine the exact HTTP header sent with the POST like this:
print 'LastHeader:' . "\n";
print $http->LastHeader . "\n";

// Examine the XML returned by the web service:
print 'XML Response:' . "\n";
$xmlResp = new COM("Chilkat.Xml");
$xmlResp->LoadXml($resp->BodyStr);
print $xmlResp->getXml() . "\n";

// Use this online tool to generate parsing code from response XML: 
// Generate Parsing Code from XML

?>