2015-07-13 7 views
36

Desidero integrare l'API di autenticazione Aadhaar Card per il numero di Aadhaar Verifica in PHP. Ho provato this e ho scritto il codice per l'accesso API.Come integrare Aadhaar Card Authentication Api per il numero di Aadhaar Verifica in PHP?

Come posso generare i dati del campo di crittografia XML di seguito in PHP? This sample code è scritto in 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> 
+0

Avete le chiavi di produzione dall'UD. ping me se sì, [email protected] –

+0

@ITit superpotenza Ciao, puoi dirmi come posso ottenere i valori della chiave di sessione codificata e codificata in Skey, blocco PID crittografato nei dati, blocco Hash of Pid SHA-256, crittografato e quindi codificato in Hmac e firma digitale in Signature? Ho esaminato la documentazione ma non ho idea di come avrei potuto ottenere questi valori. – Lokesh

risposta

2

Per generare il codice XML, è possibile utilizzare questa libreria per generare abbastanza facilmente:

https://github.com/iwyg/xmlbuilder

Per la crittografia; Potrei sbagliarmi ma sembra (from this page) puoi generare i risultati codificati in java una volta e incollare i risultati nelle tue variabili PHP.

+0

Voglio integrare solo lo stato di aadhar e scaricare adhar nella mia app per Android ... così puoi guidare come inviare parametri alle API e quali URL di API usare? –

5
// 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 = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; 
      $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']); 
     } 
+0

Il codice sopra riportato è quello di integrare Aadhaar Card Authentication Api per il numero di Aadhaar Verifica in PHP dopo aver ricevuto otp dal servizio web GETOTP. –

+0

Ciao, puoi dirmi come posso ottenere i valori della chiave di sessione codificata e codificata in Skey, blocco PID crittografato nei dati, blocco Hash of Pid SHA-256, crittografato e quindi codificato in Hmac e firma digitale in Signature? Ho esaminato la documentazione ma non ho idea di come potrei ottenere questi valori – Lokesh

+0

@lokesh: la risposta a tutte le tue domande è già condivisa nel codice precedente. Sopra il codice include, 1. chiave di sessione crittografata e codificata in Skey. 2. blocco PID crittografato nei dati, blocco Hash of Pid di SHA-256 3. crittografato e quindi codificato in Hmac. 4. Creazione di xml firmato mediante firme digitali. –