在企业经营中,发票扮演着记录交易、报销和纳税的重要角色。然而,由于发票的众多类型和复杂的制作方式,一些企业可能面临着假发票、冒充发票等风险。为了提高财务管理的效率和准确性,以及防范不法行为,增值税发票核验成为财务管理中的一项必备步骤。
什么是增值税发票核验API?
增值税发票核验API是一种通过编程方式访问和使用增值税发票核验服务的接口。这类API通常由专业的财务服务提供商提供,允许开发者将增值税发票核验功能集成到其财务系统、企业应用程序或网站中。这样的API能够快速、准确地验证一张发票的真实性,避免使用伪造或无效的发票。
增值税发票核验API适用于哪些人?
-
企业财务团队: 用于验证公司开具的和收到的增值税发票,确保财务数据的准确性和合规性。
-
会计事务所: 用于辅助客户进行增值税报表的制作,提高会计服务的效率和质量。
-
税务机关: 用于对纳税企业的增值税发票进行验证,确保企业按规定报税。
-
金融机构: 用于贷后管理中验证客户提供的增值税发票,降低信贷风险。
-
企业软件开发者: 用于集成到企业财务软件中,为用户提供方便的增值税发票核验功能。
增值税发票核验API是如何工作的?
-
图像采集: 用户通过扫描仪、相机或手机拍摄发票图像,然后将图像上传至增值税发票核验API。
-
图像预处理: 对上传的图像进行处理,包括去除噪声、调整图像质量,确保后续的分析能够基于高质量的图像进行。
-
发票信息提取: API通过光学字符识别(OCR)等技术,从发票图像中提取必要的信息,如发票号码、日期、金额等。
-
信息比对: 提取的发票信息与相应的税务数据库进行比对,验证发票的真实性和合法性。
-
结果返回: API将验证结果返回给用户,通常包括验证通过与否的标志,以及详细的验证信息。
如何使用增值税发票核验API?
-
注册和获取API密钥: 开发者需要在提供增值税发票核验API的平台注册账户,并获取API密钥,以便进行身份验证和访问API服务。
-
集成到应用程序: 开发者根据API提供的文档和示例代码,将增值税发票核验API集成到自己的应用程序或系统中。
-
图像上传: 用户通过应用程序上传需要验证的增值税发票图像,确保图像清晰可见。
-
获取验证结果: 应用程序通过API调用获取增值税发票核验的结果,根据结果决定是否接受或拒绝该发票。
-
定期更新: 开发者需要定期检查API提供商是否有更新,以确保使用的是最新版本的增值税发票核验API。
通过使用增值税发票核验API,企业和组织可以提高财务管理的效率,减少因使用无效或伪造发票而带来的风险。这项技术为各行各业提供了更加便捷和可靠的增值税发票核验解决方案,助力数字化时代财务管理的发展。
增值税发票核验在不同开发语言中的调用(Java/python/php 示例)
在Java中,下面这段代码展示了如何使用 Java 发送 HTTP POST 请求到人脸对比服务,以及如何处理服务的响应。需要注意的是,其中的 HttpUtils 类和依赖项需要从提供的链接下载并引入。此外,{{AppCode}} 部分需要替换为实际的应用程序代码。
import com.mittang.util.HttpUtils;
import org.apache.http.HttpResponse;
import org.apache.http.util.EntityUtils;
import java.util.HashMap;
import java.util.Map;
public class Example {
public static void main(String[] args) throws Exception{
String host = "https://open.expauth.com";
String path = "/v1/tools/ocr/verInvoice";
String method = "POST";
// "{{AppCode}}" 替换成您的 AppCode
String appcode = "{{AppCode}}";
Map headers = new HashMap<>();
headers.put("X-Mce-Signature", "AppCode/" + appcode);
headers.put("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
Map querys = new HashMap<>();
Map bodys = new HashMap<>();
// 填充参数
bodys.put("invoiceCode", "invoiceCode");
bodys.put("invoiceNumber", "invoiceNumber");
bodys.put("billingDate", "billingDate");
bodys.put("totalAmount", "totalAmount");
bodys.put("checkCode", "checkCode");
bodys.put("invoiceType", "invoiceType");
try {
/**
* 重要提示如下:
* HttpUtils请从
* https://static.miitang.com/saas/simple/HttpUtils.java 下载
*
* 相应的依赖请参照
* https://static.miitang.com/saas/simple/pom.xml
*/
HttpResponse response = HttpUtils.doPost(host, path, method, headers, querys, bodys);
// 获取 response 的 body
String resStr = EntityUtils.toString(response.getEntity());
System.out.println(resStr);
int statusCode = response.getStatusLine().getStatusCode();
if(statusCode == 200){
// 请求成功,可根据业务码(请求体中的code)进行逻辑处理
} else if(statusCode == 610){
// 用户输入的参数问题,可直接提示用户
} else if(statusCode == 611){
// 系统准备的数据问题,如 文件数据下载失败、数据不存在、数据重复请求等。 LOG it and 提示用户
} else if(statusCode == 612){
// 用户操作频度问题,可提示用户。 LOG it and 按业务特点做处理
} else if(statusCode >= 500 && statusCode < 600){
// 在运行阶段发生的系统稳定性问题,客户端可以重试,或者联系我司客服
} else {
// 如账户密码错误、IP白名单问题、余额不足等,您应该在对接过程中解决相关问题。
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
在Python中,使用 requests 库发送 POST 请求到增值税发票核验服务接口,根据响应状态码进行业务逻辑处理,包括成功、参数问题、数据问题、操作频度问题和系统稳定性问题等的处理。
import json
import requests
if __name__ == '__main__':
url = "https://open.expauth.com/v1/tools/ocr/verInvoice"
payload = json.dumps({
"invoiceCode": "invoiceCode",
"invoiceNumber": "invoiceNumber",
"billingDate": "billingDate",
"totalAmount": "totalAmount",
"checkCode": "checkCode",
"invoiceType": "invoiceType"
})
headers = {
"Content-Type": "application/json",
# "{{AppCode}}" 替换为您的 AppCode
"X-Mce-Signature": "AppCode/{{AppCode}}"
}
response = requests.request("POST", url, headers=headers, data=payload)
status_code = response.status_code
print("headers:", response.headers)
print("http 状态码:", str(status_code))
print(response.text)
if status_code == 200:
"请求成功,可根据业务码(请求体中的code)进行逻辑处理"
elif status_code == 610 :
"用户输入的参数问题,可直接提示用户"
elif status_code == 611 :
"系统准备的数据问题,如 文件数据下载失败、数据不存在、数据重复请求等。 LOG it and 提示用户"
elif status_code == 612 :
"用户操作频度问题,可提示用户。 LOG it and 按业务特点做处理"
elif status_code >= 500 & status_code < 600 :
"在运行阶段发生的系统稳定性问题,客户端可以重试,或者联系我司客服"
else:
"如账户密码错误、IP白名单问题、余额不足等,您应该在对接过程中解决相关问题。"
在PHP中,使用 cURL 发送 POST 请求到增值税发票核验服务接口,处理并输出相应的业务逻辑。它包括设置请求头、发送请求、处理响应,根据响应状态码进行不同的业务逻辑处理,如成功、参数问题、数据问题、操作频度问题、系统稳定性问题等。
<?php
$host = "https://open.expauth.com";
$path = "/v1/tools/ocr/verInvoice";
$method = "POST";
$appcode = "{{您的AppCode}}";
$headers = array();
array_push($headers, "x-mce-signature:AppCode/" . $appcode);
//根据API的要求,定义相对应的Content-Type
array_push($headers, "Content-Type".":"."application/x-www-form-urlencoded; charset=UTF-8");
$querys = "";
$bodys = "invoiceCode=invoiceCode&invoiceNumber=invoiceNumber&billingDate=billingDate&totalAmount=totalAmount&checkCode=checkCode&invoiceType=invoiceType";
$url = $host . $path;
$curl = curl_init();
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $method);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_FAILONERROR, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HEADER, true);
if (1 == strpos("$".$host, "https://"))
{
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
}
curl_setopt($curl, CURLOPT_POSTFIELDS, $bodys);
$result = curl_exec($curl);
$header_size = curl_getinfo($curl, CURLINFO_HEADER_SIZE); // 获得响应头大小
$httpCode = curl_getinfo($curl,CURLINFO_HTTP_CODE);
$body = substr($result,$header_size);
curl_close($curl);
$retMap = json_decode($body, true);
$code = $retMap["code"];
echo $httpCode.PHP_EOL; // DEBUG
if($httpCode == 200){
// 请求成功,可根据业务码(请求体中的code)进行逻辑处理
echo $retMap["code"].PHP_EOL;
echo $retMap["message"].PHP_EOL;
echo $retMap["hasFees"].PHP_EOL;
echo $retMap["fees"].PHP_EOL;
if($code == "FP00000"){
// SUCCESS
echo "SUCCESS";
}
else{
// FAILURE
echo "FAILURE";
}
} else {
echo $code.PHP_EOL; // DEBUG
if($httpCode == 610){
// 用户输入的参数问题,可直接提示用户
$errors = $retMap["errors"];
$errorMap = null;
foreach($errors as $key=>$value){
foreach($value as $key2=>$value2){
$errorMap[$key] = $value2;
break;
}
}
// 转化为 key:tip
echo($errorMap["idCardNo"].PHP_EOL);
echo($errorMap["name"].PHP_EOL);
} else if($httpCode == 611){
// 系统准备的数据问题,如 文件数据下载失败、数据不存在、数据重复请求等。 LOG it and 提示用户
echo "修订数据状态,不要重复操作。".PHP_EOL;
} else if($httpCode == 612){
// 用户操作频度问题,可提示用户。 LOG it and 按业务特点做处理
echo $retMap["message"].PHP_EOL;
} else if($httpCode >= 500 && $httpCode < 600){
// 在运行阶段发生的系统稳定性问题,客户端可以重试,或者联系我司客服
// TODO: retry
echo "RETRY".PHP_EOL;
} else {
// 如账户密码错误、IP白名单问题、余额不足等,您应该在对接过程中解决相关问题。
var_dump($retMap);
}
}
?>
更多增值税发票核验相关API
增值税发票OCR识别
增值税发票(卷票)识别【API Space】