# 发票接口
发票等相关接口用于接入方应用关于发票创建草稿、申请发票、开票等需求场景, 支撑业务方及公司财务人员的日常运营工作
# 创建草稿
# 请求
POST https://apigate.glodon.com/ngtrade/invoice/draft
# 说明
可通过该接口将用户在接入方系统填写的发票信息, 同步到支付中心, 后续业务人员在支付中心的后台申请相关订单的发票时, 可以直接预读取发票草稿, 不需要重新填写。
# 参数
| 参数名 | 参数类型 | 参数含义 | 是否必填 |
|---|---|---|---|
| b64 | String | JSON报文的Base64编码数据 | 是 |
| g_signature | String | 签名 | 是 |
JSON报文格式
{
"inputCharset":"UTF-8",
"signType":"MD5",
"appKey":"35l3AAQv9kByIUKVT7UXR7DdDV8xfPuL",
"type":1,
"orderIds":["365854575212756992","364766295645880320"],
"name":"接口测试普通发票合并开票",
"taxPayerId":"测试",
"registerAddr":"测试",
"registerPhone":"测试",
"taxPayerBank":"",
"bankAccount":"",
"remark":"remark",
"extra":"extra",
"taxRate":0.06,
"checkBy": "checkBy",
"responsibleBy": "responsibleBy",
"products":[
{
"productName":"产品1",
"productAmount":1
},
{
"productName":"产品2",
"productAmount":1
}
],
"address":{
"name": "name",
"mobile":"18901031876",
"address": "hhhhhhhhhhh",
"email":"email"
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
JSON字段说明
| 参数名 | 参数类型 | 参数含义 | 是否必填 |
|---|---|---|---|
| inputCharset | String | 字符编码, 固定为UTF-8 | 是 |
| signType | String | 签名算法, 可选择SHA-256, SHA-1, MD5, 推荐使用SHA-256 | 是 |
| appKey | String | 应用Key | 是 |
| type | Integer | 发票类型:1为普通发票,2为增值税发票, 3为电子发票 | 是 |
| orderIds | JSONArray | 发票关联的交易平台订单ID, 多个订单ID用英文逗号分隔,如"orderIds":["365854575212756992","364766295645880320"] | 是 |
| name | String | 单位名称 | 是 |
| taxPayerId | String | 税务证号, 长度必须为15、17、18或20位, 且内容必须为字母或数字 | 当type为2时必填 |
| registerAddr | String | 注册地址 | 当type为2时必填 |
| registerPhone | String | 注册电话 | 当type为2时必填 |
| taxPayerBank | String | 开户银行 | 当type为2时必填 |
| bankAccount | String | 开户账号 | 当type为2时必填 |
| remark | String | 发票备注 | 否 |
| extra | String | 扩展属性, 可自定义 | 否 |
| taxRate | Float | 税率, 目前只支持0.06, 0.09或0.13 | 否 |
| checkBy | String | 复核人 | 否 |
| responsibleBy | String | 业务负责人 | 否 |
| products | JSON节点 | 发票产品信息,可以包含0或多个产品 | 否 |
| products[0].productName | String | 发票产品名称 | 若存在发票产品时必填 |
| products[0].productAmount | Integer | 发票产品金额, 单位为分 | 若存在发票产品时必填 |
| address.name | String | 收件人姓名 | 若存在发票地址时必填 |
| address.mobile | String | 收件人手机 | 若存在发票地址时必填 |
| address.address | String | 收件人地址 | 若存在发票地址时必填 |
| address.email | String | 收件人电子邮件 | 否, 电子发票可为接收人电子邮件地址 |
# HTTP请求示例
curl -v -X POST -d "b64=ewogICAgImlucHV0Q2hhcnNldCI6IlVURi04IiwKICAgICJzaWduVHlwZSI6Ik1ENSIsCiAgICAiYXBwS2V5IjoidnVlY3NneDQ3N0lxRXgydUxENFhRZzVyRkQ1ZmhJbVQiLAogICAgInR5cGUiOjEsCiAgICAib3JkZXJJZHMiOiIyNDQ0OTA1NTg1MzU2NDcyMzIiLAogICAgIm5hbWUiOiLmtYvor5UiLAogICAgInRheFBheWVySWQiOiIiLAogICAgInJlZ2lzdGVyQWRkciI6IiIsCiAgICAicmVnaXN0ZXJQaG9uZSI6IiIsCiAgICAidGF4UGF5ZXJCYW5rIjoiIiwKICAgICJiYW5rQWNjb3VudCI6IiIsCiAgICAicmVjaWV2ZUVpbnZvaWNlQWRkcmVzcyI6IiIsCiAgICAicmVtYXJrIjoicmVtYXJrIiwKICAgICJleHRyYSI6ImV4dHJhIiwKICAgICJ0YXhSYXRlIjowLjA2LAogICAgInByb2R1Y3RzIjpbCiAgICAgICAgewogICAgICAgICAgICAicHJvZHVjdE5hbWUiOiIxMTExMTExMSIsCiAgICAgICAgICAgICJwcm9kdWN0QW1vdW50IjoyCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgICJwcm9kdWN0TmFtZSI6IjExMTExMTExIiwKICAgICAgICAgICAgInByb2R1Y3RBbW91bnQiOjEKICAgICAgICB9CiAgICBdLAogICAgImFkZHJlc3MiOnsKICAgICAgICAibmFtZSI6ICJuYW1lIiwKICAgICAgICAibW9iaWxlIjoiMTg5MDEwMzE4NzYiLAogICAgICAgICJhZGRyZXNzIjogImhoaGhoaGhoaGhoIiwKICAgICAgICAiZW1haWwiOiJlbWFpbCIKICAgIH0KfQ==" -d "g_signature=97D50C4D85A2C4A3D4FD2C5667707917" https://apigate.glodon.com/ngtrade-test/invoice/draft
1
# 响应
# 状态码说明
| HTTP代码 | 说明 | 类型 |
|---|---|---|
| 200 | ok | 无内容 |
# 响应报文
{
"code": "000000",
"message": "成功",
"data": "402162410389110784"
}
1
2
3
4
5
2
3
4
5
# 响应报文字段说明
| 参数名 | 参数含义 |
|---|---|
| code | 响应状态码, 000000代表成功, 其余代表失败 |
| message | 响应信息 |
| data | 发票ID |
# 开票
# 请求
PUT https://apigate.glodon.com/ngtrade/invoice/{invoiceId}/born
# 说明
开票操作, 可补充发票的发票号、发票代码、快递单号等信息
# 参数
| 参数名 | 参数类型 | 参数含义 | 是否必填 |
|---|---|---|---|
| invoiceId | String | 发票ID:代表支付中心生成的唯一发票标识 | 是 |
| b64 | String | JSON报文的Base64编码数据 | 是 |
| g_signature | String | 签名 | 是 |
JSON报文格式
{
"signType":"MD5",
"appKey":"35l3AAQv9kByIUKVT7UXR7DdDV8xfPuL",
"invoiceNumber": "1111",
"invoiceCode": "2222",
"trackingNo": "111111111"
}
1
2
3
4
5
6
7
2
3
4
5
6
7
JSON字段说明
| 参数名 | 参数类型 | 参数含义 | 是否必填 |
|---|---|---|---|
| signType | String | 签名算法, 可选择SHA-256, SHA-1, MD5, 推荐使用SHA-256 | 是 |
| appKey | String | 应用Key | 是 |
| invoiceNumber | String | 发票号 | 是 |
| invoiceCode | String | 发票代码 | 是 |
| trackingNo | String | 快递单号 | 否 |
# HTTP请求示例
curl -v -X PUT -d "b64=ewogICAgImFwcEtleSI6ICJ2dWVjc2d4NDc3SXFFeDJ1TEQ0WFFnNXJGRDVmaEltVCIsCiAgICAic2lnblR5cGUiOiAiTUQ1IiwKICAgICJpbnZvaWNlTnVtYmVyIjogIjExMSIsCiAgICAiaW52b2ljZUNvZGUiOiAiMTExIiwKICAgICJ0cmFja2luZ05vIjogIjExMTExIgp9&g_signature=42FA5B912E9D2A1ED719649939085BA8" https://apigate.glodon.com/ngtrade-test/invoice/1/born
1
# 响应
# 状态码说明
| HTTP代码 | 说明 | 类型 |
|---|---|---|
| 200 | ok | 无内容 |
# 响应报文
{
"code": "000000",
"data": {
"id": "1",
"channelCode": "1",
"appKey": "1",
"type": 1,
"status": 2,
"name": "1",
"payAmount": 1.0,
"taxPayerId": "1",
"registerAddr": "1",
"registerPhone": "1",
"taxPayerBank": "1",
"bankAccount": "1",
"checkBy": "1",
"responsibleBy": "1",
"invoiceAmount": 1.0,
"taxRate": 1.0,
"taxAmount": 1.0,
"invoiceApplyTime": null,
"invoiceBornTime": null,
"invoiceNumber": "111",
"invoiceCode": "111",
"oldInvoiceNumber": "0",
"oldInvoiceCode": "0",
"remark": "1",
"merged": 0,
"notifyTime": null,
"updateTime": null,
"orders": [
{
"id": {
"invoiceId": "1",
"ngtradeOrderId": "1"
},
"invoiceId": "1",
"ngtradeOrderId": "1",
"outOrderId": "1",
"payId": 1,
"crmOrderId": "1"
}
],
"products": [
{
"id": 1,
"invoiceId": "1",
"productName": "1",
"productAmount": 1.0
}
],
"address": {
"id": 1,
"invoiceId": "1",
"name": "1",
"mobile": "1",
"address": "1",
"email": "1"
}
},
"message": "成功"
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# 查询订单关联发票
# 请求
GET https://apigate.glodon.com/ngtrade/order/{orderId}/invoice
# 说明
根据支付中心的订单编号, 查询订单关联的发票
# 参数
| 参数名 | 参数类型 | 参数含义 | 是否必填 |
|---|---|---|---|
| orderId | 订单ID | 是支付系统生成的订单唯一标识 | 是 |
| appKey | String | 应用Key | 是 |
| inputCharset | String | 字符编码, 固定填写UTF-8 | 是 |
| signType | String | 签名算法, 固定填写SHA-256 | 是 |
| g_signature | String | 签名 | 是 |
# HTTP请求示例
curl -v -X GET "https://apigate.glodon.com/ngtrade-test/order/1/invoice?appKey=vuecsgx477IqEx2uLD4XQg5rFD5fhImT&g_signature=165f265bf1f5c7f2639be5d3ce28c8af927f81c8be898cf2c882d245314b2e47&signType=SHA-256&inputCharset=UTF-8"
1
# 响应
# 状态码说明
| HTTP代码 | 说明 | 类型 |
|---|---|---|
| 200 | ok | 无内容 |
# 响应报文
{
"code": "000000",
"message": "成功",
"data": {
"id": "442059602561990656",
"appKey": "vuecsgx477IqEx2uLD4XQg5rFD5fhImT",
"type": 3,
"status": 1,
"name": "name",
"payAmount": 10000.00,
"taxPayerId": "taxPayerId",
"registerAddr": "registerAddr",
"registerPhone": "registerPhone",
"taxPayerBank": "taxPayerBank",
"bankAccount": "bankAccount",
"checkBy": "checkBy",
"responsibleBy": "responsibleBy",
"invoiceAmount": 333300.00,
"taxRate": 0.06,
"taxAmount": 19998.00,
"invoiceApplyTime": null,
"invoiceBornTime": null,
"invoiceNumber": null,
"invoiceCode": null,
"remark": "remark",
"merged": 0,
"updateTime": null,
"orders": [
{
"ngtradeOrderId": "1",
"outOrderId": "1",
"payId": 1
}
],
"products": [
{
"productName": "productName1",
"productAmount": 1111.00
},
{
"productName": "productName2",
"productAmount": 2222.00
}
],
"address": {
"name": "1",
"mobile": "1",
"address": "1",
"email": "email"
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# 响应报文字段说明
| 参数名 | 参数含义 |
|---|---|
| code | 响应状态码, 000000代表成功 |
| message | 响应信息 |
| data | 业务数据节点 |
| id | 发票ID |
| appKey | 应用Key |
| type | 1为普通发票,2为增值税发票, 3为电子发票 |
| status | 0草稿、1已申请、2已开票、3待作废、4已作废 5已驳回 |
| name | 发票名称 |
| payAmount | 用户支付金额 |
| taxPayerId | 税务证号(增值税发票) |
| registerAddr | 注册地址(增值税发票) |
| registerPhone | 注册电话(增值税发票) |
| taxPayerBank | 开户银行(增值税发票) |
| bankAccount | 开户账号(增值税发票) |
| checkBy | 复核人 |
| responsibleBy | 业务负责人 |
| invoiceAmount | 开票合计 |
| taxRate | 税率 |
| taxAmount | 税金 |
| invoiceApplyTime | 申请时间 |
| invoiceBornTime | 开票日期 |
| invoiceNumber | 发票号 |
| invoiceCode | 发票代码 |
| remark | 备注 |
| merged | 是否为合并开票, 0不是, 1是 |
| updateTime | 更新时间 |
| orders[0].ngtradeOrderId | 交易订单ID |
| orders[0].outOrderId | 业务渠道订单ID |
| orders[0].payId | 交易支付流水ID |
| products[0].productName | 产品名 |
| address[0].name | 收件人姓名 |
| address[0].mobile | 收件人手机 |
| address[0].address | 收件人地址 |
| address[0].email | 收件人电子邮箱 |
# 确认作废
# 请求
PUT https://apigate.glodon.com/ngtrade/invoice/{invoiceId}/cancellation
# 说明
确认发票已作废
# 参数
| 参数名 | 参数类型 | 参数含义 | 是否必填 |
|---|---|---|---|
| invoiceId | String | 发票ID:代表支付中心生成的唯一发票标识 | 是 |
| appKey | String | 应用Key | 是 |
| inputCharset | String | 字符编码, 固定填写UTF-8 | 是 |
| signType | String | 签名算法, 固定填写SHA-256 | 是 |
| g_signature | String | 签名 | 是 |
# HTTP请求示例
curl -v -X PUT -d "inputCharset=UTF-8&signType=MD5&appKey=KEkEp0AzKhHrbtMMJm0DofCyMDGHk1dj&g_signature=d11994079b30b513c78cd7b5656a0066" https://apigate.glodon.com/ngtrade-test/invoice/407229543867351040/cancellation
1
# 响应
# 状态码说明
| HTTP代码 | 说明 | 类型 |
|---|---|---|
| 200 | ok | 无内容 |
# 响应报文
{
"code": "000000",
"data": {
"id": "1",
"channelCode": "1",
"appKey": "1",
"type": 1,
"status": 2,
"name": "1",
"payAmount": 1.0,
"taxPayerId": "1",
"registerAddr": "1",
"registerPhone": "1",
"taxPayerBank": "1",
"bankAccount": "1",
"checkBy": "1",
"responsibleBy": "1",
"invoiceAmount": 1.0,
"taxRate": 1.0,
"taxAmount": 1.0,
"invoiceApplyTime": null,
"invoiceBornTime": null,
"invoiceNumber": "111",
"invoiceCode": "111",
"oldInvoiceNumber": "0",
"oldInvoiceCode": "0",
"remark": "1",
"merged": 0,
"notifyTime": null,
"updateTime": null,
"orders": [
{
"id": {
"invoiceId": "1",
"ngtradeOrderId": "1"
},
"invoiceId": "1",
"ngtradeOrderId": "1",
"outOrderId": "1",
"payId": 1,
"crmOrderId": "1"
}
],
"products": [
{
"id": 1,
"invoiceId": "1",
"productName": "1",
"productAmount": 1.0
}
],
"address": {
"id": 1,
"invoiceId": "1",
"name": "1",
"mobile": "1",
"address": "1",
"email": "1"
}
},
"message": "成功"
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# 驳回
# 请求
PUT https://apigate.glodon.com/ngtrade/invoice/{invoiceId}/reject
# 说明
对已申请的发票进行驳回操作
# 参数
| 参数名 | 参数类型 | 参数含义 | 是否必填 |
|---|---|---|---|
| invoiceId | String | 发票ID:代表支付中心生成的唯一发票标识 | 是 |
| appKey | String | 应用Key | 是 |
| rejectReason | String | 拒绝理由 | 否 |
| inputCharset | String | 字符编码, 固定填写UTF-8 | 是 |
| signType | String | 签名算法, 可选择SHA-256, SHA-1, MD5, 推荐使用SHA-256 | 是 |
| g_signature | String | 签名 | 是 |
# HTTP请求示例
curl -v -X PUT -d "inputCharset=UTF-8&signType=MD5&appKey=KEkEp0AzKhHrbtMMJm0DofCyMDGHk1dj&g_signature=d11994079b30b513c78cd7b5656a0066&rejectReason=%E4%B8%AD%E6%96%87" https://apigate.glodon.com/ngtrade-test/invoice/407229543867351040/reject
1
# 响应
# 状态码说明
| HTTP代码 | 说明 | 类型 |
|---|---|---|
| 200 | ok | 无内容 |
# 响应报文
{
"code": "000000",
"data": {
"id": "1",
"channelCode": "1",
"appKey": "1",
"type": 1,
"status": 2,
"name": "1",
"payAmount": 1.0,
"taxPayerId": "1",
"registerAddr": "1",
"registerPhone": "1",
"taxPayerBank": "1",
"bankAccount": "1",
"checkBy": "1",
"responsibleBy": "1",
"invoiceAmount": 1.0,
"taxRate": 1.0,
"taxAmount": 1.0,
"invoiceApplyTime": null,
"invoiceBornTime": null,
"invoiceNumber": "111",
"invoiceCode": "111",
"oldInvoiceNumber": "0",
"oldInvoiceCode": "0",
"remark": "1",
"merged": 0,
"notifyTime": null,
"updateTime": null,
"orders": [
{
"id": {
"invoiceId": "1",
"ngtradeOrderId": "1"
},
"invoiceId": "1",
"ngtradeOrderId": "1",
"outOrderId": "1",
"payId": 1,
"crmOrderId": "1"
}
],
"products": [
{
"id": 1,
"invoiceId": "1",
"productName": "1",
"productAmount": 1.0
}
],
"address": {
"id": 1,
"invoiceId": "1",
"name": "1",
"mobile": "1",
"address": "1",
"email": "1"
}
},
"message": "成功"
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62