Sample code for 30+ languages & platforms
Perl

palena.sii.cl getToken SOAP Request

See more SII Chile Examples

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

Chilkat Perl Downloads

Perl
use chilkat();

$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 = chilkat::CkXml->new();
$xmlToSign->put_Tag("getToken");
# This is the seed obtained from palena.sii.cl getSeed
$xmlToSign->UpdateChildContent("item|Semilla","033878794660");

$gen = chilkat::CkXmlDSigGen->new();

$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 = chilkat::CkCert->new();
$success = $cert->LoadPfxFile("qa_data/pfx/cert_test123.pfx","test123");
if ($success == 0) {
    print $cert->lastErrorText() . "\r\n";
    exit;
}

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

$gen->put_KeyInfoType("X509Data");
$gen->put_X509Type("Certificate");

# Load XML to be signed...
$sbXml = chilkat::CkStringBuilder->new();
$xmlToSign->put_EmitXmlDecl(0);
$xmlToSign->GetXmlSb($sbXml);

$gen->put_Behaviors("IndentedSignature");

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

# -----------------------------------------------

$http = chilkat::CkHttp->new();

$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 = chilkat::CkXml->new();
$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",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 = chilkat::CkStringBuilder->new();
$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 = chilkat::CkHttpResponse->new();
$success = $http->HttpStr("POST",$endPoint,$xmlStr,"utf-8","text/xml",$resp);
if ($success == 0) {
    print $http->lastErrorText() . "\r\n";
    exit;
}

$responseStatusCode = $resp->get_StatusCode();

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

# You may examine the exact HTTP header sent with the POST like this:
print "LastHeader:" . "\r\n";
print $http->lastHeader() . "\r\n";

# Examine the XML returned by the web service:
print "XML Response:" . "\r\n";
$xmlResp = chilkat::CkXml->new();
$xmlResp->LoadXml($resp->bodyStr());
print $xmlResp->getXml() . "\r\n";

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