查询异步识别查验结果
接口说明
- url: /common/invoiceCheck/checkResult
- method: GET
- 参数格式:Query String
该接口使用发起异步纯识别查验返回的 task_id 查询结果。识别字段和查验字段都直接位于每条 data[] 中。
返回说明
| 场景 |
返回内容 |
| 正在识别 |
返回 msg_code=C005,票面字段可能尚未生成 |
| 识别完成,正在查验 |
返回已识别的票面字段和 msg_code=C001 |
| 识别查验完成 |
返回票面字段、查验字段和 msg_code=C003 |
| 查验失败 |
返回已取得的票面字段、失败信息以及 C002 或 C004 |
| 同一字段在识别和查验结果中都存在 |
优先返回查验值;查验值为空时使用识别值 |
所有票面和查验字段都直接位于 data[] 中,不使用额外包装层。不同票种只返回该票种存在的字段。
请求参数
| 字段名称 |
字段类型 |
字段描述 |
是否必填 |
| bizId |
String |
当前请求的业务唯一标识 |
true |
| timestamp |
Long |
当前请求的毫秒时间戳 |
true |
| task_id |
Long |
发起接口返回的任务 ID |
true |
响应参数
| 字段名称 |
字段类型 |
字段描述 |
| bizId |
String |
与请求入参一致 |
| resCode |
Integer |
接口响应状态码 |
| resMsg |
String |
返回信息 |
| data |
Array |
识别查验结果,每张票据一条 |
| data[].result |
Integer |
处理结果,1 表示已取得票据结果 |
| data[].msg_code |
String |
轮询状态码,见下表 |
| data[].error_message |
String |
当前识别或查验信息 |
| data[].check_date |
Long |
最后查验时间 |
| data[].invoice_type |
String |
发票类型 |
| data[].invoice_code |
String |
发票代码 |
| data[].invoice_num |
String |
发票号码 |
| data[].receipt_date |
Long |
开票日期 |
| data[].check_code |
String |
校验码 |
| data[].total_amount |
BigDecimal |
价税合计 |
| data[].amount |
BigDecimal |
不含税金额 |
| data[].tax_amount |
BigDecimal |
税额 |
| data[].remark |
String |
备注 |
| data[].buyer_name |
String |
购方名称 |
| data[].buyer_tax_code |
String |
购方税号 |
| data[].buyer_address_phone |
String |
购方地址、电话 |
| data[].buyer_account |
String |
购方开户行及账号 |
| data[].seller_name |
String |
销方名称 |
| data[].seller_tax_code |
String |
销方税号 |
| data[].seller_address_phone |
String |
销方地址、电话 |
| data[].seller_account |
String |
销方开户行及账号 |
| data[].cancellation_mark |
String |
作废标识 |
| data[].repeat_flag |
String |
是否已查验 |
| data[].detail |
Array |
历史兼容明细行 |
票面补充字段
| 字段名称 |
字段类型 |
字段描述 |
| data[].card_id |
String |
微信/企业微信来源发票的 card_id |
| data[].encrypt_code |
String |
微信/企业微信来源发票的 encrypt_code |
| data[].userId |
String |
支付宝来源发票的用户 ID |
| data[].invoiceCode |
String |
支付宝来源发票的发票代码 |
| data[].invoiceNum |
String |
支付宝来源发票的发票号码 |
| data[].invoice_ocr_log_id |
Long |
识别日志 ID |
| data[].image_size |
Integer[] |
图片分辨率 [width, height] |
| data[].page |
Integer |
页码,从 0 开始 |
| data[].page_number |
String |
多页发票页码 |
| data[].receipt_currency |
String |
票据币种 |
| data[].attachment_url |
String |
文件地址 |
| data[].direction |
Integer |
顺时针旋转方向 |
| data[].region |
Integer[] |
单张票据在图片中的区域 [x1, y1, x2, y2] |
| data[].invoice_number |
String |
OCR 识别的发票号码 |
| data[].subtotal_amount |
BigDecimal |
小计金额 |
| data[].tax_rate |
BigDecimal |
税率 |
| data[].highway_flag |
String |
高速标识 |
| data[].title |
String |
票据标题 |
| data[].agent_mark |
String |
是否代开 |
| data[].buyer_bank_account |
String |
购买方银行账号 |
| data[].buyer_addr_tel |
String |
购买方地址、电话 |
| data[].buyer_address |
String |
购买方地址 |
| data[].seller_bank_account |
String |
销售方银行账号 |
| data[].seller_addr_tel |
String |
销售方地址、电话 |
| data[].seller_address |
String |
销售方地址 |
| data[].purchase_order |
String |
采购订单 |
| data[].province |
String |
省 |
| data[].city |
String |
市 |
| data[].company_seal |
String |
是否有公司印章 |
| data[].red_letter_flag |
String |
红字发票标识 |
| data[].error_num_flag |
Boolean |
发票号码是否存在错误 |
| data[].subject |
String |
科目 |
| data[].buyer_bank |
String |
开户银行 |
| data[].purchase_invoice |
String |
是否进入票据池 |
| data[].other_info |
String |
其他信息 |
| data[].custom_data |
String |
定制数据 |
| data[].country |
String |
国家 |
| data[].consume_scene |
String |
消费场景 |
交通、住宿及其他票种字段
| 字段名称 |
字段类型 |
字段描述 |
| data[].date |
String |
票据日期或乘车日期 |
| data[].start_time |
String |
开始时间 |
| data[].end_time |
String |
结束时间 |
| data[].start_datetime |
String |
开始日期时间或乘车时间 |
| data[].end_datetime |
String |
结束日期时间 |
| data[].mileage |
BigDecimal |
里程 |
| data[].license_plate |
String |
车牌号 |
| data[].destination_city |
String |
起点 |
| data[].destination_city_to |
String |
终点 |
| data[].location_from |
String |
出发地/取车地点 |
| data[].location_to |
String |
到达地/还车地点 |
| data[].station_from |
String |
出发站 |
| data[].station_to |
String |
到达站 |
| data[].train_class |
String |
火车席别 |
| data[].train_number |
String |
车次 |
| data[].name |
String |
乘车人姓名 |
| data[].id_card |
String |
乘车人身份证号 |
| data[].passenger_name |
String |
乘客/入住人/用车人 |
| data[].currency |
String |
币种 |
| data[].fare |
BigDecimal |
票价 |
| data[].civil_avn_dev_fund |
BigDecimal |
民航发展基金 |
| data[].fuel_surcharge |
BigDecimal |
燃油附加费 |
| data[].other_taxes |
BigDecimal |
航空客票其他税费 |
| data[].insurance |
BigDecimal |
航空客票保险费 |
| data[].international_flag |
String |
国内/国际航班标识 |
| data[].flight_class |
String |
航班舱位类型 |
| data[].flight_number |
String |
航班号 |
| data[].flight_detail |
Array |
航段信息 |
| data[].shop_location |
String |
商户地址 |
| data[].duration |
Integer |
晚数/天数 |
| data[].mobile_number |
String |
号码/账户 |
| data[].cross_border_flag |
String |
是否跨境 |
data[].flight_detail[] 字段:
| 字段名称 |
字段类型 |
字段描述 |
| from |
String |
出发站 |
| to |
String |
到达站 |
| time |
String |
乘机时间 |
| date |
String |
乘机日期 |
| seat |
String |
座位等级 |
| flight_class |
String |
舱位类型 |
| class_name |
String |
舱位等级 |
| flight_number |
String |
航班号 |
| allow |
String |
行李额 |
| carrier |
String |
承运人 |
| not_valid_before |
String |
客票生效日期 |
| not_valid_after |
String |
客票有效截止日期 |
OCR 明细行字段
| 字段名称 |
字段类型 |
字段描述 |
| data[].items |
Array |
OCR 识别的票据明细行 |
| data[].items[].name |
String |
货物或应税劳务、服务名称 |
| data[].items[].specification |
String |
规格型号 |
| data[].items[].unit |
String |
单位 |
| data[].items[].quantity |
BigDecimal |
数量 |
| data[].items[].price |
BigDecimal |
单价 |
| data[].items[].amount |
BigDecimal |
金额 |
| data[].items[].tax_rate |
Integer |
税率 |
| data[].items[].tax_amount |
BigDecimal |
税额 |
| data[].items[].total_amount |
BigDecimal |
价税合计 |
| data[].items[].material_name |
String |
明细名称 |
| data[].items[].classification_code |
String |
税收分类编码 |
查验补充字段
| 字段名称 |
字段类型 |
字段描述 |
| data[].error |
String |
查验错误码 |
| data[].message |
String |
查验信息 |
| data[].check_status |
String |
查验状态 |
| data[].check_message |
String |
查验说明 |
| data[].origin_message |
Object |
原始查验信息 |
| data[].detail_list |
Array |
查验明细行 |
| data[].receipt_id |
Integer |
票据 ID |
| data[].sales_list_flag |
String |
销货清单标志 |
| data[].abnormal_status |
String |
异常状态标志 |
| data[].log_id |
Long |
识别批次日志 ID |
| data[].dkbs |
String |
代开标识 |
| data[].total_amount_cn |
String |
价税合计中文大写 |
| data[].electronic_ticket_number |
String |
电子客票号 |
| data[].boarding_date |
String |
乘车日期 |
| data[].id_number |
String |
证件号 |
| data[].train_type |
String |
席别 |
| data[].seat |
String |
席位 |
| data[].railway_carriage |
String |
车厢 |
| data[].air_conditioning_characteristics |
String |
空调特征 |
| data[].departure |
String |
出发时间 |
| data[].international_type |
String |
国内/国际类型 |
| data[].gp_order |
String |
GP 单号 |
| data[].estate_lease_detail |
Array |
不动产经营租赁服务明细 |
| data[].passenger_transportation_detail |
Array |
旅客运输服务明细 |
| data[].task_id |
String |
查验任务 ID |
| data[].specific_feature |
String |
特定要素 |
| data[].business_type |
String |
业务类型 |
| data[].sales_point_code |
String |
销售网点代号 |
| data[].filling_unit |
String |
填开单位 |
| data[].endorsement |
String |
签注 |
| data[].billing_status |
String |
开票状态 |
| data[].ofd_url |
String |
OFD 文件地址 |
| data[].xml_url |
String |
XML 文件地址 |
| data[].pdf_url |
String |
PDF 文件地址 |
data[].detail_list[] 字段:
| 字段名称 |
字段类型 |
字段描述 |
| name |
String |
货物名称 |
| specification |
String |
规格型号 |
| unit |
String |
单位 |
| total_amount |
BigDecimal |
价税合计 |
| amount |
BigDecimal |
金额 |
| tax_amount |
BigDecimal |
税额 |
| price |
BigDecimal |
不含税单价 |
| quantity |
BigDecimal |
数量 |
| tax_rate |
BigDecimal |
税率 |
| classification_code |
String |
税收分类编码 |
| start_date |
Long |
开始日期,时间戳 |
| end_date |
Long |
结束日期,时间戳 |
| license_plate |
String |
车牌号 |
| car_type |
String |
车辆类型 |
data[].flight_detail[] 在查验结果中存在时优先返回以下结构:
| 字段名称 |
字段类型 |
字段描述 |
| destination_airport |
String |
始发站 |
| destination_airport_to |
String |
到达站 |
| flight_number |
String |
航班号 |
| carrier_date |
String |
承运日期,格式 yyyy-MM-dd |
| departure_time |
String |
起飞时间,格式 HH:mm |
| segment_number |
String |
航段序号 |
| carrier |
String |
承运人 |
| seating_class |
String |
座位等级 |
| ticket_category |
String |
客票类型 |
| ticket_validity_date |
String |
客票生效日期 |
| expiration_date |
String |
有效截止日期 |
| free_baggage |
String |
免费行李 |
| flight_class |
String |
舱位类型 |
data[].estate_lease_detail[] 字段:
| 字段名称 |
字段类型 |
字段描述 |
| propertyCertificateNumber |
String |
产权证书/不动产权证号 |
| propertyAddressProvince |
String |
不动产地址(省) |
| propertyAddressCity |
String |
不动产地址(市) |
| propertyAddressDetail |
String |
不动产详细地址 |
| leaseStartDate |
String |
租赁开始日期 |
| leaseEndDate |
String |
租赁结束日期 |
| leaseStartAndEndDate |
String |
租赁起止日期 |
| crossCityFlag |
String |
跨地(市)标志 |
data[].passenger_transportation_detail[] 字段:
| 字段名称 |
字段类型 |
字段描述 |
| serialNumber |
Integer |
序号 |
| passengerName |
String |
出行人 |
| idCardNumber |
String |
身份证件号码 |
| idCardTypeCode |
String |
出行人证件类型代码 |
| travelDate |
String |
出行日期 |
| departureLocation |
String |
出发地 |
| arrivalLocation |
String |
到达地 |
| transportType |
String |
交通工具类型 |
轮询状态
| msg_code |
含义 |
是否建议继续轮询 |
| C001 |
查验中 |
是 |
| C002 |
查验失败,系统仍可能重试 |
是 |
| C003 |
查验完成,或票种无需查验 |
否 |
| C004 |
查验最终失败 |
否 |
| C005 |
识别中 |
是 |
请求示例
GET /common/invoiceCheck/checkResult?task_id=469793911900995584&bizId=12345678-1234-1234-1234-123456789012×tamp=1788141600000
响应示例
{
"resCode": 200000,
"resMsg": "success",
"bizId": "12345678-1234-1234-1234-123456789012",
"data": [
{
"result": 1,
"msg_code": "C003",
"invoice_type": "65",
"invoice_num": "7812345678901",
"total_amount": 860.00,
"passenger_name": "示例乘客",
"fare": 700.00,
"civil_avn_dev_fund": 50.00,
"fuel_surcharge": 100.00,
"other_taxes": 10.00
}
]
}
注意事项
resCode=200000 只表示轮询请求处理成功,票据业务状态以 msg_code 为准。
- 同一文件可能返回多条
data。
- 当
msg_code 为 C003 或 C004 时应停止轮询。
- 查验失败时,请结合
error_message 和同层的识别查验字段排查,不要只比较发票号码。