本文目录导读:

个人或企业进行发票查验(尤其是增值税发票),最官方、最权威的渠道是国家税务总局的“全国增值税发票查验平台”,在 PHP 中开发发票查验功能,没有任何官方公开的免费 API 可以直接调用。
PHP 实现发票查验通常有三种方案,以下是详细的实现思路和代码示例:
模拟登录官方平台(不推荐,容易被封)
这是最直接但也最脆弱的方式,官方平台有复杂的 JavaScript 加密和滑块验证,单纯用 PHP 的 cURL 模拟登录成功率极低,且违反网站使用条款。除非是内部极低频使用,否则不建议。
调用第三方 API(推荐,适合企业)
这是最主流的做法,选择一家有正规资质的第三方数据服务商(如聚合数据、APISpace、阿里云市场等),购买发票查验 API 服务。
流程:
- 在服务商平台注册并购买“发票查验” API。
- 获取
AppKey和AppSecret。 - 后端 PHP 将发票信息(发票代码、号码、开票日期、校验码/金额)发送给第三方 API。
- 第三方返回查验结果(真伪、发票详情)。
PHP 调用第三方 API 示例(以常见的 POST JSON 为例)
<?php
/**
* 发票查验函数(基于第三方 API)
* @param string $fpdm 发票代码(10位或12位)
* @param string $fphm 发票号码(8位)
* @param string $kprq 开票日期 (YYYY-MM-DD)
* @param string $kjhj 价税合计(校验码后6位,或输入金额,视不同接口要求)
* @return array 查验结果
*/
function checkInvoice($fpdm, $fphm, $kprq, $kjhj) {
// 1. 第三方平台提供的配置(示例数据)
$appcode = '你的AppCode'; // 用于头部认证
$api_url = 'https://api.example.com/invoice/verify'; // 第三方接口地址
// 2. 构造请求数据(根据所购 API 的文档调整字段)
$postData = [
'fpdm' => $fpdm, // 发票代码
'fphm' => $fphm, // 发票号码
'kprq' => $kprq, // 开票日期
'kjhj' => $kjhj, // 校验码后6位 或 不含税金额
'fpqqlx' => '01' // 发票类型代码(如:01 增值税专用发票)
];
// 3. 初始化 cURL
$ch = curl_init();
curl_setopt_array($ch, [
CURLOPT_URL => $api_url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => [
'Authorization: APPCODE ' . $appcode,
'Content-Type: application/json; charset=UTF-8'
],
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => json_encode($postData)
]);
// 4. 执行请求
$response = curl_exec($ch);
$error = curl_error($ch);
curl_close($ch);
// 5. 处理返回结果
if ($error) {
return ['success' => false, 'msg' => '请求失败: ' . $error];
}
$data = json_decode($response, true);
// 根据具体接口返回格式调整判断逻辑
if (isset($data['Result']) && $data['Result'] === '1') { // 1 代表查验一致
return ['success' => true, 'data' => $data['Detail']];
} else {
return ['success' => false, 'msg' => $data['Description'] ?? '查验失败'];
}
}
// 使用示例
$result = checkInvoice('031001900311', '12345678', '2023-10-01', '123456');
print_r($result);
?>
对接国家税务总局“乐企数字开放平台”(最合规,适合大型企业)
如果你是企业财务系统开发商,且企业具备一定的规模(通常需要纳税信用等级为 A/B 级,且满足当地税务局的特定要求),可以申请接入乐企平台。
- 优点:官方直连,数据准确,合规性最强。
- 缺点:门槛极高,需要企业有专门的软硬件环境,并且开发周期长(涉及复杂的加签、验签流程)。
核心步骤(极简版):
- 申请接入:向主管税务机关提交申请。
- 准备证书:申请税务数字证书(UKey/CA证书)。
- 加密交互:使用
phpseclib(PHP 加密库)或OpenSSL扩展对报文做 SM2/SM4 加解密。 - 调用接口:调用
/inv-verification相关接口。
总结与建议
| 方案 | 复杂度 | 成本 | 稳定性 | 适用场景 |
|---|---|---|---|---|
| 模拟官网 | 极高 | 免费 | 极差(易崩) | 极不推荐 |
| 第三方 API | 低 | 按次收费 (约 0.1-1元/次) | 高 | 中小企业首选 |
| 乐企平台 | 极高 | 高(需服务器与证书) | 高(最稳定) | 大型企业自建 |
如果你是 PHP 开发者,建议直接选择方案二(第三方 API)。
开发时的注意事项:
- 数据脱敏与安全:发票数据涉及财务信息,在日志中应隐藏校验码等敏感字段。
- 异常处理:第三方 API 返回超时或频率限制时,需要有合理的重试机制(建议队列异步处理)。
- 详情存储:查验成功后,建议将发票的
全票面信息(购买方、销售方、货物明细)存储到本地数据库,避免每次查验都请求接口产生费用。
如果有其他具体需求,欢迎继续提问。