PHP+Curl实现UIDAI Aadhaar eKYC认证遇域名解析错误求助
解决UIDAI Aadhaar eKYC集成中curl错误码6的问题
错误原因定位
错误码6是curl核心的DNS解析失败问题,意味着你的服务器无法将auth.uidai.gov.in域名转换为对应IP地址,直接导致无法连接UIDAI认证服务器,进而无法获取OTP和用户信息。
分步解决方案
1. 先验证服务器DNS解析能力
在服务器终端执行以下命令,确认域名解析是否正常:
nslookup auth.uidai.gov.in # 或者用dig工具更详细排查 dig auth.uidai.gov.in
- 如果返回无结果/错误:说明服务器默认DNS配置失效,直接修改服务器DNS为公共服务(比如8.8.8.8、1.1.1.1)。Linux系统编辑
/etc/resolv.conf,Windows系统在网络适配器设置中修改。 - 如果返回正确IP:说明DNS本身没问题,问题出在curl配置或网络限制。
2. 调整PHP curl配置
在你的curl请求代码中添加DNS指定、SSL验证和错误捕获逻辑,避免默认配置遗漏:
$ch = curl_init(); $apiUrl = "https://auth.uidai.gov.in/your-specific-endpoint"; // 替换为官方要求的API端点 curl_setopt($ch, CURLOPT_URL, $apiUrl); // 强制使用可靠公共DNS(可选,当默认DNS失效时) curl_setopt($ch, CURLOPT_DNS_SERVERS, "8.8.8.8,1.1.1.1"); // UIDAI要求强制SSL验证,禁止关闭以下两项 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); // 设置超时,避免无限等待 curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10); curl_setopt($ch, CURLOPT_TIMEOUT, 30); // 捕获详细错误信息 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($ch); if(curl_errno($ch)){ die("Curl错误详情: " . curl_error($ch)); } curl_close($ch);
3. 排查服务器网络限制
- 测试443端口连通性:执行
telnet auth.uidai.gov.in 443,如果无法连接,说明服务器防火墙/安全组封禁了HTTPS端口,需要开放443端口。 - 代理服务器检查:如果服务器通过代理上网,必须在curl中添加代理配置:
curl_setopt($ch, CURLOPT_PROXY, "你的代理地址:端口"); curl_setopt($ch, CURLOPT_PROXYUSERPWD, "代理账号:密码"); // 仅当代理需要认证时添加
4. 确认API端点正确性
注意UIDAI测试环境与正式环境的域名差异,避免使用废弃端点:
- 测试环境常用
auth.uidai.gov.in - 正式环境请以最新官方文档为准,部分场景可能使用
uidaiauth.uidai.gov.in
5. 检查PHP curl扩展状态
- 确认curl扩展已安装启用:执行
php -m | grep curl,无输出则需安装扩展(Ubuntu:apt install php-curl;CentOS:yum install php-curl)。 - 更新curl版本:老旧版本的curl可能存在DNS解析或SSL兼容性bug,升级到最新稳定版可解决部分隐性问题。
额外注意事项
- UIDAI的eKYC API对请求参数(签名、授权头、格式)要求严格,即使DNS问题解决,参数错误仍会导致无法获取OTP或用户信息,需对照官方文档逐一校验。
- 禁止关闭
CURLOPT_SSL_VERIFYPEER,UIDAI服务器会直接拒绝无证书验证的请求。
内容的提问来源于stack exchange,提问作者MAYUR SANCHETI
相关产品推荐
相关产品推荐

