说起发票录入、发票查验工作,无疑不让财务人员感到头疼。传统依赖于人工录入发票信息的方式,速度慢、效率低,最主要的是准确率没有保障,不仅会为企业带来财税风险,财务自身也可能需要承担一定的责任,因为,发票识别、发票查验接口软件应用而生。
发票识别+发票查验接口,仅需上传发票图片,即可实现发票信息的快速、精准录入与真伪查验,集成简单方便,以发票查验接口为例,接口说明如下:
|----|---------------|---------|----|-------------------------------------------------------------------|
| 接口说明 |||||
| 接口地址: || https://netocr.com/verapi/v2/verInvoice.do |||
| 接口调用方法: || post |||
| 接口接收参数: |||||
| 序号 | 名称 | 类型 | 必填 | 说明 |
| 1 | key | String | 是 | 用户ocrKey |
| 2 | secret | String | 是 | 用户ocrSecrert |
| 3 | invoiceCode | String | 否 | 发票代码 |
| 4 | invoiceNumber | String | 是 | 发票号码 |
| 5 | billingDate | String | 否 | 开票日期:YYYY-MM-DD (非区块链发票必填) |
| 6 | totalAmount | String | 是 | 合计金额(不含税),必须精确到两位小数(专票、货运专票、机动车专票必填) 价税合计(全电票、航空运输电子客票行程单、铁路电子客票) |
| 7 | checkCode | String | 否 | 校验码后6位(普票、电子普票、卷式普票,必填),校验码(区块链必填),全电发票号码后6位(全电纸票(普通发票)) |
| 8 | salesTaxNo | String | 否 | 销方税号(区块链必填) |
| 9 | orderNo | String | 否 | 订单号(通用电子发票必填) |
| 9 | typeId | Integer | 是 | 发票验真:3007 |
状态码说明:
|---|---|--------|---|---|
| status || code | message ||
| status || 0 | 成功(发票一致)(扣费) ||
| status || -30000 | 该票今日本平台核验失败已超5次(扣费) ||
| status || -30001 | 不一致,金额或校验码错误(扣费) ||
| status || -30002 | 所查发票不存在(扣费) ||
| status || -30003 | 超过该张票当天查验次数(请于次日再次查验) ||
| status || -30009 | 已超过最大查验量 ||
| status || -30004 | 查询发票不规范 ||
| status || -30010 | 查验异常 ||
| status || -30005 | 参数不能为空 ||
| status || -30008 | 参数长度不正确 ||
| status || -30006 | 日期当天的不能查验 ||
| status || -30007 | 超过五年的不能查验 ||
| status || -30017 | 参数异常 ||
| status || -30014 | 接口异常 ||
| status ||
| status ||
| status ||
| status ||
| status ||
| status ||
以发票查验接口C#语言代码为例:
var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Post, "https://netocr.com/verapi/v2/verInvoice.do");
var content = new MultipartFormDataContent();
content.Add(new StringContent("M***********g"), "key");
content.Add(new StringContent("3***********6"), "secret");
content.Add(new StringContent("3007"), "typeId");
content.Add(new StringContent("*******"), "invoiceCode");
content.Add(new StringContent("*********"), "invoiceNumber");
content.Add(new StringContent("*********"), "billingDate");
content.Add(new StringContent("*********"), "totalAmount");
content.Add(new StringContent("*********"), "checkCode");
content.Add(new StringContent("*********"), "salesTaxNo");
content.Add(new StringContent("***********"), "orderNo");
request.Content = content;
var response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
Console.WriteLine(await response.Content.ReadAsStringAsync());