java - ¿Cómo integrar Aadhaar Card Authentication Api para la verificación del número de Aadhaar en PHP?
curl (2)
Para generar el XML, puede usar esta biblioteca para generarlo con bastante facilidad:
https://github.com/iwyg/xmlbuilder
Para el cifrado; Podría estar equivocado, pero parece que ( this ) puede generar los resultados codificados en Java una vez y simplemente pegar los resultados en sus variables de PHP.
Quiero integrar la API de Autenticación de tarjetas Aadhaar para la verificación del número de Aadhaar en PHP. Intenté this y escribí el código para el acceso a la API.
¿Cómo puedo generar los datos del campo de encriptación XML a continuación en PHP? Este código de muestra está escrito en Java.
<Auth uid="" tid="" ac="" sa="" ver="" txn="" lk="">
<Uses pi="" pa="" pfa="" bio="" bt="" pin="" otp=""/>
<Tkn type="" value=""/>
<Meta udc="" fdc="" idc="" pip="" lot=”G|P” lov=""/>
<Skey ci="" ki="">encrypted and encoded session key</Skey>
<Data type=”X|P”>encrypted PID block</Data>
<Hmac>SHA-256 Hash of Pid block, encrypted and then encoded</Hmac>
<Signature>Digital signature of AUA</Signature>
</Auth>
// Below is the running code to integrate Aadhaar Card Authentication Api for Aadhaar number Verification in PHP?
$path=$_SERVER[''DOCUMENT_ROOT''];
$certpath=$path."/your .pfx file";
$publickeypath=$path."/your .cer file";
$certpassword="your cert password";
require_once(''xmlsecurity.php''); // for creating this file use link : https://github.com/robrichards/xmlseclibs
$trn_id = "AuthDemoClient:public:". date(''YmdHisU'');
if (!$cert_store = file_get_contents($certpath)) {
echo "Error: Unable to read the cert file/n";
exit;
}
if (openssl_pkcs12_read($cert_store, $cert_info, $certpassword)) {
//print_r($cert_info["cert"]);
//print_r($cert_info["pkey"]);
} else {
echo "Error: Unable to read the cert store./n";
exit;
}
define("UIDAI_PUBLIC_CERTIFICATE" , $publickeypath);
define("AUA_PRIVATE_CERTIFICATE" , $cert_info["pkey"]);
date_default_timezone_set("Asia/Calcutta");
$date2= gmdate("Y-m-d/TH:i:s");
$date1 = date(''Y-m-d/TH:i:s'', time());
$ts=''"''.$date1.''"'';//date(''Y-m-d/TH:i:s'');
$pid_1=''<Pid ts=''.$ts.'' ver="1.0"><Pv otp="''.$otp.''"/></Pid>'';
$randkey = generateRandomString();
$SESSION_ID = $randkey;
$skey1=encryptMcrypt($SESSION_ID);
$skey=base64_encode($skey1);
// generate ci code start
$ci=getExpiryDate(UIDAI_PUBLIC_CERTIFICATE);
// generate pid block code start
$pid=encryptPID($pid_1,$randkey);
//hmac creation code start
$hash=hash("SHA256",$pid_1,true);
$hmac=encryptPID($hash,$randkey);
$load_xml="<?xml version=/"1.0/" encoding=/"UTF-8/" standalone=/"yes/"?><Auth xmlns=/"http://www.uidai.gov.in/authentication/uid-auth-request/1.0/" sa=/"public/" lk=/"your license key/" txn=/"$trn_id/" ver=/"1.6/" tid=/"public/" ac=/"your code from aadhaar/" uid=/"$aadhaarno/"><Uses pi=/"n/" pa=/"n/" pfa=/"n/" bio=/"n/" bt=/"/" pin=/"n/" otp=/"y/"/><Meta udc=/"UDC:001/" fdc=/"NC/" idc=/"NA/" pip=/"NA/" lot=/"P/" lov=/"$pincode/"/><Skey ci=/"$ci/">$skey</Skey><Data type=/"X/">$pid</Data><Hmac>$hmac</Hmac></Auth>";
$dom = new DOMDocument();
$dom->loadXML($load_xml); // the XML you specified above.
$objDSig = new XMLSecurityDSig();
$objDSig->setCanonicalMethod(XMLSecurityDSig::C14N_COMMENTS);
$objDSig->addReference($dom, XMLSecurityDSig::SHA1, array(''http://www.w3.org/2000/09/xmldsig#enveloped-signature''),array(''force_uri''
=>''true''));
$objKey = new XMLSecurityKey(XMLSecurityKey::RSA_SHA1, array(''type''=>''private''));
$objKey->loadKey($cert_info["pkey"], False);
$objKey->passphrase = ''your certificate password'';
$objDSig->sign($objKey, $dom->documentElement);
$objDSig->add509Cert($cert_info["cert"]);
$objDSig->appendSignature($dom->documentElement);
$xml_string = $dom->saveXML();
$xml_string1 = urlencode($xml_string);
$curl = curl_init();
$url=""; //aadhar service url
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_POSTFIELDS,"eXml=A28".$xml_string1);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
/* complete within 20 seconds */
curl_setopt($curl, CURLOPT_TIMEOUT, 20);
$result = curl_exec($curl);
curl_close($curl);
$xml = @simplexml_load_string($result);
$return_status=$xml[''ret''];
if($return_status=="y"){
$res=1;
}
if($return_status!="y"){
$res=0;
}
}else
{
$res=''Aadhaarno not exist'';
}
return array(''Message''=>$res);
}
function encryptMcrypt($data) {
$fp=fopen(UIDAI_PUBLIC_CERTIFICATE,"r");
$pub_key_string=fread($fp,8192);
openssl_public_encrypt($data, $encrypted_data, $pub_key_string, OPENSSL_PKCS1_PADDING);
return $encrypted_data;
}
function generateRandomString($length = 32) {
$characters = ''0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'';
$charactersLength = strlen($characters);
$randomString = '''';
for ($i = 0; $i < $length; $i++) {
$randomString .= $characters[rand(0, $charactersLength - 1)];
}
return $randomString;
}
function encryptPID($data,$skey) {
$result=openssl_encrypt ( $data , ''AES-256-ECB'' , $skey );
return ($result);
}
function getExpiryDate($_CERTIFICATE){
$_CERT_DATA = openssl_x509_parse(file_get_contents($_CERTIFICATE));
return date(''Ymd'', $_CERT_DATA[''validTo_time_t'']);
}