重试与失败处理
开票失败(state == -1)的申请可以在修正原因后重新发起开票;开票中(state == 4)长时间无结果的申请可以主动置为失败后重新提交。
按外部订单号重试开票
POST
/invoice/retry| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| appKey | string | 条件必填 | 服务密钥 Key,与 appSecret 成对使用;传了 accessToken 时可不传 |
| appSecret | string | 条件必填 | 服务密钥 Secret |
| accessToken | string | 条件必填 | 访问令牌,通过 获取访问令牌 接口获取;传了 accessToken 则无需 appKey / appSecret |
| taxNumber | string | 必填 | 企业纳税人识别号,指定本次操作的开票企业;必须是该密钥已关联的企业 |
| outOrderNos | array | 必填 | 外部订单号数组 |
{
"appKey": "你的appKey",
"appSecret": "你的appSecret",
"taxNumber": "91320211MA1WML8X6T",
"outOrderNos": ["ORDER20260101001", "ORDER20260101002"]
}
{
"code": 1,
"message": "提交成功"
}
| message | 说明 |
|---|---|
| xxx订单号不存在 | 外部订单号在当前企业下不存在 |
| 非法参数 | 订单号不属于当前企业 |
按发票 ID 批量重试开票
POST
/invoice/batch-retry| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| appKey | string | 条件必填 | 服务密钥 Key,与 appSecret 成对使用;传了 accessToken 时可不传 |
| appSecret | string | 条件必填 | 服务密钥 Secret |
| accessToken | string | 条件必填 | 访问令牌,通过 获取访问令牌 接口获取;传了 accessToken 则无需 appKey / appSecret |
| taxNumber | string | 必填 | 企业纳税人识别号,指定本次操作的开票企业;必须是该密钥已关联的企业 |
| ids | array | 必填 | 发票 ID 数组;状态为放弃开票(-9)的记录会被跳过 |
{
"appKey": "你的appKey",
"appSecret": "你的appSecret",
"taxNumber": "91320211MA1WML8X6T",
"ids": [10001, 10002]
}
重试最早一张开票失败发票
GET
/invoice/retry-first取当前企业最早一张开票失败(state == -1)的发票重新开票,适合定时任务逐张重试。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| appKey | string | 条件必填 | 服务密钥 Key,与 appSecret 成对使用;传了 accessToken 时可不传 |
| appSecret | string | 条件必填 | 服务密钥 Secret |
| accessToken | string | 条件必填 | 访问令牌,通过 获取访问令牌 接口获取;传了 accessToken 则无需 appKey / appSecret |
| taxNumber | string | 必填 | 企业纳税人识别号,指定本次操作的开票企业;必须是该密钥已关联的企业 |
{
"code": 1,
"message": "已提交"
}
没有开票失败发票时返回 暂无开票失败发票。
测试环境
企业开启「是否测试环境」时,以上重试接口直接返回 提交成功,不会真正重试。
重新下载发票版式文件
GET
/invoice/{outOrderNo}/file-refresh开票成功但 PDF / OFD / XML 文件缺失或损坏时,重新从电子税务局下载版式文件,异步处理。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| outOrderNo | string | 必填 | 路径参数,外部订单号 |
| appKey | string | 条件必填 | 服务密钥 Key,与 appSecret 成对使用;传了 accessToken 时可不传 |
| appSecret | string | 条件必填 | 服务密钥 Secret |
| accessToken | string | 条件必填 | 访问令牌,通过 获取访问令牌 接口获取;传了 accessToken 则无需 appKey / appSecret |
| taxNumber | string | 必填 | 企业纳税人识别号,指定本次操作的开票企业;必须是该密钥已关联的企业 |
{
"code": 1,
"message": "已提交,稍后生效"
}
| message | 说明 |
|---|---|
| xxx订单号不存在 | 外部订单号不存在 |
| xxx发票暂无下载地址,无法刷新文件 | 该发票没有税局下载地址 |
开票中变更为开票失败
POST
/invoice/{id}/making-failure把开票中(state == 4)且确认未在电子税务局开具的申请置为开票失败,之后可修改参数重新提交。鉴权参数以表单或 Query String 方式传递。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| id | int | 必填 | 路径参数,发票 ID |
| appKey | string | 条件必填 | 服务密钥 Key,与 appSecret 成对使用;传了 accessToken 时可不传 |
| appSecret | string | 条件必填 | 服务密钥 Secret |
| accessToken | string | 条件必填 | 访问令牌,通过 获取访问令牌 接口获取;传了 accessToken 则无需 appKey / appSecret |
| taxNumber | string | 必填 | 企业纳税人识别号,指定本次操作的开票企业;必须是该密钥已关联的企业 |
curl -X POST "https://fapiao-api.easyapi.com/invoice/10001/making-failure?appKey=你的appKey&appSecret=你的appSecret&taxNumber=91320211MA1WML8X6T"
{
"code": 1,
"message": "变更成功"
}
变更后会按 回调通知 规则推送一条「开票失败」通知,failMsg 为 开票中发票主动变更为开票失败。
| message | 说明 |
|---|---|
| 非法发票ID参数 | 发票不属于当前企业 |
| 只允许开票中发票变更为开票失败 | 发票状态不是 4 |
| 助手在线,发票即将开具不能重置为开票失败 | 发票已进入开票队列且助手在线 |
| 正在开票中,无法取消 / 当前发票正在开票中,请稍后再试 | 发票正在电子税务局开具 |
测试发票变更为开票失败
POST
/invoice/{id}/test-failure仅用于联调:把测试环境开具的发票(审核中或开票成功)改为开票失败,并触发一次「开票失败」回调,便于验证失败回调处理逻辑。正式发票不允许调用。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| id | int | 必填 | 路径参数,发票 ID |
| appKey | string | 条件必填 | 服务密钥 Key,与 appSecret 成对使用;传了 accessToken 时可不传 |
| appSecret | string | 条件必填 | 服务密钥 Secret |
| accessToken | string | 条件必填 | 访问令牌,通过 获取访问令牌 接口获取;传了 accessToken 则无需 appKey / appSecret |
| taxNumber | string | 必填 | 企业纳税人识别号,指定本次操作的开票企业;必须是该密钥已关联的企业 |
| message | 说明 |
|---|---|
| 只允许审核中、开票成功发票变更为开票失败 | 发票状态不是 0 或 1 |
| 暂不支持正式环境发票主动变更为开票失败 | 发票不是测试环境开具 |