Commit ae5e8fff by 王昆

gsb

parent c5f45d87
var system = require("../../../system") var system = require("../../../system")
const CtlBase = require("../../ctlms.base"); const CtlBase = require("../../ctlms.base");
const validation = system.getObject("util.validation");
class InvoiceCtl extends CtlBase { class InvoiceCtl extends CtlBase {
constructor() { constructor() {
super(); super();
this.invoiceSve = system.getObject("service.invoice.invoiceSve"); this.invoiceSve = system.getObject("service.invoice.invoiceSve");
} }
//发票列表 // 审核
async platforminvoicePage(params, pobj2, req) { async audit(params, pobj2, req) {
try { try {
let rs = await this.invoiceSve.platforminvoicePage(params); let id = this.trim(params.id);
return rs; if (!id) {
} catch (error) { return system.getResult(null, "发票申请不存在");
return system.getResult(null, `系统错误 错误信息 ${error}`); }
} let status = params.status || 0;
} let remark = this.trim(params.remark);
if (!remark) {
//发票申请列表 return system.getResult(null, "请填写审核备注");
async platforminvoiceapplyPage(params, pobj2, req) { }
try { return system.getResultSuccess();
let rs = await this.invoiceSve.platforminvoiceapplyPage(params); } catch (error) {
return rs; return system.getResult(null, `系统错误 错误信息 ${error}`);
} catch (error) { }
return system.getResult(null, `系统错误 错误信息 ${error}`); }
}
// 发票开具
// 审核
async makeout(params, pobj2, req) {
try {
validation.check(params, 'invoice_no', {name: "发票代码", is_require: true});
validation.check(params, 'invoice_number', {name: "发票号码", is_require: true});
validation.check(params, 'invoice_time', {name: "开票时间", is_require: true});
validation.check(params, 'mail_no', {name: "快递单号", is_require: true});
validation.check(params, 'invoice_img', {name: "发票图片", is_require: true});
return system.getResultSuccess(params);
} catch (error) {
let msg = error.message;
if (msg.startsWith("bpo-validation-error:")) {
return system.getResult(null, msg.replace("bpo-validation-error:", ""));
}
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
async platformTitleAddr(params, pobj2, req) {
try {
let result = {};
result.title = {"merchant_name": "舟山兰和有限公司", "merchant_credit_code": "KHSDLKFJAFJ", "merchant_tax_type": "00", "merchant_addr": "河南信阳", "merchant_mobile": "18833836395", "merchant_bank": "北京银行栓秀支行", "merchant_account": "zhousanlanhe"};
result.addr = {"mail_addr": "北京朝阳区国创元", "mail_mobile": "010-4525821-44", "mail_to": "张娇哒哒哒",};
return system.getResultSuccess(result);
} catch (error) {
let msg = error.message;
if (msg.startsWith("bpo-validation-error:")) {
return system.getResult(null, msg.replace("bpo-validation-error:", ""));
}
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
async platformInvoiceInfo(params, pobj2, req) {
try {
let result = {};
result.tax = {"additional_tax_total": 5000, "personal_invoice_tax_total": 5000, "value_added_tax_total": 700};
result.invoiceList = [{"name": "舟山兰和有限公司", "credit_code": "KHSDLKFJAFJ", "is_bank": 0, "invoice_amount": 1000000, "personal_invoice_tax": 3000, "additional_tax": 5000, "service_tax": 5000, "value_added_tax": 700, "unit": "", "quantity": 0, "price": 0, "remark": ""}, {"name": "舟山兰和有限公司", "credit_code": "KHSDLKFJAFJ", "is_bank": 0, "invoice_amount": 1000000, "personal_invoice_tax": 3000, "additional_tax": 5000, "service_tax": 5000, "value_added_tax": 700, "unit": "", "quantity": 0, "price": 0, "remark": ""}];
return system.getResultSuccess(result);
} catch (error) {
let msg = error.message;
if (msg.startsWith("bpo-validation-error:")) {
return system.getResult(null, msg.replace("bpo-validation-error:", ""));
}
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
async platformInvoiceApply(params, pobj2, req) {
try {
return system.getResultSuccess();
} catch (error) {
let msg = error.message;
if (msg.startsWith("bpo-validation-error:")) {
return system.getResult(null, msg.replace("bpo-validation-error:", ""));
}
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
//发票列表
async invoicePage(params, pobj2, req) {
try {
let rs = await this.invoiceSve.platforminvoicePage(params);
return rs;
} catch (error) {
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
//发票申请列表
async applyPage(params, pobj2, req) {
try {
params.owner_type = "00";
let rs = await this.invoiceSve.platforminvoiceapplyPage(params);
return rs;
} catch (error) {
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
//发票申请列表
async platformApplyPage(params, pobj2, req) {
try {
params.owner_type = "10";
let rs = await this.invoiceSve.platforminvoiceapplyPage(params);
return rs;
} catch (error) {
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
// 审核
async platformAudit(params, pobj2, req) {
try {
let id = this.trim(params.id);
if (!id) {
return system.getResult(null, "发票申请不存在");
}
let status = params.status || 0;
let remark = this.trim(params.remark);
if (!remark) {
return system.getResult(null, "请填写审核备注");
}
return system.getResultSuccess();
} catch (error) {
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
// 审核
async platformAudit(params, pobj2, req) {
try {
let id = this.trim(params.id);
if (!id) {
return system.getResult(null, "发票申请不存在");
}
let status = params.status || 0;
let remark = this.trim(params.remark);
if (!remark) {
return system.getResult(null, "请填写审核备注");
}
return system.getResultSuccess();
} catch (error) {
return system.getResult(null, `系统错误 错误信息 ${error}`);
}
}
// 审核
async platformAudit(params, pobj2, req) {
try {
let id = this.trim(params.id);
if (!id) {
return system.getResult(null, "发票申请不存在");
}
let status = params.status || 0;
let remark = this.trim(params.remark);
if (!remark) {
return system.getResult(null, "请填写审核备注");
}
return system.getResultSuccess();
} catch (error) {
return system.getResult(null, `系统错误 错误信息 ${error}`);
} }
}
} }
......
...@@ -197,7 +197,7 @@ class System { ...@@ -197,7 +197,7 @@ class System {
merchant: local + ":3101" + path, merchant: local + ":3101" + path,
// 订单服务 // 订单服务
order: local + ":3103" + path, order: dev + ":3103" + path,
// 发票服务 // 发票服务
invoice: local + ":3105" + path, invoice: local + ":3105" + path,
...@@ -206,7 +206,7 @@ class System { ...@@ -206,7 +206,7 @@ class System {
uc: dev + ":3106" + path, uc: dev + ":3106" + path,
// 交易 // 交易
trade: dev + ":3107" + path, trade: local + ":3107" + path,
} }
} else { } else {
return { return {
......
const system = require("../system");
class Validation {
constructor() {
// this.restClient = system.getObject("util.restClient");
this.PATTERN = {
EMAIL_PATTERN: /^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/,
PHONE_PATTERN: /^(1[0-9])\d{9}$/,
CHINESE_PATTERN: /^[\u4E00-\u9FA5]+$/,
ENGLISH_PATTERN: /^[A-Za-z]+$/,
QQ_PATTERN: /^[1-9][0-9]{4,}$/,
NUMBER_PATTERN: /^\d+$/,
CONTAINS_CHINESE_PATTERN: /[\u4e00-\u9fa5]/,
CONTAINS_ENGLISH_PATTERN: /.*[a-zA-Z]+.*/,
CONTAINS_NUM_PATTERN: /[0-9]+?/,
DATE_PATTERN: /((^((1[8-9]\d{2})|([2-9]\d{3}))[-](10|12|0?[13578])[-](3[01]|[12][0-9]|0?[1-9])(\s{1}([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9])?$)|(^((1[8-9]\d{2})|([2-9]\d{3}))[-](11|0?[469])[-](30|[12][0-9]|0?[1-9])(\s{1}([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9])?$)|(^((1[8-9]\d{2})|([2-9]\d{3}))[-](0?2)[-](2[0-8]|1[0-9]|0?[1-9])(\s{1}([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9])?$)|(^([2468][048]00)[-](0?2)[-](29)(\s{1}([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9])?$)|(^([3579][26]00)[-](0?2)[-](29)(\s{1}([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9])?$)|(^([1][89][0][48])[-](0?2)[-](29)(\s{1}([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9])?$)|(^([2-9][0-9][0][48])[-](0?2)[-](29)(\s{1}([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9])?$)|(^([1][89][2468][048])[-](0?2)[-](29)(\s{1}([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9])?$)|(^([2-9][0-9][2468][048])[-](0?2)[-](29)(\s{1}([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9])?$)|(^([1][89][13579][26])[-](0?2)[-](29)(\s{1}([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9])?$)|(^([2-9][0-9][13579][26])[-](0?2)[-](29)(\s{1}([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9])?$)|(^([2-9][0-9][13579][26])[-](0?2)[-](29)(\s{1}([this.01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](\.[0-9]*))?$))/,
PASSWORD_PATTERN: /^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{6,20}$/,
};
}
/**
* 验证字段合法
* @param data 验证的对象
* data.errors 数组,不为空时,会将验证数据放到数组中
* @param field 验证的key
* @param rule 验证规则
* @param vall 是否全部验证完成
* @returns
*/
check(data, field, rule) {
if (!rule) {
return true;
}
if(!data) {
throw new Error(msg + "对象不存在");
}
let v = data[field];
if (rule.is_require && !v) {
this.error(data, `${rule.name}:为空`);
}
if (rule.maxLen && v.length > rule.maxLen) {
this.error(data, `${rule.name}:长度不允许超过${rule.maxLen}`);
}
if (rule.minLen && v.length < rule.minLen) {
this.error(data, `${rule.name}:长度不允许少于${rule.minLen}`);
}
if (rule.eqLen && v.length != rule.eqLen) {
this.error(data, `${rule.name}:长度为${rule.eqLen}`);
}
if (rule.is_number && isNaN(v)) {
this.error(data, `${rule.name}:需要填写数字类型`);
}
if (rule.is_mobile && this.PATTERN.PHONE_PATTERN.test(v)) {
this.error(data, `${rule.name}:需要填写数字类型`);
}
if (rule.dics && rule.dics.indexOf(v) == -1) {
this.error(data, `${rule.name}${v} 错误`);
}
if(rule.arr_require && (!v || v.length == 0)) {
this.error(data, `${rule.name}:数据为空`);
}
}
error(data, msg) {
if(data.errors) {
data.errors.push(msg);
} else {
throw new Error(`bpo-validation-error:${msg}`);
}
}
}
module.exports = Validation;
<a name="menu">目录</a> <a name="menu">目录</a>
1. [字典](#dics)
1. [查看商户抬头信息详情](#queryInvoiceTitleAndAddr) 1. [查看商户抬头信息详情](#queryInvoiceTitleAndAddr)
1. [商户抬头信息列表](#merchantTitleAddrPage) 1. [商户抬头信息列表](#merchantTitleAddrPage)
1. [更新或保存抬头地址信息](#updateOrSaveTitleAndAddr) 1. [更新或保存抬头地址信息](#updateOrSaveTitleAndAddr)
1. [发票申请列表](#applyPage)
1. [发票申请-审核](#audit)
1. [发票申请-发票开具](#makeout)
## **<a name="dics"> 字典</a>** 1. [发票申请-平台发票申请-抬头&邮寄信息:第一步](#platformTitleInfo)
[返回到目录](#menu) 1. [发票申请-平台发票申请-发票信息填写:第二步](#platformInvoiceInfo)
##### URL 1. [发票申请-平台发票申请-提交:第三步](#platformInvoiceApply)
[/web/saas/merchantCtl/dics] 1. [平台发票申请列表](#platformApplyPage)
#### 参数格式 `JSON` 1. [平台发票申请-审核](#platformAudit)
#### HTTP请求方式 `POST` 1. [平台发票申请-发票办理](#platformHandle)
``` javascript 1. [发票列表](#invoicePage)
{}
```
#### 返回结果
```javascript
{
"status": 0,
"msg": "success",
"data": [
{
"id": 110361382269, // 商户id
"name": "司机宝" // 商户名称
"short_name": "去测1" // 简称
},
]
}
```
## **<a name="queryInvoiceTitleAndAddr"> 查看商户抬头信息详情</a>** ## **<a name="queryInvoiceTitleAndAddr"> 查看商户抬头信息详情</a>**
...@@ -208,3 +184,522 @@ ...@@ -208,3 +184,522 @@
``` ```
## **<a name="applyPage"> 发票申请列表 </a>**     
[返回到目录](#menu)     
##### URL
[/web/saas/invoiceCtl/applyPage]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 请求参数 `POST`
```javascript
// 1000待审核 1010审核通过 1020审核不通过 1030发票办理 1040发票开具 1050平台办理中 1060办理完成
按钮规则
fee_type == "10" && status == 1000 审核
fee_type == "10" && status == 1010 发票开具
fee_type == "10" && status == 1040 平台发票申请
{
"currentPage": 1,
"pageSize": 10,
"apply_no": "", //发票申请编号
"begin_time": "", //开始时间
"end_time": "" //结束时间
}
```
**返回结果**
| 参数名|数据类型| 说明 |
|---|:---:|---|
| status | Number | 状态码 |
| msg | String | 提示信息 |
| data | JSON | 返回值 |
**示例**
```javascript
{
"status": 0,
"msg": "success",
"data": {
"count": 1,
"rows": [
{
"id": "1",
"saas_id": "1",
"saas_merchant_id": "11248111258000991",
"batch_no": "1",
"owner_type": "商户发票",
"fee_type": "注册订单费用",
"invoice_type": "增值税专用发票", //发票类型
"status": "1", //进度
"sve_invoice_id": "1",
"apply_no": "1", //发票申请编号
"from_name": "1", //开票方
"from_credit_code": "1",
"from_addr": "1",
"from_mobile": "1",
"from_bank": "1",
"from_account": "1",
"to_name": "1", //发票抬头
"to_credit_code": "1",
"to_addr": "1",
"to_mobile": "1",
"to_bank": "1",
"to_account": "1",
"mail_to": "1",
"mail_mobile": "1",
"mail_addr": "1",
"personal_invoice_tax": 1, //个税
"additional_tax": 1,
"value_added_tax": 1,
"service_tax": 1,
"created_at": "2020-04-10 22:39:43", //申请时间
"updated_at": "2020-04-10 22:39:40",
"deleted_at": null,
"version": 0,
"invoice_join": "",
"price": 0
}
]
},
"requestid": "712c62cc9dfd455b82ae13bf68c882c9"
}
```
## **<a name="audit"> 发票申请审核</a>**
[返回到目录](#menu)
##### URL
[/web/saas/invoiceCtl/audit]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
``` javascript
{
"id": 1, // 发票id
"status": 1, // 审核状态 0失败 1成功
"remark": "123123" // 审核备注 必填
}
```
#### 返回结果
```javascript
{
"status": 0,
"msg": "success",
"data": null
"requestid": "b8265578defd4d9983c1fcf5088e3bc2"
}
```
## **<a name="makeout"> 发票申请-发票开具</a>**
[返回到目录](#menu)
##### URL
[/web/saas/invoiceCtl/makeout]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
``` javascript
{
"id": 1, // 发票id
"invoice_no": "1", // 发票号码
"invoice_number": "3", // 发票代码
"invoice_time": "4", // 开票时间
"mail_no": "5", // 快递单号
"invoice_img": "6" // 发票图片
}
```
#### 返回结果
```javascript
{
"status": 0,
"msg": "success",
"data": null
"requestid": "b8265578defd4d9983c1fcf5088e3bc2"
}
```
## **<a name="platformTitleInfo"> 发票申请-平台发票申请-抬头&邮寄信息</a>**
[返回到目录](#menu)
##### URL
[/web/saas/invoiceCtl/platformTitleAddr]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
``` javascript
{
"id": 1, // 发票id
}
```
#### 返回结果
```javascript
{
"status": 0,
"msg": "success",
"data": {
"title": {
"merchant_name": "舟山兰和有限公司", // 商户名称
"merchant_credit_code": "KHSDLKFJAFJ", // 信用代码
"merchant_tax_type": "00", // 纳税人类型 00一般纳税人 10小规模纳税人
"merchant_addr": "河南信阳", // 商户地址
"merchant_mobile": "18833836395", // 商户电话
"merchant_bank": "北京银行栓秀支行", // 商户开户行
"merchant_account": "zhousanlanhe", // 商户银行账号
},
"addr": {
"mail_addr": "北京朝阳区国创元", // 邮寄地址
"mail_mobile": "010-4525821-44", // 联系电话
"mail_to": "张娇哒哒哒", // 收件人
}
}
}
```
## **<a name="platformInvoiceInfo"> 发票申请-平台发票申请-发票信息填写</a>**
[返回到目录](#menu)
##### URL
[/web/saas/invoiceCtl/platformInvoiceInfo]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
``` javascript
{
"id": 1, // 发票id
"invoice_type": "10" // 发票类型
}
```
#### 返回结果
```javascript
{
"status": 0,
"msg": "success",
"data": {
"tax": { // 平台发票申请3中显示
"additional_tax_total": 5000, // 附加税
"personal_invoice_tax_total": 5000, // 个税
"value_added_tax_total": 700 // 增值税
},
"invoiceList": [ // 平台发票申请3中显示编辑
{
"name": "舟山兰和有限公司", // 个体户名称
"credit_code": "KHSDLKFJAFJ", // 统一社会信用代码
"is_bank": 0, // 是否开户 0否 1是
"invoice_amount": 1000000, // 开票金额
"personal_invoice_tax": 3000, // 个税
"additional_tax": 5000, // 增值税
"service_tax": 5000, // 服务费
"value_added_tax": 700, // 附加费
"unit": "", // 单位
"quantity": 0, // 数量
"price": 0, // 单价
"remark": "" // 备注
"发票内容" // 暂时不做这个
},
]
}
}
```
## **<a name="platformInvoiceApply"> 发票申请-平台发票申请-提交:第三步</a>**
[返回到目录](#menu)
##### URL
[/web/saas/invoiceCtl/platformInvoiceApply]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
``` javascript
{
"id": 1, // 发票id
"invoice_type": "10" // 发票类型
"invoiceList": [
{
"name": "舟山兰和有限公司", // 个体户名称
"credit_code": "KHSDLKFJAFJ", // 统一社会信用代码
"is_bank": 0, // 是否开户 0否 1是
"invoice_amount": 1000000, // 开票金额
"personal_invoice_tax": 3000, // 个税
"additional_tax": 5000, // 增值税
"service_tax": 5000, // 服务费
"value_added_tax": 700, // 附加费
"unit": "", // 单位
"quantity": 0, // 数量
"price": 0, // 单价
"remark": "" // 备注
"发票内容" // 暂时不做这个
},
...好多
]
}
```
#### 返回结果
```javascript
{
"status": 0,
"msg": "success",
"data": null
}
```
## **<a name="platformApplyPage"> 平台发票申请列表 </a>**     
[返回到目录](#menu)     
##### URL
[/web/saas/invoiceCtl/platformApplyPage]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 请求参数 `POST`
```javascript
按钮规则
status == 1000 审核
status == 1010 发票办理
{
"currentPage": 1,
"pageSize": 10,
"apply_no": "", //发票申请编号
"begin_time": "", //开始时间
"end_time": "" //结束时间
}
```
**返回结果**
| 参数名|数据类型| 说明 |
|---|:---:|---|
| status | Number | 状态码 |
| msg | String | 提示信息 |
| data | JSON | 返回值 |
**示例**
```javascript
{
"status": 0,
"msg": "success",
"data": {
"count": 1,
"rows": [
{
"id": "1",
"saas_id": "1",
"saas_merchant_id": "11248111258000991",
"batch_no": "1",
"owner_type": "商户发票",
"fee_type": "注册订单费用",
"invoice_type": "增值税专用发票", //发票类型
"status": "1", //进度
"sve_invoice_id": "1",
"apply_no": "1", //发票申请编号
"from_name": "1", //开票方
"from_credit_code": "1",
"from_addr": "1",
"from_mobile": "1",
"from_bank": "1",
"from_account": "1",
"to_name": "1", //发票抬头
"to_credit_code": "1",
"to_addr": "1",
"to_mobile": "1",
"to_bank": "1",
"to_account": "1",
"mail_to": "1",
"mail_mobile": "1",
"mail_addr": "1",
"personal_invoice_tax": 1, //个税
"additional_tax": 1,
"value_added_tax": 1,
"service_tax": 1,
"created_at": "2020-04-10 22:39:43", //申请时间
"updated_at": "2020-04-10 22:39:40",
"deleted_at": null,
"version": 0,
"invoice_join": "",
"price": 0
}
]
},
"requestid": "712c62cc9dfd455b82ae13bf68c882c9"
}
```
## **<a name="platformAudit"> 平台发票申请-审核</a>**
[返回到目录](#menu)
##### URL
[/web/saas/invoiceCtl/platformAudit]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
``` javascript
{
"id": 1, // 发票id
"status": 1, // 审核状态 0失败 1成功
"remark": "123123" // 审核备注 必填
}
```
#### 返回结果
```javascript
{
"status": 0,
"msg": "success",
"data": null
"requestid": "b8265578defd4d9983c1fcf5088e3bc2"
}
```
## **<a name="platformHandle"> 平台发票申请-发票办理</a>**
[返回到目录](#menu)
##### URL
[/web/saas/invoiceCtl/platformHandle]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
``` javascript
{
"id": 1, // 发票id
}
```
#### 返回结果
```javascript
{
"status": 0,
"msg": "success",
"data": null
"requestid": "b8265578defd4d9983c1fcf5088e3bc2"
}
```
## **<a name="invoicePage"> 发票列表 </a>**     
[返回到目录](#menu)     
##### URL
[/web/saas/invoiceCtl/invoicePage]
#### 参数格式 `JSON`
#### HTTP请求方式 `POST`
#### 请求参数 `POST`
```javascript
{
"currentPage": 1,
"pageSize": 10,
"apply_no": "", //发票申请编号
"saas_merchant_id":"" //商户名称(传商户id)
}
```
**返回结果**
| 参数名|数据类型| 说明 |
|---|:---:|---|
| status | Number | 状态码 |
| msg | String | 提示信息 |
| data | JSON | 返回值 |
**示例**
```javascript
{
"status": 0,
"msg": "success",
"data": {
"count": 1,
"rows": [
{
"id": "1",
"saas_id": "saas_id",
"saas_merchant_id": "11248111258000991",
"batch_no": "batch_no",
"owner_type": "00",
"fee_type": "00",
"invoice_type": "10", //发票类型 10 增值税专用发票 20 增值税普通发票 30 普通发票
"province": "province",
"invoice_join": "10",
"invoice_no": "invoice_no", //发票代码
"invoice_number": "invoice_number", //发票号码
"invoice_time": "2020-04-09", //开票日期
"invoice_amount": 1, //价税总计
"sve_invoice_id": "sve_invoice_id",
"apply_no": "apply_no", //发票申请编号
"from_name": "from_name", //名称
"from_credit_code": "from_credit_code", //纳税人识别号
"from_addr": "from_addr", //地址
"from_mobile": "from_mobile", //电话
"from_bank": "from_bank", //开户行
"from_account": "from_account", //银行账号
"to_name": "to_name", //邮寄名称
"to_credit_code": "to_credit_code",
"to_addr": "to_addr", //邮寄地址
"to_mobile": "to_mobile", //邮寄电话
"to_bank": "to_bank", //
"to_account": "to_account",
"mail_to": "mail_to",
"mail_mobile": "mail_mobile",
"mail_addr": "mail_addr",
"personal_invoice_tax": 10,
"additional_tax": 1,
"value_added_tax": 1,
"service_tax": 1,
"summary": "summary",
"created_at": "2020-04-09 21:31:40",
"updated_at": "2020-04-09 21:31:42",
"deleted_at": null,
"version": 0,
"price": 0
}
]
},
"requestid": "2d9c4d82543f49b197e9bc38e1bdc499"
}
```
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment