第三章 模块接口(2) - 开票流程

## 综合服务云平台 - API功能模块接口明细 ## 版本更新记录 |修订日期|修订内容|修订人| |-|-|-| |2020.07.15|云平台 V1.0 发布|彭晓伟| ## 开票时序图 ![账管家__开票时序图.jpg](https://cos.easydoc.net/87516830/files/kghofb80.jpg) >d 接口调用细节流程: ◆ 参数RSA加密[接口签名,加解密说明](https://easydoc.xyz/doc/42964146/FECM0vAG/1V3nG1zs) ◆ 将加密结果以及公共参数拼接成新的字符串通过MD5加密生成签名 ◆ 将公共参数以及签名通过header传输,参数加密结果通过body传输,发起http请求 ◆ 返回结果解密[接口签名,加解密说明](https://easydoc.xyz/doc/42964146/FECM0vAG/1V3nG1zs) #### 接口响应参数都为如下固定json格式 |参数名称|参数含义|数据类型|是否必有|参数备注| |-|-|-|-|-| |resopnseType| 返回类型|int|是|无需关注此值| |errorCode|错误码 |String|是|详情参考[系统错误码](https://easydoc.xyz/doc/42964146/FECM0vAG/BBRyQ4qh)| |errorMessage| 错误信息|String|是|详情参考[系统错误码](https://easydoc.xyz/doc/42964146/FECM0vAG/BBRyQ4qh)| |status|状态码|int|是|详情参考[系统错误码](https://easydoc.xyz/doc/42964146/FECM0vAG/BBRyQ4qh)| |success|是否成功|boolean|是|true:成功 false:失败| |data|返回结果数据|String|否|只有当success为true才会有该值,该值为RSA加密值,需解密使用,解密规则请看[接口签名,加解密说明](https://easydoc.xyz/doc/42964146/FECM0vAG/1V3nG1zs)| ## 4. 开票接口 ## 4.1 申请开票 开发环境:https://pay-dev.lx-rhino.com 生产环境:https://api.lx-rhino.com #### 注意 >d 1.在调用开票申请接口前,需要调用 [3.6 个体户状态查询接口](https://easydoc.xyz/doc/90689852/YkCCKKo8/kf4eEg5c)查询 返回的taxStatus - 税务状态的状态变更为“已实名”,只有变更后,才能提交该个体户的开票申请;仅限新注册的个体户。 >2. 如果是老的个体户只需调用一次,保存在本地,后续可以不需要再去查询该个体户的税务状态信息。 #### 接口地址:/open/api/v1/ak/akApplyInvoice #### 请求方式:POST #### 请求参数说明: |参数名称|参数含义|数据类型|是否必填|参数备注| |-|-|-|-|-| |idCard|个体户身份证|String|是|| |mainstayId|个体户注册地|String|是|该参数值由[查询所拥有的主体发票行业接口](https://easydoc.xyz/doc/90689852/YkCCKKo8/XUyNWEBU) 获得| |bankNameAccount|个体户开户行及账户信息|String|否|例:中国工商银行杭州富春支行 330501164xxxxxxx| |invoiceAmount|开票金额|String|是|精确到分 例如:"10.01"代表 十元零一分| |invoiceCode|开票内容编码|String|是|该参数值由[查询所拥有的主体发票行业接口](https://easydoc.xyz/doc/90689852/YkCCKKo8/XUyNWEBU) 获得| |taxPointConf|税点|String|是|税点 0:代表税率为3% 1:代表税率为1% | |invoiceType|发票类型|String|是|0代表增值税普通发票 1代表增值税专用发票| |remarks|开票备注|String|否|| |purchaserInvoiceTitle|购买方发票抬头|String|是|例:xxxx有限公司| |purchaserTaxNumber|购买方税号|String|是|例:91330100FS234(纳税人识别号)| |purchaserAddressPhone|购买方地址、电话|String|是|例:浙江省杭州市滨江区网商路xx号 130xxxx3381| |purchaserBankAccount|购买方开户行及账号|String|是|例:中国工商银行杭州富春支行 330501164xxxxxxx| |addressee|收件人|String|是|例:张三| |phone|收件人电话|String|是|例:130xxxx3381| |area|收件人所在地区|String|是|例:浙江省杭州市滨江区| |detailAddress|收件人详细地址|String|是|网商路xx号 | |email|收件人邮箱地址|String|是|130xxxxx@163.com| #### 接口响应参数说明: |参数名称|参数含义| 数据类型|是否必有|参数备注| |-|-|-|-|-| |invoiceBillNo|开票订单号|String|是|| |paymentAmount|应付总金额|BigDecimal|是|含增值税、附加税、个税、服务费 精确到分 例如:"10.01"代表 十元零一分| |personIncomeTaxAmount|个税|BigDecimal|是|精确到分 例如:"10.01"代表 十元零一分| |additionalTaxAmount|附加税|BigDecimal|是|精确到分 例如:"10.01"代表 十元零一分| |serviceAmount|服务费|BigDecimal|是|精确到分 例如:"10.01"代表 十元零一分| |valueAddedTaxAmount|增值税|BigDecimal|是|精确到分 例如:"10.01"代表 十元零一分| |totalIncomeTaxAmount|个体户已缴纳个税|BigDecimal|是|精确到分 例如:"10.01"代表 十元零一分| |totalTaxableAmount|应纳个税金额|BigDecimal|是|精确到分 例如:"10.01"代表 十元零一分| |totalInvoiceAmount|已开票总金额|BigDecimal|是|精确到分 例如:"10.01"代表 十元零一分| |status|开票状态|Integer|是|[2.开票状态码对照表](https://easydoc.xyz/doc/90689852/YkCCKKo8/Y0HFC5LJ)| |failReason|失败原因|String|是|该参数内容可能为空,成功的时候失败原因为空字符串| ### 字段解释: (1)个体工商户已缴纳个税:指的是用户的个税选择的是累进制,记录用户之前已缴纳的个税金额。 (2)应纳个税金额:指的是本次开票金额里的应缴纳的个税金额。 (3)已开票总金额:指的是记录个体户之前已开发票的总金额,由于个体工商户开票年度总金额的限制的原因;开票年度计算方式,个体户连续12月开票金额不得超过495W,例如:在2021年2月注册个体户,2月份没有开票,3月份开票10W,从2021年3月份往回倒推12个月的开票金额不得超过495W,4月份依次类推。 ## 4.2 上传证据链接口 >d 注意:证据链 链接字段(urls)英文逗号分割,最多三个,如果文件和链接同时传,优先使用文件,两种方式(传证据链文件、传证据链 链接)至少传一种 开发环境:https://pay-dev.lx-rhino.com 生产环境:https://api.lx-rhino.com #### 接口地址:/open/api/v1/ak/evidenceFileUpload #### 请求方式:POST form-data方式 #### 请求参数说明: |参数名称|数据类型|参数含义|是否必填|参数备注| |-|-|-|-|-| |files|MultipartFile数组|上传的文件|否|支持批量上传| |data|String|该参数为发票订单号,上传文件类型json加密后的值|是|说明示例如下 | >d data参数示例说明如下 ```java String paramsJson = "{'invoiceBillNo':'订单号','type':'1','urls':'https://xxxx/xxxx.pdf,https://xxxx/xxxx.png'}" /*invoiceBillNo 为订单号*/ /*type为文件类型 1:业务合同文件 2:银行流水文件 3:自定义模板*/ /*urls上传证据文件链接,英文逗号分割*/ /*该处进行rsa加密*/ String data= RSAHelper.encryptByPublicKey(paramsJson, publicKey); ``` #### 响应参数解密后data字段说明: |参数名称| 数据类型|参数含义| 是否必有| 参数备注| |-|-|-|-|-| |invoiceBillNo|String|发票单号|是|| |status|Integer|发票状态|是|| |businessContractFinish|boolean|业务合同是否上传完成|是|| |bankStatementFinish|boolean|银行流水文件是否上传完成|是|| |mark|String|备注说明|是|| java接口代码示例: ```java @PostMapping(value = "/batchUpload") @ResponseBody @NoPermission public String upload(MultipartFile[] files) { String appKey = "贵司appke"; String version = "1.0"; String secretkey = "贵司secretkey "; String publicKey = "贵司公钥"; /* 记得换baseUrl*/ String url = "http://127.0.0.1:8081/open/api/v1/ak/evidenceFileUpload"; try { /** * invoiceBillNo 发票订单号 * type 文件类别 1:业务合同文件 2:银行流水文件 3:自定义模板 */ String paramJson = "{\"invoiceBillNo\":\"需要上传证据链的订单号\",\"type\":1,\"urls\":\"https://xxxx/xxxx.pdf,https://xxxx/xxxx.png\"}"; String data = ""; try { /*参数加密*/ data = RSAHelper.encryptByPublicKey(paramJson, publicKey); } catch (Exception e) { e.printStackTrace(); } String timestamp = String.valueOf(System.currentTimeMillis()); /*签名*/ String localString = data +"&Timestamp=" + timestamp + "&AppKey=" + appKey + "&Version=" + version + "&SecretKey" + secretkey; String sigin = Md5Util.getMd5(localString); MultipartBody.Builder builder = new MultipartBody.Builder().setType(MultipartBody.FORM); for (int i=0;i< files.length;i++) { byte[] bytes = files[i].getBytes(); okhttp3.RequestBody requestBody = okhttp3.RequestBody.create(MediaType.parse("application/octet-stream"), bytes); builder.addFormDataPart("files",files[i].getName(),requestBody); } /*切记将 data 填充*/ builder.addFormDataPart("data",data); Request request = new Request.Builder() .post(builder.build()) .addHeader("AppKey", appKey) .addHeader("Timestamp", timestamp) .addHeader("Version", "1.0") .addHeader("Sign", sigin) .url(url) .build(); Call call = HttpUtil.getOkHttpClient().newCall(request); try { Response response = call.execute(); String res = response.body().string(); log.info("res====" +res); return res; } catch (IOException e) { log.error("HttpUtil.post网络请求失败:{}", e.getMessage()); return "网络请求失败"; } catch (Exception e) { e.printStackTrace(); } } catch (IOException e) { log.warn("fail to read file", e); } return null; } ``` >d postman 直接请求示例: ![1.png](https://cos.easydoc.net/44383407/files/kco5rwrk.png)![2.png](https://cos.easydoc.net/44383407/files/kco5rxco.png) ## 4.3 开票费用支付 开发环境:https://pay-dev.lx-rhino.com 生产环境:https://api.lx-rhino.com #### 接口地址:/open/api/v1/ak/akInvoicePay #### 请求方式:POST #### 请求参数说明: |参数名称|参数含义|数据类型|是否必填|参数备注| |-|-|-|-|-| |invoiceBillNo|开票订单号|String|是|| #### 接口响应参数说明: |参数名称|参数含义| 数据类型|是否必有|参数备注| |-|-|-|-|-| |invoiceBillNo|开票订单号|String|是|| |status|开票状态|Integer|是|[开票状态码对照表](https://easydoc.xyz/doc/90689852/YkCCKKo8/Y0HFC5LJ)| |failReason|失败原因|String|是|该参数内容可能为空,成功的时候失败原因为空字符串| ## 4.4 开票结果查询 开发环境:https://pay-dev.lx-rhino.com 生产环境:https://api.lx-rhino.com #### 接口地址:/open/api/v1/ak/akInvoiceResultQuery #### 请求方式:POST #### 请求参数说明: |参数名称|参数含义|数据类型|是否必填|参数备注| |-|-|-|-|-| |invoiceBillNo|开票订单号|String|是|| #### 响应参数说明: |参数名称| 参数含义| 数据类型| 是否必有| 参数备注| |-|-|-|-|-| |invoiceBillNo|开票订单号|String|是|| |invoiceStatus|开票状态|Integer|是|[开票状态码对照表](https://easydoc.xyz/doc/90689852/YkCCKKo8/Y0HFC5LJ)| |invoiceMainstayId|注册地|Integer|是|| |invoiceType|开票类型|Integer|是|0代表增值税普通发票 1代表增值税专用发票| |invoiceAmount|开票金额|BigDecimal|是|精确到分 例如:"10.01"代表 十元零一分| |invoiceContent|开票内容|String|是|| |invoiceRemark|开票备注|String|否|| |purchaserInvoiceTitle|购买方发票抬头|String|是|例:xxxx有限公司| |purchaserTaxNumber|购买方纳税人识别号|String|是|例:91330100FS234(纳税人识别号)| |purchaserPhoneAddress|购买方个体户手机号、注册地|String|是|例:浙江省杭州市滨江区网商路xx号 130xxxx3381| |purchaserBankNameAccount|购买方开户行及账户信息|String|是|例:中国工商银行杭州富春支行 330501164xxxxxxx| |addressee|收件人|String|是|例:张三| |consignerMobile|收件人电话|String|是|例:130xxxx3381| |area|收件人所在地区|String|是|例:浙江省杭州市滨江区| |detailAddress|收件人详细地址|String|是|网商路xx号| |email|收件人邮箱地址|String|否|130xxxxx@163.com| |sellerInvoiceTitle|销售方发票抬头 |String|是|例:xxxx有限公司| |sellerTaxNumber|销售方纳税人识别号|String|是|例:91330100FS234(纳税人识别号)| |sellerPhoneAddress|销售方个体户手机号、注册地|String|是|例:浙江省杭州市滨江区网商路xx号 130xxxx3381| |sellerBankNameAccount|销售方开户行及账户信息|String|是|例:中国工商银行杭州富春支行 330501164xxxxxxx| |bankFlowProve|银行流水证明|String|是|例:xx.jpg,yy.pdf,zz.png | |businessContract|业务合同|String|是|例:xx.jpg,yy.pdf,zz.png | |otherProve|其他证明材料|String|是|例:xx.jpg,yy.pdf,zz.png| |expressCompany|快递公司|String|是|例:顺丰速运有线公司| |expressNo|快递单号|String|是|例:9899361402666| |refuseReason|开票失败原因|String|是|当开票失败时,此值不为空| |postStatus|邮寄状态|String|是|0:未邮寄 1.已邮寄| ## 4.5 余额查询 开发环境:https://pay-dev.lx-rhino.com 生产环境:https://api.lx-rhino.com #### 接口地址:/open/api/v1/ak/akBalanceQuery #### 请求方式:POST #### 请求参数说明: |参数名称|参数含义|数据类型|是否必填|参数备注| |-|-|-|-|-| #### 接口响应参数说明: |参数名称|参数含义| 数据类型|是否必有|参数备注| |-|-|-|-|-| |balance|账户余额|BigDecimal|是|精确到分 例如:"10.01"代表 十元零一分| ## 4.6 个体工商户开票状态回调接口 >d 该接口需要第三方自行编写提供接口到发放平台 接口编写示例如下。 #### 请求方式:POST ```java @PostMapping("employedCallBack") @ResponseBody public String signCallBack(HttpServletRequest request, @RequestBody String data){ String publicKey = "该公钥由发放平台提供发放到贵司邮箱"; //解密 String decode = RSAHelper.decryptByPublicKey(data, publicKey); /*贵公司处理业务逻辑*/ return "success"; } ``` 解密工具类在 [JAVA_DEMO](https://gitee.com/xinfudblog/lxapi_java_demo) 的 RSAHelper 类中 >d > 1.贵司写完后提供到接口url给发放平台即可。回调成功必须返回success,不然会重复回调,至多重试8次。 > 2.每次回调的间隔时间2N次方分钟,比如第一次回调间隔时间为2分钟,第二次就为4分钟,依次往后推,最多重试8次; postman中模拟接口是否正常接收数据如下操作 ![微信截图_20191111122018.png](https://cos.easydoc.net/44383407/files/k2tx5nl4.png) #### 传给回调接口参数data 解密结果json说明: 解密结果示例如下: ```json {"companyName":"bobo","companySocialCreditCode":"","idCard":"360111199504000000","license":"","mobile":"17366629999","name":"xxx","status":0}; ``` |参数名称| 参数含义|数据类型| 是否必有| 参数备注| |-|-|-|-|-| |name| 个体户姓名|String| 是|| |status| 个体户状态|Integer| 是|个体户注册详情请参阅[状态码对照表](https://easydoc.xyz/doc/90689852/YkCCKKo8/Y0HFC5LJ)| |idCard| 个体户身份证|String| 是|| |mainstayName| 注册地|String| 是|| |companyName| 公司名|String| 是|| |companySocialCreditCode| 纳税人识别号|String| 是|例:91330100FS234(纳税人识别号)| |mobile| 手机号|String| 是|| |license| 营业执照|String| 是|| |failReason| 拒绝原因|String| 是|| |url| 实名采集链接地址|String| 是|| ## 4.7 服务费开票申请 开发环境:https://pay-dev.lx-rhino.com 生产环境:https://api.lx-rhino.com #### 接口地址: /open/api/v1/ak/preCreateServiceInvoice #### 请求方式:POST #### 请求参数说明: |参数名称|参数含义|数据类型|是否必填|参数备注| |-|-|-|-|-| |mainstayId|主体id|int|是|| |invoiceClassification|开票类型|int|是|0.增值税普通发票 1.增值税专用发票| |remark|开票备注|int|否|备注| |addressee|收件人|String|是|快递收件人| |phone|联系电话|String|是|| |area|所在地区|String|是|例如:浙江省杭州市拱墅区| |detailAddress|详细地址|String|是|例如:祥符街道大悦城A座1601室| |email|电子邮箱|String|否|例如:130xxx@163.com| #### 接口响应参数data字段解密后的参数说明: |参数名称|参数含义| 数据类型|是否必有|参数备注| |-|-|-|-|-| |invoiceBillNo|开票订单号|String|是|| |invoiceAmount|开票金额|String|是|开票金额| |invoiceContent|开票内容|String|是|| |sellerInvoiceTitle|销售方发票抬头|String|是|| |sellerTaxNumber|销售方税号|String|是|| |sellerAddressPhone|销售方地址、电话|String|是|| |sellerBankAccount|销售方开户行及账号|String|是|| |purchaserInvoiceTitle|购买方发票抬头|String|是|| |purchaserTaxNumber|购买方税号|String|是|| |purchaserAddressPhone|购买方地址、电话|String|是|| |purchaserBankAccount|购买方开户行及账号|String|是|| ```json # 响应参数示例如下。只有当 success等于true的时候才会有data里面的值 { "resopnseType":0, "errorCode":"", "errorMessage":"", "status":0, "data":"FD5ximjnUYLHMCmkpmrFucBqxSatZHw/vL0g94Ir0kbj3ll1If7L1K9EubwPmPDhEB/ZIzTOCrTDEShz/6q3oxZBoZTBOI3CHH3AzSv+i2aLEJGVFwhKUjCkN0BPday4wpQLBbcYrOLUE5Dx/uAAcYMFEbhbosUoIDpd7ozq6tB4hPACuloszugdt2BEzjRk7F8fQdny1thwWE0aZSdV6/Zx0lwdrGYX4KrJ9pMZm9k2LqzdUIycS/ewke5fX/XJkzjF59MxLcU+qeWGrk2EtguGPCEwIbHWtZdvMrq/Slgeouziy/pyIjktGPQB51O2cj59humLjFdCUNf3JV/SVkINjyOQQs1KheksYEWpbkK7qSShbpXnotTyV6jC+n8HTx4ac6DQcsX84Hj2yDRjtJKzenZxyVx2Zv5f4qtUbZhAhX0h4VwKrMoPOSfPFI5Cv4Re2LweNnoHME21J3cWKdy/oxUUJet/GrL6vtNg66QYSuquOrzGOqAt2AYORn9fe3/jzkXfO6g5ogHtTCjZp3uVuzW0rUCgB8a42LnCjA/E2pB0ZihNcx4iquvg5beiqYgexvXk2EsoR6Lywhjp1QFVbalLQWr52EsEAy9Z56p5Em4O3BiaAhnp7/S1WMCpMH261eF1C/vuXtd1QDKr1onEShb55ft0PNxypS3J1GpximWZH47ijZ+KMHY9zLPL867Pd4+0SCq/l9/DYo4Hw25BwwkyJDUU1P6E9iAo7ymdNnrvTjSD108PLhSq0U6LihK2sh7kDc/AE0f5IO6J1tHHCqIEnJbAgr6NkqcbNXLdPIebqmIrOvw5XOdo62cV1feRCvMTGw/CxwX7/0eEByNp7ARwiM8FlEyZX+3tr9FNxsFPSeFsx3jsFepgEbHwoCIBnw3wUnrJc2Z+x5nQNK09zZ7qnK0MoDtQCEzUIRo=", "ext":null, "extMessage":null, "success":true } data解密后的内容: { "invoiceAmount":10058.35, "invoiceBillNo":"2020091817143583891968", "invoiceContent":"信息技术服务*技术服务费", "purchaserAddressPhone":"134567895585", "purchaserBankAccount":"啊啊啊啊啊", "purchaserInvoiceTitle":"", "purchaserTaxNumber":"010203050408", "sellerAddressPhone":"浙江省杭州市拱墅区隐秀路1号杭悦商业中心A座1604室 13777488831", "sellerBankAccount":"1202021209900411273 工商银行杭州武林支行营业室", "sellerInvoiceTitle":"浙江河马管家网络科技有限公司", "sellerTaxNumber":"91330105MA2H1GKA4T" } ``` ## 4.8 服务费开票确认接口 开发环境:https://pay-dev.lx-rhino.com 生产环境:https://api.lx-rhino.com #### 接口地址: /open/api/v1/ak/createServiceInvoice #### 请求方式:POST #### 请求参数说明: |参数名称|参数含义|数据类型|是否必填|参数备注| |-|-|-|-|-| |mainstayId|主体id|int|是|| |invoiceBillNo|开票订单号|String|是|预下单返回的开票订单号| #### 接口响应参数data字段解密后的参数说明: |参数名称|参数含义| 数据类型|是否必有|参数备注| |-|-|-|-|-| |invoiceBillNo|开票订单号|String|是|预下单订单号和开票订单一致| |invoiceAmount|开票金额|String|是|开票金额| |invoiceStatus|开票状态|int|是|0:待审核 1:待开票 2:已开票 3:已拒绝| ```json # 响应参数示例如下。只有当 success等于true的时候才会有data里面的值 {"resopnseType":0,"errorCode":"","errorMessage":"","status":0,"data":"lgKtpBOg8if9i9higcGTJbr36Q6EekvNYJOX2ObEd2zIr6hqC1f3LcyLRk18w3GvvHSxJJLMy2291SEvIGv4jJEsb6ttWH0NxcG1ogbeztuCkLdnKx4qeM2yPSJ6yXxpqwrLsYvIWWSAKlPCzF3AqULJGXWdhMB1op79lrN6CqYFOpsXKbjqD0A8epuoT4iqPqIKYI6CLo+dFlKkssnSyRrglUQrTQvtNz0y0j61Q2gFxADovRIoU6VlQqnGozFk","ext":null,"extMessage":null,"success":true} data解密后的内容: {"invoiceAmount":10008.00,"invoiceBillNo":"2020091817143583891968","invoiceStatus":0} ``` ## 4.9 服务费开票查询接口 开发环境:https://pay-dev.lx-rhino.com 生产环境:https://api.lx-rhino.com #### 接口地址: /open/api/v1/ak/queryServiceInvoicesStatus #### 请求方式:POST #### 请求参数说明: |参数名称|参数含义|数据类型|是否必填|参数备注| |-|-|-|-|-| |invoiceBillNo|开票订单号|String|是|预下单返回的开票订单号| #### 接口响应参数data字段解密后的参数说明: |参数名称|参数含义| 数据类型|是否必有|参数备注| |-|-|-|-|-| |invoiceBillNo|开票订单号|String|是|预下单订单号和开票订单一致| |invoiceAmount|开票金额|String|是|开票金额| |invoiceStatus|开票状态|int|是|0:待审核 1:待开票 2:已开票 3:已拒绝| |invoiceContent|开票内容|String|是|| |remark|开票备注|String|是|| |purchaserInvoiceTitle|购买方发票抬头|String|是|| |purchaserTaxNumber|购买方税号|String|是|| |purchaserAddressPhone|购买方地址、电话|String|是|| |purchaserBankAccount|购买方开户行及账号|String|是|| |addressee|收件人|String|是|| |phone|联系电话|String|是|| |area|所在地区(省市县\区)|String|是|| |detailAddress|详细地址|String|是|| |email|电子邮箱|String|是|| |expressCompany|快递公司|String|是|| |expressNo|快递单号|String|是|| |refuseReason|拒绝原因|String|否|当invoiceStatus = 3 时,拒绝原因肯定不为空| ```json # 响应参数示例如下。只有当 success等于true的时候才会有data里面的值 {"resopnseType":0,"errorCode":"","errorMessage":"","status":0,"data":"sftRYvZ1t99njOlyefTRQUCPNIHaG0+EnJIxF9qAwKHmf3PYnm6EX6WBma24Yjo6/7Q26RqekgLRzsrkBtfbUGBkZEKTlftWBTQQSUvZEM5zMcDFsV2MY9NeSmj9tujEUuUyIvbtgL5LVeePe0diuBh0Qg44EmvXhvud0P+afEkmCa1Fw1CWQT448A/hivpCX37bV8/i01Fkm1XGeOvmYwi1bOWOQhyyZtk8cmL5sCM/KMZQt6CslZS854M4RLJup4JWKtNHqmM4IAE3VdHubfCN7O4iSun2JgG8Gdn48vCYzhLsZBqFWM1v++HZIVEiTjPRzdxIUPPKgX59a4bcg5GefkL/FGrs0Qs1ojptK4XRk1WPVyI+6PO/7KLwAeLP4gmNHmRnTqBqeptt0/LGUJIJ3gaHMOKIR7wQbOSHWgCDsEpf+5V1gTt/SI2v6w4ud+/7HenDxGhHuqKNG5JK2IHYIhDsUp9MX4my/twqUuvXGoC7FT8LA25Vmj7DlIbpZ5YH3hINRRmQtGH7FfuHHq01l2pW6RuZWLdDeQPXtp/bF1Q9Aj8q22sxYwB+nsukGMa5huUtJsmu47OR2s5+2EzmPFZ432cybZVhRGEJfi4zINNG1YSI9rt4OwD6/0/g0FmQspUTok2mWEkNyJ3STeJ+I66QaRcMyE4qQtbclsuaIEiQXMiDRJO0Yv2VgeMjH8/GCR7a6jTwAppPORNUfCHuQwqVj5LAU9HKSF0kSvQjCukm2D+V6lQiizCdXh5VHlYyaFJTaLmiNc7D5l+PKuJTRVZ7FVeLcycPxN8+D+uS+CtD9YPZqeu40EuzQUqWzncxR/Ak9BEkloymSxB5BqoUAEaA600aV57sKYWbm+vfYdzNrUIsfhuy4vV13pwt8hyFkPBYILzVW1F7sBKXcR/myZ8r2FCX2z7t2xPukac=","ext":null,"extMessage":null,"success":true} data解密后的内容: {"addressee":"收件人","area":"浙江省南昌市湾里区","detailAddress":"详细地址","email":"13033613078@163.com","expressCompany":"","expressNo":"","invoiceAmount":10008.000,"invoiceBillNo":"2020091817143583891968","invoiceContent":"信息技术服务*技术服务费","invoiceStatus":0,"invoiceStatusDesc":"待审核","phone":"13033613078","purchaserAddressPhone":"134567895585","purchaserBankAccount":"啊啊啊啊啊","purchaserInvoiceTitle":"翰一号测试","purchaserTaxNumber":"010203050408","refuseReason":"","remark":"这是一个备注"} ``` ## 4.10 开票取消接口 开发环境:https://pay-dev.lx-rhino.com 生产环境:https://api.lx-rhino.com #### 接口地址: /open/api/v1/ak/invoice/cancel #### 请求方式:POST #### 请求参数说明: |参数名称|参数类型|参数含义|是否必填|参数备注| |-|-|-|-|-| |invoiceBillNo|String|创建发票返回的开票订单号|是|| #### 接口响应参数data字段解密后的参数说明: >d 该接口响应参数中无响应data字段 ,success 等于true代表取消成功,false 代表失败 errorMessage中有错误信息反馈 ## 4.11 个体工商户可结算金额查询 开发环境:https://pay-dev.lx-rhino.com 生产环境:https://api.lx-rhino.com #### 接口地址:/open/api/v1/ak/akSelfEmployedSettledAmountQuery #### 请求方式:POST #### 请求参数说明: |参数名称|参数含义|数据类型|是否必填|参数备注| |-|-|-|-|-| |idCard|个体户身份证号|String|是|| |mainstayId|主体ID|String|是|该参数值由4.12 查询企业行业、开票内容| #### 接口响应参数说明: |参数名称|参数含义| 数据类型|是否必有|参数备注| |-|-|-|-|-| |name|个体户姓名|String|是|例:张三| |idCard|个体户身份证号|String|是|例:410422199405051167| |thisMonthSettledAmount|本月已结算金额|String|是|例:0| |thisMonthSurplusOfAmount|本月剩余可结算金额|String|是|例:400000| |surplusOfInvoiceAmount|剩余可开票金额|String|是|例:4950000| #### 字段解释: (1)剩余可开票金额:指的是记录个体工商户剩余可开发票的金额,由于个体工商户开票年度总金额的限制的原因;开票年度计算方式,个体工商户连续12月开票金额不得超过495W,例如:从2021年3月份往前推12个月的开票金额不得超过495W,4月份依次类推。例如:495W - 2020年4月份到2021年的3月份之前开票的金额 = 剩余可开票金额; ## 4.12 查询企业行业、开票内容 >d 通过该接口可获取公司的可开发票列表,以及所拥有主体列表,无需频繁请求。请求到之后保存自己库即可。当签署主体信息有变更。或者发票内容有调整重新请求接口即可。 开发环境:https://pay-dev.lx-rhino.com 生产环境:https://api.lx-rhino.com #### 接口地址:/open/api/v1/ak/queryInvoices #### 请求方式:POST #### 请求参数说明: |参数名称|参数含义|是否必填|参数备注| |-|-|-|-| |无参数|||该接口无需参数| #### 响应参数说明: |参数名称| 参数含义|数据类型| 是否必有| 参数备注| |-|-|-|-|-| |name| 主体名称| String|是|主体名称| |mainstayId| 主体ID|int| 是|主体ID| |invoiceOpResponseList| 发票列表| 是|发票列表为List数组| |industryCode| 行业编码|String| 是|invoiceOpResponseList里面属性| |industryName| 行业名称|String| 是|invoiceOpResponseList里面属性| |invoiceCode| 发票编码|String| 是|invoiceOpResponseList里面属性| |invoiceContent| 发票名称|String| 是|invoiceOpResponseList里面属性| 解密结果示例如下: ```json [ { "invoiceOpResponseList":[ { "industryCode":"KJHY_01", //行业编码 "industryName":"科技行业", //行业名称 "invoiceCode":"XXJSFWJSFWF", //发票编码 "invoiceContent":"信息技术服务*技术服务费" //发票名称 }, { "industryCode":"YXTG_01", "industryName":"营销推广", "invoiceCode":"XDFWYXFWF", "invoiceContent":"现代服务*营销服务费" } ], "mainstayId":1, //主体ID "name":"xxx" //主体名称 } ] ```