Java 如何在PHP中集成Aadhaar卡认证Api进行Aadhaar号码验证?

Java 如何在PHP中集成Aadhaar卡认证Api进行Aadhaar号码验证?,java,php,authentication,curl,aadhaar,Java,Php,Authentication,Curl,Aadhaar,我想在PHP中集成Aadhaar卡身份验证API以进行Aadhaar号码验证。我尝试并编写了API访问代码 如何在PHP中生成下面的XML加密字段数据?是用Java编写的 <Auth uid="" tid="" ac="" sa="" ver="" txn="" lk=""> <Uses pi="" pa="" pfa="" bio="" bt="" pin="" otp=""/> <Tkn type="" value=""/> <

我想在PHP中集成Aadhaar卡身份验证API以进行Aadhaar号码验证。我尝试并编写了API访问代码

如何在PHP中生成下面的XML加密字段数据?是用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>

加密和编码的会话密钥
加密PID块
Pid块的SHA-256哈希,加密后编码
AUA的数字签名

要生成XML,可以使用此库轻松生成:

用于加密;我可能错了,但是看起来()您可以用java一次性生成编码结果,然后将结果粘贴到PHP变量中。

//下面是在PHP中集成Aadhaar卡身份验证Api以验证Aadhaar号码的运行代码?
// 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']);
        }
$path=$\u服务器['DOCUMENT\u ROOT']; $certpath=$path.“/your.pfx文件”; $publickeypath=$path.“/your.cer文件”; $certpassword=“您的证书密码”; 需要_once('xmlsecurity.php');//要创建此文件,请使用链接:https://github.com/robrichards/xmlseclibs $trn_id=“AuthDemoClient:public:”。日期(“YmdHisU”); if(!$cert\u store=file\u get\u contents($certpath)){ echo“错误:无法读取证书文件\n”; 出口 } 如果(openssl\u pkcs12\u读取($cert\u存储,$cert\u信息,$certpassword)){ //打印($cert\u info[“cert”]); //打印($cert_-info[“pkey”]); }否则{ echo“错误:无法读取证书存储。\n”; 出口 } 定义(“UIDAI_公共_证书”,$publickeypath); 定义(“AUA_私人证书”、$cert_info[“pkey”]); 日期默认时区设置(“亚洲/加尔各答”); $date2=gmdate(“Y-m-d\TH:i:s”); $date1=date('Y-m-d\TH:i:s',time()); $ts=“.”.$date1.“//日期('Y-m-d\TH:i:s'); $pid_1=''; $randkey=generateRandomString(); $SESSION_ID=$randkey; $skey1=encryptMcrypt($SESSION_ID); $skey=base64_编码($skey1); //生成ci代码开始 $ci=getExpiryDate(UIDAI_公共_证书); //生成pid块代码开始 $pid=encryptPID($pid\u 1,$randkey); //hmac创建代码开始 $hash=hash(“SHA256”,$pid_1,true); $hmac=encryptPID($hash,$randkey); $load_xml=“$skey$pid$hmac”; $dom=新的DOMDocument(); $dom->loadXML($load_xml);//您在上面指定的XML。 $objDSig=newxmlsecuritydsig(); $objDSig->setCanonicalMethod(XMLSecurityDSig::C14N_注释); $objDSig->addReference($dom,XMLSecurityDSig::SHA1,数组('http://www.w3.org/2000/09/xmldsig#enveloped-签名),数组('force_uri' =>“正确”); $objKey=newxmlsecuritykey(XMLSecurityKey::RSA_SHA1,数组('type'=>'private'); $objKey->loadKey($cert_info[“pkey”],False); $objKey->passphrase='您的证书密码'; $objDSig->sign($objKey,$dom->documentElement); $objDSig->add509Cert($cert_info[“cert”]); $objDSig->appendSignature($dom->documentElement); $xml_string=$dom->saveXML(); $xml\u string1=urlencode($xml\u string); $curl=curl_init(); $url=”“//aadhar服务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); /*在20秒内完成*/ curl_setopt($curl,CURLOPT_超时,20); $result=curl\u exec($curl); curl_close($curl); $xml=@simplexml\u load\u string($result); $return_status=$xml['ret']; 如果($return_status==“y”){ $res=1; } 如果($return_status!=“y”){ $res=0; } }否则 { $res='Aadhaarno不存在'; } 返回数组('Message'=>$res); } 函数encryptMcrypt($data){ $fp=fopen(UIDAI_公共_证书,“r”); $pub_key_string=fread($fp,8192); openssl_public_encrypt($data、$encrypted_data、$pub_key_string、openssl_PKCS1_PADDING); 返回$U加密数据; } 函数生成器域字符串($length=32){ $characters='0123456789abcdefghijklmnopqrstuvxyzabcdefghijklmnopqrstuvxyz'; $charactersLength=strlen($characters); $randomString=''; 对于($i=0;$i<$length;$i++){ $randomString.=$characters[rand(0,$charactersLength-1)]; } 返回$randomString; } 函数encryptPID($data$skey){ $result=openssl_encrypt($data,'AES-256-ECB',$skey); 返回($结果); } 函数getExpiryDate($\u证书){ $\u CERT\u DATA=openssl\u x509\u解析(文件\u获取\u内容($\u证书)); 返回日期('Ymd',$证书数据['validTo_时间]); }
我只想集成aadhar status并将adhar下载到我的android应用程序中……那么您可以指导如何向api发送参数以及使用哪些api URL吗?您是否从UID获得了生产密钥。如果是,请告诉我,i@ravinderpayal.com@ITit superpower您好,您能告诉我如何获得Skey中加密和编码的会话密钥值、数据中加密的PID块值、PID块的SHA-256哈希值、加密后在Hmac中编码值和签名中的数字签名值?我已经阅读了文档,但不知道如何获得这些值。上面的代码是为了集成Aadhaa的Aadhaar卡认证Api