Java 如何在PHP中集成Aadhaar卡认证Api进行Aadhaar号码验证?
我想在PHP中集成Aadhaar卡身份验证API以进行Aadhaar号码验证。我尝试并编写了API访问代码 如何在PHP中生成下面的XML加密字段数据?是用Java编写的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=""/> <
<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