发票相关
<div style='display: none'>
# 提交开票请求
- 渠道可对门店id或渠道的商户编码提交开票请求。
- 若开票申请为电票开票申请,则可支持自动开具。自动开具仅会发起一次开票尝试,即若自动开具失败(如没有电票库存、税盘断线、单据校验失败等),开票系统不会自动重试,以免造成不必要的问题。故在自动开具失败后,需商户进入开票系统手动对开具失败的请求进行重试,或手动提交新的开票请求。
### 请求路径
`/openapi/invoice/submit`
### 请求方法:
`POST`
### 接口参数:
|字段名|类型|必填|说明|
| ------------ | ------------ | ------------ |------------ |
|companyId|Long|是|平台公司ID|
|storeId|Long|否|平台门店ID|
|storeNo|String|否|渠道的商户编码|
|taxDiskId|Long|是|平台税盘ID|
|invoiceType|String|是|发票类型(c:普票,s:专票,ce:电票)|
|invoiceClass|Integer|是|发票类别(1:电子票,,2:纸质)|
|remark|String|否|备注|
|buyer.taxNo|String|是|购买方税号|
|buyer.buyerTitle|String|是|购买方抬头名称|
|buyer.bankName|String|是|购买方开户行|
|buyer.bankNo|String|是|购买方银行账号|
|buyer.buyAddress|String|是|购买方地址|
|buyer.buyPhone|String|是|购买方电话|
|buyer.receivePhone|String|否|联系人手机号|
|buyer.receiveMail|String|否|联系人邮箱地址|
|invoiceRule.payee|String|是|收款人|
|invoiceRule.reviewer|String|是|复核人|
|invoiceRule.ticketHolder|String|是|开票人|
|invoiceRule.taxRateSplit|Integer|是|按税率拆分(1:分割,2:不分割)|
|invoiceRule.completeSplit|Integer|是|按整数拆分(1:取整,2:不取整)|
|invoiceRule.printContentFlag|Integer|是|是否打印单价数量(1:是,2:否)|
|invoiceRule.discountMode|Integer|是|折扣(0:价内,1:价外)|
|itemData[#].itemName|String|是|商品名称|
|itemData[#].itemNum|Double|是|商品数量|
|itemData[#].itemOriginalPrice|Double|是|商品单价|
|itemData[#].taxRate|Double|是|商品税率|
|itemData[#].taxPrice|Double|是|商品税额|
|itemData[#].amountWithTax|Double|是|商品含税总价|
|itemData[#].amountWithoutTax|Double|是|商品不含税总价|
|itemData[#].discountWithoutTax|Double|是|商品折扣后不含税总价|
|itemData[#].discountWithTax|Double|是|商品折扣后含税总价|
|itemData[#].goodsTaxNo|Double|是|商品税收分类编码|
### 请求参数示例:
```json
{
"companyId":"132000001",
"storeId":"8231230",
"storeNo":"3101231231",
"taxDiskId":"123023",
"InvoiceType":"c",
"InvoiceClass":"2",
"remark":"",
"buyer":{
"taxNo":"440004412312312312",
"buyerTitle":"好限公司",
"buyAddress":"上海世纪大道2号",
"buyPhone":"1394023023",
"bankName":"中国银行上海浦东陆家嘴支行",
"bankNo":"00231000",
"buyMail":"test@auraxy.com",
"receivePhone":"1394023023",
"receiveMail":"test@auraxy.com"
},
"invoiceRule":{
"payee":"收款人",
"reviewer":"复核人",
"ticketHolder":"开票人",
"taxRateSplit":"2",
"completeSplit":"2",
"printContentFlag":"1",
"discountMode":"0"
},
"itemData":[
{
"itemName":"住宿费",
"itemNum":"1",
"itemOriginalPrice":"0.94",
"taxRate":"6.0",
"taxPrice":"0.06",
"amountWithTax":"1.0",
"amountWithoutTax":"0.94",
"discountWithoutTax":"0.94",
"discountWithTax":"1.0",
"goodsTaxNo":"3070402000000000000"
}
]
}
```
### 响应结果:
| 字段名 | 类型 | 说明 |
| ------------ | ------------ | ------------ |
|code|Integer|处理结果|
|message|String|结果描述|
|data|Object|提交结果响应|
### 结果示例:
失败:
```json
{
"code": 4002,
"message": "门店不存在"
}
```
成功:
```json
{
"code": 0,
"data": "提交开票申请成功"
}
```
</div>
# 查询开票结果
### 简要描述
- 根据applicationNo查询请求处理结果
### 请求URL
- `/openapi/invoice/result`
### 请求方式
- POST
### 请求参数说明
| 参数名 | 类型 | 必填 | 说明 |
| ------------ | ------- | ---- | ------------------------- |
| applicationNo | String | 是 | 申请单号|
### 请求示例
- 示例1
```json
{
"applicationNo":"test123456"
}
```
### 返回参数说明
|参数名|类型|说明|
|:----- |:-----|----- |
|status |boolean |true表示提交成功;false表示失败 |
|message |String |提交失败的描述信息|
|responseCode|int|响应编码,作为参考值。可以仅根据status判断提交是否成功|
|entry|Object||
|entry.status|String|处理状态: UNPROCESSED(未处理) CANCELED(已取消) REJECTED(已驳回) PROCESSING(开票中) ALLSUCCESS(全部成功) PARTIALSUCCESS(部分成功) FAILED(失败)|
|entry.comment|String|驳回原因, 状态为REJECTED时才有值|
|entry.failReasons|List<String>|失败原因,状态为FAILED或PARTIALSUCCESS时才有值|
|entry.datas|List|发票详情,状态为ALLSUCCESS或PARTIALSUCCESS时才有值|
|entry.datas[#].pid | String | 发票唯一id ||
|entry.datas[#].settlementNo | Sting|单据号 | |
|entry.datas[#].invoiceCode|String|发票代码(字符12位)||
|entry.datas[#].invoiceNo|String|发票号码(字符8位)||
|entry.datas[#].paperDrewDate|String|开票日期||
|entry.datas[#].invoiceType|String|发票类型,s纸质专票,c纸质普票,ce电子普票|
|entry.datas[#].sellerTaxNo|String|销方税号||
|entry.datas[#].sellerName|String|销方名称||
|entry.datas[#].sellerAddress|String|销方地址||
|entry.datas[#].sellerTel|String|销方电话||
|entry.datas[#].sellerBankName|String|销方银行名称||
|entry.datas[#].sellerBankAccount|String|销方银行账号||
|entry.datas[#].purchaserTaxNo|String|购方税号||
|entry.datas[#].purchaserName|String|购方名称||
|entry.datas[#].purchaserAddress|String|购方地址||
|entry.datas[#].purchaserTel|String|购方电话||
|entry.datas[#].purchaserBankName|String|购方银行名称||
|entry.datas[#].purchaserBankAccount|String|购方银行账号||
|entry.datas[#].amountWithoutTax|String|不含税金额||
|entry.datas[#].taxAmount|String|税额||
|entry.datas[#].amountWithTax|String|含税金额|
|entry.datas[#].cipherText|String|发票密文||
|entry.datas[#].cipherTextTwoCode|String|||
|entry.datas[#].pdfPath|String|电票pdf路径||
|entry.datas[#].status|String|单张发票状态,0作废,1正常,2红冲,3红冲出来的票|
|entry.datas[#].proccessRemark|String|发票开具标志||
|entry.datas[#].cashierName|String|付款人||
|entry.datas[#].checkerName|String|审核人||
|entry.datas[#].invoicerName|String|开票人||
|entry.datas[#].remark|String|备注||
|entry.datas[#].originalInvoiceNo|String|原始发票号码,只有是红票时,才有值|
|entry.datas[#].originalInvoiceCode|String|原始发票代码,只有是红票时,才有值|
|entry.datas[#].redNotificationNo|String|红字信息|只有是红票时,才有值|
|entry.datas[#].displayPriceQuality|String|是否显示价 格和数量,0不显示 1或空显示|
|entry.datas[#].saleListFileFlag|String|是否有销货清单标志,0 表示没有销货清单,1 表示有销货清单|
|entry.datas[#].details[#].pid|String|发票明细主键||
|entry.datas[#].details[#].cargoCode|String|货物或应税劳务代码||
|entry.datas[#].details[#].cargoName|String|货物或应税劳务名称||
|entry.datas[#].details[#].itemSpec|String|规格型号||
|entry.datas[#].details[#].quantityUnit|String|数量单位||
|entry.datas[#].details[#].quantity|String|数量||
|entry.datas[#].details[#].taxRate|taxRate|税率||
|entry.datas[#].details[#].unitPrice|String|单价||
|entry.datas[#].details[#].amountWithoutTax|String|不含税总额||
|entry.datas[#].details[#].taxAmount|String|税额||
|entry.datas[#].details[#].amountWithTax|String|含税总额||
|entry.datas[#].details[#].goodsNoVer|String|税编版本||
|entry.datas[#].details[#].goodsTaxNo|String|税收分类编码||
|entry.datas[#].details[#].taxPre|String|是否享受税收优惠政策,0不享受 1享受|
|entry.datas[#].details[#].taxPreCon|String|享受税收优惠政策内容||
|entry.datas[#].details[#].zeroTax|String|零税率标志,非 0 税率: 空<br>0 税率: 0- 出口退税 1-免税 2-不征税 3- 普通0税率|
|entry.datas[#].details[#].taxDedunction|String|扣除额,免税的金额|
### 返回示例
- 成功示例
```json
{
"code": 0,
"entry": {
"status": "ALLSUCCESS",
"datas": [
{
"pid": "iD39RIQudVDQdsXVPQH1",
"settlementNo": "PYT9411094582692006882",
"invoiceNo": "81606530",
"invoiceCode": "9030816060",
"paperDrewDate": "20190308",
"invoiceType": "c",
"sellerTaxNo": "TEST7982174928374",
"sellerName": "测试公司信息1",
"sellerAddress": "23",
"sellerTel": "123",
"sellerBankName": "啦啦啦啦啦啦啦",
"sellerBankAccount": "888888888",
"purchaserTaxNo": "131245812547125",
"purchaserName": "xp",
"purchaserAddress": "上海市浦东区",
"purchaserTel": "021-10103030",
"purchaserBankName": "ICBC",
"purchaserBankAccount": "12312415125",
"amountWithoutTax": "23.4",
"taxAmount": "1.4",
"amountWithTax": "24.8",
"cipherText": "<645+-+067++2954>795>80035/>1/96+>17<3>>00*/385><8>6*89+72913-689>>61111-329+->90<65-/8896+989+",
"cipherTextTwoCode": "",
"pdfPath": "",
"status": "1",
"processFlag": "1",
"processRemark": "开票成功",
"cashierName": "xp1",
"checkerName": "xp3",
"checkCode": "79809457063786317219",
"invoicerName": "xp",
"remark": "",
"originInvoiceNo": "",
"originInvoiceCode": "",
"redNotificationNo": "",
"displayPriceQuality": "1",
"saleListFileFlag": "0",
"sellerBankInfo": "啦啦啦啦啦啦啦 888888888",
"purchaserBankInfo": "ICBC 12312415125",
"purchaserAddrTel": "上海市浦东区 021-10103030",
"systemOrig": "",
"details": [
{
"pid": "1432880857",
"cargoCode": "",
"cargoName": "*住宿服务*住宿费",
"itemSpec": "",
"quantityUnit": "",
"quantity": "2.0",
"taxRate": "6.0",
"unitPrice": "11.7",
"amountWithoutTax": "23.4",
"taxAmount": "1.4",
"amountWithTax": "24.8",
"discountWithoutTax": "0.0",
"discountTax": "0.0",
"discountWithTax": "0.0",
"discountRate": "0.0",
"goodsNoVer": "30.0",
"goodsTaxNo": "3070402000000000000",
"taxPre": "0",
"taxPreCon": "",
"zeroTax": "",
"taxDedunction": "0.0",
"orderNo": "PYT9411094582692006882_1",
"orderDetailNo": "PYT9411094582692006882_1"
}
]
}
]
}
}
```
- 失败示例
```json
{
"code": -1,
"message": "申请单号不存在"
}
```
<div style='display: none'>
# 发票红冲
`/openapi/invoice/redRush`
请求方法:
`POST`
接口参数:
|字段名|类型|是否必填|说明|
| ------------ | ------------ | ------------ |------------ |
|invoiceCode|String| 是|发票代码|
|invoiceNo|String| 是|发票号码|
|redNotificationNo |String(16位)| 否|红字信息表编码(专票必填)|
|memo|String| 否|红冲理由|
请求参数示例:
```json
{
"invoiceCode":"1010231",
"invoiceNo":"2130233"
}
```
响应结果:
| 字段名 | 类型 | 说明 |
| ------------ | ------------ | ------------ |
| code | Integer | 处理结果 |
| message | String | 结果描述 |
| data | String | 处理结果 |
### 响应结果示例:
```json
失败:
{
"code": -1,
"message": "发票不存在"
}
```
成功:
```json
{
"code": 0,
"data": "红冲成功"
}
```
</div>
# 根据订单号查询开票详情
请求路径:
`/openapi/invoice/getApply`
请求方法:
` POST`
接口参数:
|字段名|类型|是否必填|说明|
| ------------ | ------------ | ------------ |------------ |
|parnterOrderNos|List<String>| 否|渠道订单号|
|erpOrderNos|List<String>| 否|ERP订单号|
请求参数示例:
```json
{
"parnterOrderNos":[13238]
}
```
响应结果:
| 字段名 | 类型 | 说明 |
| ------------ | ------------ | ------------ |
| code | Integer | 处理结果 |
| message | String | 结果描述 |
| data | List\<Object\> | 开票信息(InvoiceApplyResultForThirdParty)|
InvoiceApplyResultForThirdParty:
| 字段名 | 类型 | 说明 |
| ------------ | ------------ | ------------ |
| status | String |处理状态: UNPROCESSED(未处理) CANCELED(已取消) REJECTED(已驳回) PROCESSING(开票中) ALLSUCCESS(全部成功) PARTIALSUCCESS(部分成功) FAILED(失败) |
| parnterOrderNo | String | 渠道订单号 |
| erpOrderNo | String | erp订单号 |
| failReasons | List\<String\> | 失败原因 |
| datas | List\<Object\> | 发票详情 |
|datas[#].pid | String | 发票唯一id ||
|datas[#].settlementNo | Sting|单据号 | |
|datas[#].invoiceCode|String|发票代码(字符12位)||
|datas[#].invoiceNo|String|发票号码(字符8位)||
|datas[#].paperDrewDate|String|开票日期||
|datas[#].invoiceType|String|发票类型,s纸质专票,c纸质普票,ce电子普票|
|datas[#].sellerTaxNo|String|销方税号||
|datas[#].sellerName|String|销方名称||
|datas[#].sellerAddress|String|销方地址||
|datas[#].sellerTel|String|销方电话||
|datas[#].sellerBankName|String|销方银行名称||
|datas[#].sellerBankAccount|String|销方银行账号||
|datas[#].purchaserTaxNo|String|购方税号||
|datas[#].purchaserName|String|购方名称||
|datas[#].purchaserAddress|String|购方地址||
|datas[#].purchaserTel|String|购方电话||
|datas[#].purchaserBankName|String|购方银行名称||
|datas[#].purchaserBankAccount|String|购方银行账号||
|datas[#].amountWithoutTax|String|不含税金额||
|datas[#].taxAmount|String|税额||
|datas[#].amountWithTax|String|含税金额|
|datas[#].cipherText|String|发票密文||
|datas[#].cipherTextTwoCode|String|||
|datas[#].pdfPath|String|电票pdf路径||
|datas[#].status|String|单张发票状态,0作废,1正常,2红冲,3红冲出来的票|
|datas[#].proccessRemark|String|发票开具标志||
|datas[#].cashierName|String|付款人||
|datas[#].checkerName|String|审核人||
|datas[#].invoicerName|String|开票人||
|datas[#].remark|String|备注||
|datas[#].originalInvoiceNo|String|原始发票号码,只有是红票时,才有值|
|datas[#].originalInvoiceCode|String|原始发票代码,只有是红票时,才有值|
|datas[#].redNotificationNo|String|红字信息|只有是红票时,才有值|
|datas[#].displayPriceQuality|String|是否显示价 格和数量,0不显示 1或空显示|
|datas[#].saleListFileFlag|String|是否有销货清单标志,0 表示没有销货清单,1 表示有销货清单|
|datas[#].details[#].pid|String|发票明细主键||
|datas[#].details[#].cargoCode|String|货物或应税劳务代码||
|datas[#].details[#].cargoName|String|货物或应税劳务名称||
|datas[#].details[#].itemSpec|String|规格型号||
|datas[#].details[#].quantityUnit|String|数量单位||
|datas[#].details[#].quantity|String|数量||
|datas[#].details[#].taxRate|taxRate|税率||
|datas[#].details[#].unitPrice|String|单价||
|datas[#].details[#].amountWithoutTax|String|不含税总额||
|datas[#].details[#].taxAmount|String|税额||
|datas[#].details[#].amountWithTax|String|含税总额||
|datas[#].details[#].goodsNoVer|String|税编版本||
|datas[#].details[#].goodsTaxNo|String|税收分类编码||
|datas[#].details[#].taxPre|String|是否享受税收优惠政策,0不享受 1享受|
|datas[#].details[#].taxPreCon|String|享受税收优惠政策内容||
|datas[#].details[#].zeroTax|String|零税率标志,非 0 税率: 空<br>0 税率: 0- 出口退税 1-免税 2-不征税 3- 普通0税率|
|datas[#].details[#].taxDedunction|String|扣除额,免税的金额|
响应结果示例:
```json
成功示例1: 全部成功时
{
"code": 0,
"data": [
{
"parnterOrderNo":"13238",
"status": "ALLSUCCESS",
"datas": [
{
"invoiceNo": "003051001",
"invoiceCode": "0000003",
"paperDrewDate": "2019-01-02 00:00:00",
"invoiceType": "ce",
"sellerTaxNo": "sellerTaxNo",
"sellerName": "sellerName",
"sellerAddress": "sellerAddress",
"sellerTel": "1000123",
"sellerBankName": "banname",
"sellerBankAccount": "620000123",
"purchaserTaxNo": "TAX1231231312",
"purchaserName": "光是1",
"purchaserAddress": "北京",
"purchaserTel": "18792713898",
"purchaserBankName": "招商",
"purchaserBankAccount": "61000",
"amountWithoutTax": "-123",
"taxAmount": "-100",
"amountWithTax": "-220",
"cipherText": "cipherText",
"cipherTextTwoCode": "cipherTextTwoCode",
"status": "1",
"cashierName": "cashierName",
"checkerName": "checkName",
"checkCode": "checkCode",
"invoicerName": "invoiceName",
"remark": "remark",
"originInvoiceNo": "00015",
"originInvoiceCode": "0005",
"redNotificationNo": "red",
"saleListFileFlag": "0",
"details": [],
"source": 0
}
]
}
]
}
成功示例2: 没查到结果时
{
"code": 0,
"data": [
{
"parnterOrderNo":"13238"
}
]
}
```
# 发票红冲申请
请求路径:
`/openapi/invoice/redRush`
请求方法:
`POST`
接口参数:
| 字段名 | 类型 | 必填 | 说明 |
| ------------ | ------------ | -----| ------------ |
| invoiceCode | String | 是 | 发票代码 |
| invoiceNo | String | 是 | 发票号码 |
| redNotificationNo | String | 否 | 红字信息表编码(专票必填) |
| memo | String | 否 | 红冲理由 |
请求参数示例:
```json
{
"invoiceCode":"123",
"invoiceNo":"aaa"
}
```
响应结果:
| 字段名 | 类型 | 说明 |
| ------------ | ------------ | ------------ |
| code | Integer | 处理结果 |
| message | String | 结果描述 |
响应结果示例:
```json
失败:
{
"code": -1,
"message": "无权限申请此发票"
}
成功:
{
"code": 0,
"message": ""
}
```
# 发票红冲/作废申请结果推送
消息字段:
| 字段名 | 类型 | 必填 | 说明 |
| ------------ | ------------ | -----| ------------ |
| invoiceCode | String | 是 | 申请的发票代码 |
| invoiceNo | String | 是 | 申请的发票号码 |
| status | Int | 是 | 0.待处理 1.处理中 2.成功 3.驳回 -1.失败 |
| message | String | 否 | 附加消息 |
| type | Int | 否 | 1.作废 2.红冲 (待处理/驳回还不知道所以为空)|
| 红票票面信息DTO |