增值税发票OCR
<h3>接口描述</h3>
<ul>
<li>支持对增值税普票、专票、全电发票(新版全国统一电子发票,专票/普票)、卷票、区块链发票的所有字段进行结构化识别,包括发票基本信息、销售方及购买方信息、商品信息、价税信息等字段信息的识别准确率超过 99.9%</li>
<li>支持对增值税卷票的 21 个关键字段进行识别,包括发票类型、发票代码、发票号码、机打号码、机器编号、收款人、销售方名称、销售方纳税人识别号、开票日期、购买方名称、购买方纳税人识别号、项目、单价、数量、金额、税额、合计金额(小写)、合计金额(大写)、校验码、省、市 等字段信息的识别准确率可达95%。</li>
</ul>
<h3>请求地址</h3>
<p><code>https://api.jumdata.com/ocr/invoice-v2</code></p>
<h3>请求方式</h3>
<ul>
<li>POST</li>
</ul>
<h3>请求格式</h3>
<ul>
<li>x-www-form-urlencoded</li>
</ul>
<h3>请求参数</h3>
<table>
<thead>
<tr>
<th>名称</th>
<th>类型</th>
<th>必须</th>
<th><div style="width:420px">说明</div></th>
</tr>
</thead>
<tbody>
<tr>
<td>appId</td>
<td>String</td>
<td>是</td>
<td>服务商分配的唯一标识</td>
</tr>
<tr>
<td>timestamp</td>
<td>Long</td>
<td>是</td>
<td>当前时间的毫秒数</td>
</tr>
<tr>
<td>sign</td>
<td>String</td>
<td>是</td>
<td>签名,见签名算法说明</td>
</tr>
<tr>
<td>imageBase64</td>
<td>String</td>
<td>否</td>
<td>发票图片base64字符串</td>
</tr>
<tr>
<td>pdfBase64</td>
<td>String</td>
<td>否</td>
<td>发票pdf文件base64字符串</td>
</tr>
<tr>
<td>pdfFileNum</td>
<td>String</td>
<td>否</td>
<td>识别pdfBase64对应的文件页,默认1</td>
</tr>
<tr>
<td>ofdBase64</td>
<td>String</td>
<td>否</td>
<td>发票ofd文件base64字符串</td>
</tr>
<tr>
<td>ofdFileNum</td>
<td>String</td>
<td>否</td>
<td>识别ofd文件对应的文件页,默认1</td>
</tr>
<tr>
<td>url</td>
<td>String</td>
<td>否</td>
<td>发票图片、pdf文件、ofd文件的url</td>
</tr>
<tr>
<td>type</td>
<td>String</td>
<td>否</td>
<td>识别的发票类型,默认normal<br> normal - 可识别增值税普票、专票、电子发票 <br> roll - 可识别增值税卷票</td>
</tr>
</tbody>
</table>
<ul>
<li>imageBase64、pdfBase64、ofdBase64、url 必须提供一个,优先级 imageBase64 > pdfBase64 > ofdBase64 > url</li>
<li>发票图片、pdf或odf文件不超过4M,最短边至少15px,最长边最大4096px,</li>
<li>发票图片支持jpg/jpeg/png/bmp格式</li>
</ul>
<h3>签名算法说明</h3>
<pre><code>sign = sha256( appId  + appSecret + timestamp)</code></pre>
<p>用服务商分配的 appId、服务商分配的 appSecret,当前时间毫秒数 timestamp,按上述顺序拼接成字符串,再进行 sha256 哈希得到。如下:</p>
<pre><code class="language-java">String appId = &quot;xyzxy2121zxyz&quot;;
String timestamp = &quot;1555378976238&quot;;
String appSecret = &quot;efcefcef1121cefcefc1212121&quot;;
String str = appId  + appSecret + timestamp;
String sign = sha256(str);</code></pre>
<h3>返回样例</h3>
<pre><code class="language-json">{
  &quot;code&quot;: 200, // 详见code返回码说明
  &quot;msg&quot;: &quot;成功&quot;, // code 对应的描述
  &quot;charge&quot;: true, // 计费标志
  &quot;taskNo&quot;: &quot;30853523396532582768&quot;,  // 本次请求号
  &quot;data&quot;: {
    &quot;amountInWords&quot;: &quot;壹拾圆整&quot;,//价税合计(大写)
    &quot;invoiceTypeOrg&quot;: &quot;&quot;,//发票名称
    &quot;machineNum&quot;:&quot;&quot;,//机打号码。仅增值税卷票含有此参数
    &quot;agent&quot;: &quot;否&quot;,//是否代开
    &quot;city&quot;: &quot;&quot;,//市
    &quot;commodityNum&quot;: [//数量
      {
        &quot;row&quot;: &quot;&quot;,//行号
        &quot;word&quot;:&quot;&quot;//内容
      }
    ],
    &quot;sellerBank&quot;: &quot;&quot;,//销售方开户行及账号 
    &quot;sellerName&quot;: &quot;&quot;,//销售方名称 
    &quot;sellerAddress&quot;: &quot;&quot;,//销售方地址及电话 
    &quot;checker&quot;: &quot;&quot;,//复核
    &quot;purchaserAddress&quot;: &quot;&quot;,//购方地址及电话
    &quot;totalTax&quot;: &quot;***&quot;,//合计税额
    &quot;payee&quot;: &quot;&quot;,//收款人
    &quot;password&quot;: &quot;&quot;,//密码区
    &quot;province&quot;: &quot;浙江&quot;,//省
    &quot;noteDrawer&quot;: &quot;&quot;,//开票人
    &quot;invoiceType&quot;: &quot;电子普通发票&quot;,//发票种类。不同类型发票输出:普通发票、专用发票、电子普通发票、电子专用发票、通行费电子普票、区块链发票、通用机打电子发票、电子发票(专用发票)、电子发票(普通发票)
    &quot;amountInFiguers&quot;: &quot;10.00&quot;,//价税合计(小写)
    &quot;commodityPlateNum&quot;: [//车牌号。仅通行费增值税电子普通发票含有此参数
      {
        &quot;row&quot;: &quot;1&quot;,//行号
        &quot;word&quot;: &quot;***&quot;//内容
      }
    ],
    &quot;commodityTax&quot;: [//税额
      {
        &quot;row&quot;: &quot;1&quot;,//行号
        &quot;word&quot;: &quot;***&quot;//内容
      }
    ],
    &quot;purchaserBank&quot;: &quot;&quot;,//购方开户行及账号
    &quot;machineCode&quot;: &quot;&quot;,//机器编号。仅增值税卷票含有此参数
    &quot;invoiceNumConfirm&quot;: &quot;&quot;,//发票号码的辅助校验码
    &quot;commodityStartDate&quot;: [//通行日期起。仅通行费增值税电子普通发票含有此参数
      {
        &quot;row&quot;: &quot;&quot;,//行号
        &quot;word&quot;:&quot;&quot;//内容
      }
    ],
    &quot;sellerRegisterNum&quot;: &quot;&quot;,//销售方纳税人识别号
    &quot;commodityEndDate&quot;: [//通行日期止。仅通行费增值税电子普通发票含有此参数
      {
        &quot;row&quot;: &quot;&quot;,//行号
        &quot;word&quot;:&quot;&quot;//内容
      }
    ],
    &quot;sheetNum&quot;: &quot;&quot;,//联次信息。专票第一联到第三联分别输出:第一联:记账联、第二联:抵扣联、第三联:发票联;普通发票第一联到第二联分别输出:第一联:记账联、第二联:发票联
    &quot;invoiceDate&quot;: &quot;2021年11月12日&quot;,//开票日期
    &quot;commodityPrice&quot;: [//单价
      {
        &quot;row&quot;: &quot;&quot;,//行号
        &quot;word&quot;:&quot;&quot;//内容
      }
    ],
    &quot;invoiceCode&quot;: &quot;&quot;,//发票代码
    &quot;onlinePay&quot;: &quot;&quot;,//电子支付标识。仅区块链发票含有此参数
    &quot;commodityType&quot;: [//规格型号
      {
        &quot;row&quot;: &quot;&quot;,//行号
        &quot;word&quot;:&quot;&quot;//内容
      }
    ],
    &quot;invoiceNum&quot;: &quot;&quot;,//发票号码
    &quot;purchaserName&quot;: &quot;&quot;,//购方名称
    &quot;checkCode&quot;: &quot;&quot;,//校验码。增值税专票无此参数
    &quot;totalAmount&quot;: &quot;10.00&quot;,//合计金额
    &quot;commodityVehicleType&quot;: [//类型。仅通行费增值税电子普通发票含有此参数
      {
        &quot;row&quot;: &quot;1&quot;,//行号
        &quot;word&quot;: &quot;***&quot;//内容
      }
    ],
    &quot;commodityAmount&quot;: [//金额
      {
        &quot;row&quot;: &quot;1&quot;,//行号
        &quot;word&quot;: &quot;10.00&quot;//内容
      }
    ],
    &quot;purchaserRegisterNum&quot;: &quot;&quot;,//购方纳税人识别号
    &quot;commodityTaxRate&quot;: [//税率
      {
        &quot;row&quot;: &quot;1&quot;,//行号
        &quot;word&quot;: &quot;0%&quot;//内容
      }
    ],
    &quot;commodityUnit&quot;: [//单位
      {
        &quot;row&quot;: &quot;&quot;,//行号
        &quot;word&quot;:&quot;&quot;//内容
      }
    ],
    &quot;invoiceCodeConfirm&quot;: &quot;033002100611&quot;,//发票代码的辅助校验码
    &quot;remarks&quot;: &quot;&quot;,//备注
    &quot;commodityName&quot;: [//货物名称
      {
        &quot;row&quot;: &quot;1&quot;,//行号
        &quot;word&quot;: &quot;*餐饮服务*货物&quot;//内容
      }
    ]
  }
}</code></pre>
<h3>错误返回样例</h3>
<pre><code class="language-json">{
  &quot;msg&quot;: &quot;图片格式不正确&quot;, 
  &quot;code&quot;: 400
}</code></pre>
<h3>返回字段说明</h3>
<table>
<thead>
<tr>
<th>字段名</th>
<th><div style="width:420px">说明</div></th>
</tr>
</thead>
<tbody>
<tr>
<td>code</td>
<td>返回码,详见code返回码说明</td>
</tr>
<tr>
<td>msg</td>
<td>code对应的描述</td>
</tr>
<tr>
<td>charge</td>
<td>是否计费</td>
</tr>
<tr>
<td>taskNo</td>
<td>本次请求号</td>
</tr>
<tr>
<td>data</td>
<td>返回具体结果,object类型,详见成功返回体</td>
</tr>
</tbody>
</table>
<h4>code返回码说明</h4>
<table>
<thead>
<tr>
<th>code</th>
<th><div style="width:420px">说明</div></th>
</tr>
</thead>
<tbody>
<tr>
<td>200</td>
<td>成功 (计费)</td>
</tr>
<tr>
<td>400</td>
<td>参数错误</td>
</tr>
<tr>
<td>404</td>
<td>接口地址不正确</td>
</tr>
<tr>
<td>500</td>
<td>系统维护,请稍候再试</td>
</tr>
<tr>
<td>601</td>
<td>接口未开通</td>
</tr>
<tr>
<td>602</td>
<td>账号停用</td>
</tr>
<tr>
<td>603</td>
<td>余额不足请充值</td>
</tr>
<tr>
<td>604</td>
<td>接口停用</td>
</tr>
<tr>
<td>606</td>
<td>调用超限,请稍候再试</td>
</tr>
<tr>
<td>607</td>
<td>ip不在白名单</td>
</tr>
<tr>
<td>609</td>
<td>请求过于频繁,请稍候再试</td>
</tr>
<tr>
<td>610</td>
<td>请求超时</td>
</tr>
<tr>
<td>999</td>
<td>其他,以实际返回为准</td>
</tr>
</tbody>
</table>