发票相关

<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 |