接口地址:https://aip.baidubce.com/rest/2.0/ocr/v1/vat_invoice |
---|
返回格式:json |
请求方式:post |
请求示例:https://aip.baidubce.com/rest/2.0/ocr/v1/vat_invoice?access_token=test |
名称 | 类型 | 必填 | 说明 |
---|---|---|---|
image | string | 必填 | 图像数据,base64编码后进行urlencode,要求base64编码和urlencode后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/png/bmp格式 |
accuracy | string | 选填 | normal(默认配置)对应普通精度模型,识别速度较快,在四要素的准确率上和high模型保持一致,high对应高精度识别模型,相应的时延会增加,因为超时导致失败的情况也会增加(错误码282000) |
名称 | 类型 | 说明 |
---|---|---|
log_id | uint64 | 唯一的log id,用于问题定位 |
words_result_num | uint32 | 识别结果数,表示words_result的元素个数 |
words_result | array() | 识别结果数组 |
InvoiceType | string | 发票种类名称 |
InvoiceCode | uint32 | 发票代码 |
InvoiceNum | uint32 | 发票号码 |
InvoiceDate | uint32 | 开票日期 |
TotalAmount | uint32 | 合计金额 |
TotalTax | string | 合计税额 |
AmountInFiguers | array() | 价税合计(小写) |
AmountInWords | object | 价税合计(大写) |
CheckCode | string | 校验码 |
SellerName | uint32 | 销售方名称 |
SellerRegisterNum | uint32 | 销售方纳税人识别号 |
PurchaserName | uint32 | 购方名称 |
PurchaserRegisterNum | uint32 | 购方纳税人识别号 |
CommodityName | object[] | 货物名称 |
-row | uint32 | 行号 |
-word | string | 内容 |
CommodityType | object[] | 规格型号 |
-row | uint32 | 行号 |
-word | string | 内容 |
CommodityUnit | object[] | 单位 |
-row | uint32 | 行号 |
-word | string | 内容 |
CommodityNum | object[] | 数量 |
-row | uint32 | 行号 |
-word | string | 内容 |
CommodityPrice | object[] | 单价 |
-row | uint32 | 行号 |
-word | string | 内容 |
CommodityAmount | object[] | 金额 |
-row | uint32 | 行号 |
-word | string | 内容 |
CommodityTaxRate | object[] | 税率 |
-row | uint32 | 行号 |
-word | string | 内容 |
CommodityTax | object[] | 税额 |
-row | uint32 | 行号 |
-word | string | 内容 |
{
"log_id": "5425496231209218858",
"words_result_num": 29,
"words_result": {
"InvoiceNum": "14641426",
"SellerName": "上海易火广告传媒有限公司",
"CommodityTaxRate": [{
"word": "6%",
"row": "1"
}],
"SellerBank": "中国银行南翔支行446863841354",
"Checker": ":沈园园",
"TotalAmount": "94339.62",
"CommodityAmount": [{
"word": "94339.62",
"row": "1"
}],
"InvoiceDate": "2016年06月02日",
"CommodityTax": [{
"word": "5660.38",
"row": "1"
}],
"PurchaserName": "百度时代网络技术(北京)有限公司",
"CommodityNum": [{
"word": "",
"row": "1"
}],
"PurchaserBank": "招商银行北京分行大屯路支行8661820285100030",
"Remarks": "告传",
"Password": "074/45781873408>/6>8>65*887676033/51+<5415>9/32--852>1+29<65>641-5>66<500>87/*-34<943359034>716905113*4242>",
"SellerAddress": ":嘉定区胜辛南路500号15幢1161室55033753",
"PurchaserAddress": "北京市海淀区东北旺西路8号中关村软件园17号楼二属A2010-59108001",
"InvoiceCode": "3100153130",
"CommodityUnit": [{
"word": "",
"row": "1"
}],
"Payee": ":徐蓉",
"PurchaserRegisterNum": "110108787751579",
"CommodityPrice": [{
"word": "",
"row": "1"
}],
"NoteDrawer": "沈园园",
"AmountInWords": "壹拾万圆整",
"AmountInFiguers": "100000.00",
"TotalTax": "5660.38",
"InvoiceType": "专用发票",
"SellerRegisterNum": "913101140659591751",
"CommodityName": [{
"word": "信息服务费",
"row": "1"
}],
"CommodityType": [{
"word": "",
"row": "1"
}]
}
}
错误码 | 说明 |
---|---|
1 | 服务器内部错误,请再次请求, 如果持续出现此类错误,请在控制台提交工单联系技术支持团队 |
2 | 服务暂不可用,请再次请求, 如果持续出现此类错误,请在控制台提交工单联系技术支持团队 |
3 | 调用的API不存在,请检查后重新尝试 |
4 | 集群超限额 |
6 | 无权限访问该用户数据 |
14 | IAM鉴权失败,建议用户参照文档自查生成sign的方式是否正确,或换用控制台中ak sk的方式调用 |
17 | 每天请求量超限额 |
18 | QPS超限额 |
19 | 请求总量超限额 |
100 | 无效的access_token参数,请检查后重新尝试 |
110 | access_token无效 |
111 | access token过期 |
282000 | 服务器内部错误,如果您使用的是高精度接口,报这个错误码的原因可能是您上传的图片中文字过多,识别超时导致的,建议您对图片进行切割后再识别,其他情况请再次请求, 如果持续出现此类错误,请在控制台提交工单联系技术支持团队 |
216100 | 请求中包含非法参数,请检查后重新尝试 |
216101 | 缺少必须的参数,请检查参数是否有遗漏 |
216102 | 请求了不支持的服务,请检查调用的url |
216103 | 请求中某些参数过长,请检查后重新尝试 |
216110 | appid不存在,请重新核对信息是否为后台应用列表中的appid |
216200 | 图片为空,请检查后重新尝试 |
216201 | 上传的图片格式错误,现阶段我们支持的图片格式为:PNG、JPG、JPEG、BMP,请进行转码或更换图片 |
216202 | 上传的图片大小错误,现阶段我们支持的图片大小为:base64编码后小于4M,分辨率不高于4096*4096,请重新上传图片 |
216630 | 识别错误,请再次请求,如果持续出现此类错误,请在控制台提交工单联系技术支持团队 |
216631 | 识别银行卡错误,出现此问题的原因一般为:您上传的图片非银行卡正面,上传了异形卡的图片或上传的银行卡正品图片不完整 |
216633 | 识别身份证错误,出现此问题的原因一般为:您上传了非身份证图片或您上传的身份证图片不完整 |
216634 | 检测错误,请再次请求,如果持续出现此类错误,请在控制台提交工单联系技术支持团队 |
272000 | 未能匹配模板,请检查参照字段的设置是否符合规范,并重新选取或增加更多的参照字段 |
272001 | 未能成功分类 |
282003 | 请求参数缺失 |
282004 | 您指定的模板暂未发布,请先保存发布该模板,再调用 |
282005 | 处理批量任务时发生部分或全部错误,请根据具体错误码排查 |
282006 | 批量任务处理数量超出限制,请将任务数量减少到10或10以下 |
282102 | 未检测到图片中识别目标,请确保图片中包含对应卡证票据 |
282103 | 图片目标识别错误,请确保图片中包含对应卡证票据,如果持续出现此类错误,请在控制台提交工单联系技术支持团队 |
282110 | URL参数不存在,请核对URL后再次提交 |
282111 | URL格式非法,请检查url格式是否符合相应接口的入参要求 |
282112 | url下载超时,请检查url对应的图床/图片无法下载或链路状况不好,您可以重新尝试一下,如果多次尝试后仍不行,建议更换图片地址 |
282113 | URL返回无效参数 |
282114 | URL长度超过1024字节或为0 |
282808 | request id xxxxx 不存在 |
282809 | 返回结果请求错误(不属于excel或json) |
282810 | 图像识别错误 |
<?php
/**
* Created by PhpStorm.
* User: FZS
* Time: 2019/3/13 17:10
*/
//----------------------------------
// 百度增值税发票识别调用类
//----------------------------------
class freeApi{
private $apiKey = false; //百度应用AppID
private $secretKey = false; //百度应用API Key
private $tokenUrl = 'https://aip.baidubce.com/oauth/2.0/token';
private $apiUrl = 'https://aip.baidubce.com/rest/2.0/ocr/v1/vat_invoice';
public function __construct($apikey,$secretkey){
$this->apiKey = $apikey;
$this->secretKey = $secretkey;
}
/**
* 获取token
* @return array
*/
public function getToken(){
$params = [
'grant_type' => 'client_credentials',
'client_id' => $this->apiKey,
'client_secret' => $this->secretKey,
];
$params = $this->handleUrl($params);
return $this->returnArray($this->freeApiCurl($this->tokenUrl,$params,1));
}
/**
* url拼接
* @return string
*/
private function handleUrl($params){
$o = "";
foreach ( $params as $k => $v )
{
$o.= "$k=" . urlencode( $v ). "&" ;
}
$params = substr($o,0,-1);
return $params;
}
/**
* 将JSON内容转为数据,并返回
* @param string $content [内容]
* @return array
*/
public function returnArray($content){
return json_decode($content,true);
}
/**
* 获取增值税发票证识别结果
* @return array
*/
public function getResult(){
$params = [
'image' => base64_encode(file_get_contents('图片路径')),
];
return $this->returnArray($this->freeApiCurl($this->apiUrl.'?access_token='.$this->getToken()['access_token'],$params,1));
}
/**
* 请求接口返回内容
* @param string $url [请求的URL地址]
* @param string $params [请求的参数]
* @param int $ipost [是否采用POST形式]
* @return string
*/
public function freeApiCurl($url,$params=false,$ispost=0){
$httpInfo = array();
$ch = curl_init();
curl_setopt( $ch, CURLOPT_HTTP_VERSION , CURL_HTTP_VERSION_1_1 );
curl_setopt( $ch, CURLOPT_HTTP_VERSION , CURL_HTTP_VERSION_1_1 );
curl_setopt( $ch, CURLOPT_USERAGENT , 'free-api' );
curl_setopt( $ch, CURLOPT_CONNECTTIMEOUT , 60 );
curl_setopt( $ch, CURLOPT_TIMEOUT , 60);
curl_setopt( $ch, CURLOPT_RETURNTRANSFER , true );
if( $ispost )
{
curl_setopt( $ch , CURLOPT_POST , true );
curl_setopt( $ch , CURLOPT_POSTFIELDS , $params );
curl_setopt( $ch , CURLOPT_URL , $url );
}
else
{
if($params){
curl_setopt( $ch , CURLOPT_URL , $url.'?'.$params );
}else{
curl_setopt( $ch , CURLOPT_URL , $url);
}
}
$response = curl_exec( $ch );
if ($response === FALSE) {
return false;
}
$httpCode = curl_getinfo( $ch , CURLINFO_HTTP_CODE );
$httpInfo = array_merge( $httpInfo , curl_getinfo( $ch ) );
curl_close( $ch );
return $response;
}
}