PHP Extension
PHP Extension
palena.sii.cl getToken SOAP Request
See more SII Chile Examples
Demonstrates how to call getToken SOAP request at palena.sii.clChilkat PHP Extension Downloads
<?php
include("chilkat.php");
$success = false;
// 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 CkXml();
$xmlToSign->put_Tag('getToken');
// This is the seed obtained from palena.sii.cl getSeed
$xmlToSign->UpdateChildContent('item|Semilla','033878794660');
$gen = new CkXmlDSigGen();
$gen->put_SigLocation('getToken');
$gen->put_SigLocationMod(0);
$gen->put_SigNamespacePrefix('');
$gen->put_SigNamespaceUri('http://www.w3.org/2000/09/xmldsig#');
$gen->put_SignedInfoCanonAlg('EXCL_C14N');
$gen->put_SignedInfoDigestMethod('sha1');
$gen->AddSameDocRef('','sha1','','','');
// Provide a certificate + private key. (PFX password is test123)
$cert = new CkCert();
$success = $cert->LoadPfxFile('qa_data/pfx/cert_test123.pfx','test123');
if ($success == false) {
print $cert->lastErrorText() . "\n";
exit;
}
$gen->SetX509Cert($cert,true);
$gen->put_KeyInfoType('X509Data');
$gen->put_X509Type('Certificate');
// Load XML to be signed...
$sbXml = new CkStringBuilder();
$xmlToSign->put_EmitXmlDecl(false);
$xmlToSign->GetXmlSb($sbXml);
$gen->put_Behaviors('IndentedSignature');
// Sign the XML...
$success = $gen->CreateXmlDSigSb($sbXml);
if ($success == false) {
print $gen->lastErrorText() . "\n";
exit;
}
// -----------------------------------------------
$http = new CkHttp();
$http->put_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 CkXml();
$xml->put_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',true,'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 CkStringBuilder();
$sbSoapXml->Append($xml->getXml());
$numReplaced = $sbXml->Replace('&','&');
$numReplaced = $sbXml->Replace('>','>');
$numReplaced = $sbXml->Replace('<','<');
$numReplaced = $sbXml->Replace('\'','"');
$numReplaced = $sbSoapXml->Replace('SIGNED_XML_GOES_HERE',$sbXml->getAsString());
$xmlStr = $sbSoapXml->getAsString();
$resp = new CkHttpResponse();
$success = $http->HttpStr('POST',$endPoint,$xmlStr,'utf-8','text/xml',$resp);
if ($success == false) {
print $http->lastErrorText() . "\n";
exit;
}
$responseStatusCode = $resp->get_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 CkXml();
$xmlResp->LoadXml($resp->bodyStr());
print $xmlResp->getXml() . "\n";
// Use this online tool to generate parsing code from response XML:
// Generate Parsing Code from XML
?>