Wie integriere ich die Aadhaar-Kartenauthentifizierungs-API für die Überprüfung der Aadhaar-Nummer in PHP?

Lesezeit: 6 Minuten

Benutzer-Avatar
Es ist eine Supermacht

Ich möchte die Aadhaar-Kartenauthentifizierungs-API für die Überprüfung der Aadhaar-Nummer in PHP integrieren. Ich habe es versucht Dies und schrieb Code für den API-Zugriff.

Wie kann ich die XML-Verschlüsselungsfelddaten unten in PHP generieren? Dieser Beispielcode ist in Java geschrieben.

<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>

  • Haben Sie Produktionsschlüssel von UID erhalten? ping mich an, wenn ja, [email protected]

    – Ravinder Payal

    4. August 2016 um 17:38 Uhr

  • @ITit Superpower Hallo, können Sie mir bitte sagen, wie ich die Werte des verschlüsselten und codierten Sitzungsschlüssels in Skey, des verschlüsselten PID-Blocks in den Daten, des SHA-256-Hashes des Pid-Blocks, verschlüsselt und dann in Hmac und der digitalen Signatur in Signature codiert bekomme? Ich habe die Dokumentation durchgesehen, aber keine Ahnung, wie ich diese Werte erhalten könnte.

    – Lokesh Pandey

    29. April 2017 um 4:38 Uhr


// 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']);
        }

  • Der obige Code dient zum Integrieren der Aadhaar-Kartenauthentifizierungs-API für die Aadhaar-Nummernüberprüfung in PHP, nachdem otp vom GETOTP-Webservice abgerufen wurde.

    – Jagdeep Chauhan

    4. April 2017 um 10:49 Uhr

  • Hallo, können Sie mir bitte sagen, wie ich die Werte des verschlüsselten und codierten Sitzungsschlüssels in Skey, des verschlüsselten PID-Blocks in den Daten, des SHA-256-Hashes des Pid-Blocks, verschlüsselt und dann in Hmac und der digitalen Signatur in Signature codiert bekomme? Ich habe die Dokumentation durchgesehen, aber keine Ahnung, wie ich diese Werte erhalten könnte

    – Lokesh Pandey

    29. April 2017 um 5:19 Uhr

  • @lokesh: Die Antwort auf alle Ihre Fragen ist bereits im obigen Code geteilt. Der obige Code beinhaltet 1. verschlüsselten und verschlüsselten Sitzungsschlüssel in Skey. 2. verschlüsselter PID-Block in Daten, SHA-256-Hash des Pid-Blocks 3. verschlüsselt und dann in Hmac codiert. 4. Erstellung von signiertem XML mit digitalen Signaturen.

    – Jagdeep Chauhan

    2. Mai 2017 um 4:38 Uhr


  • Vielen Dank für das Schreiben, was ist xmlsecurity.php in Ihrem Code?

    – Lokesh Pandey

    2. Mai 2017 um 5:07 Uhr

  • @lokesh: xml security.php ist eine PHP-Bibliothek für XML-Sicherheit, die verwendet wird, um eine signierte XML-Datei mit dem privaten Schlüssel und dem Passwort des Zertifikats zu erstellen (github.com/robrichards/xmlseclibs). Diese signierte XML ist die Anforderungs-XML für die URL des aadhaar-Dienstes.

    – Jagdeep Chauhan

    2. Mai 2017 um 6:59 Uhr

Um das XML zu generieren, können Sie diese Bibliothek verwenden, um es ganz einfach zu generieren:

https://github.com/iwyg/xmlbuilder

Für die Verschlüsselung; Ich könnte mich irren, aber es sieht so aus (von dieser Seite) können Sie die codierten Ergebnisse einmal in Java generieren und die Ergebnisse einfach in Ihre PHP-Variablen einfügen.

  • Ich möchte nur den Aadhar-Status integrieren und Adhar in meine Android-App herunterladen. Können Sie also erklären, wie Parameter an APIs gesendet werden und welche API-URLs verwendet werden sollen?

    – Ravi Yadav

    17. April 2016 um 6:49 Uhr

1226150cookie-checkWie integriere ich die Aadhaar-Kartenauthentifizierungs-API für die Überprüfung der Aadhaar-Nummer in PHP?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy