2015-07-13 4 views
36

Chcę zintegrować API Autoryzacji Aadhaar Card z weryfikacją numeru Aadhaara w PHP. Próbowałem this i napisałem kod dostępu API.Jak zintegrować Aparaty uwierzytelniające Aadhaar Card Api z weryfikacją numeru Aadhaara w PHP?

Jak mogę wygenerować dane pola szyfrowania XML poniżej w PHP? This sample code jest napisane w Javie.

<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

Masz klucze produkcyjne od UID. [email protected] –

+0

@ITit suppower Czy możesz mi powiedzieć, w jaki sposób mogę uzyskać wartości zaszyfrowanego i zakodowanego klucza sesji w Skey, zaszyfrowanym bloku PID w danych, SHA-256 bloku Hash of Pid, ​​zaszyfrowanym a następnie zakodowane w Hmac i podpis cyfrowy w Signature? Przeszedłem przez dokumentację, ale nie miałem pojęcia, jak mogę uzyskać te wartości. – Lokesh

Odpowiedz

2

Aby wygenerować plik XML, można użyć tej biblioteki do generowania go dość łatwo:

https://github.com/iwyg/xmlbuilder

do szyfrowania; Mogę się mylić, ale wygląda na to (from this page), że możesz jednorazowo wygenerować zakodowane wyniki w java i wkleić wyniki do zmiennych PHP.

+0

Chcę zintegrować tylko status aadhar i pobrać Adhar do mojej aplikacji na Androida ... więc możesz wskazać, jak przesłać parametry do apisa i które adresy URL mają być używane? –

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

Powyższy kod służy do integracji Aadhaar Card Authentication Api z weryfikacją numeru Aadhaar w PHP po uzyskaniu otp od serwisu internetowego GETOTP. –

+0

Witam, czy możesz mi powiedzieć, w jaki sposób mogę uzyskać wartości zaszyfrowanego i zakodowanego klucza sesji w Skey, zaszyfrowanym bloku PID w danych, bloku Hash of Pid SHA-256, zaszyfrowanym, a następnie zakodowanym w Hmac i podpisie cyfrowym w Signature? Przeszedłem przez dokumentację, ale nie miałem pojęcia, jak mogę uzyskać te wartości. – Lokesh

+0

@lokesh: Odpowiedź na wszystkie Twoje pytania jest już udostępniona w powyższym kodzie. Powyższy kod obejmuje 1. zaszyfrowany i zakodowany klucz sesji w Skey. 2. zaszyfrowany blok PID w danych, blok Hash of Pid SHA-256 3. zaszyfrowany, a następnie zakodowany w Hmac. 4. Tworzenie podpisanego xml za pomocą podpisów cyfrowych. –