⑧ 申请反向开票退税
红冲或作废成功后为出售人退税:一次调用办完「可退税额预检 → 提交申请 → 受理结果查询」。无可退税额时直接返回预检结果不误提交。数据类接口。
属「乐企联用 · 报废产品收购(9 个业务接口)」——底层编排 乐企原子接口,你只调这一个。
接口(数据类)
POST https://openapi.kailingteck.com/api/v1/invoice/reverse/lqbiz/refund/apply
鉴权:X-App-Key + X-Timestamp(Unix 秒) + X-Sign(= sha256(appKey + 时间戳 + 报文 + appSecret))。正式 AppKey/AppSecret 请联系开灵商务或您的开灵项目经理获取,联调期可先用演示密钥。
内置能力:可退税额预检 → 申请 → 受理结果,一次调用办完 内部编排:CXTSXX → SQFXKPTS → CXBFCPTSJG
请求参数
| 参数 | 必填 | 说明 |
|---|---|---|
zrrxm | 必填 | 自然人姓名 |
sfzjhm | 必填 | 身份证件号码;sfzjlx 默认 201,gjDm 默认 156 |
khhszsf | 必填 | 开户银行所在省份行政区划代码,如 370000 山东省 |
yhzh | 必填 | 自然人银行账号(退税入账账户,须与实名一致) |
tdssqly | 选填 | 退抵税申请理由 |
返回参数(data)
| 参数 | 说明 |
|---|---|
refundable.ytssehj | 应退税税额合计(为 0 时无可退明细,不会发起申请) |
refundable.(明细list) | 逐条:zsxmDm/zspmDm 税种品目、可退税额、skssswjgDm 税款所属机关 |
apply.sqjg | 申请结果:0 成功/1 失败 |
apply.tdssqxh | 退抵税申请序号(成功时返回,续查凭据) |
apply.sbyy | 失败原因(失败时返回) |
status.tssqzt | 退税申请状态:01 审批中/02 审核不同意/03 审核同意/04 申请表作废/05 收入退还书开具中 |
status.spbtyyy | 审批不同意原因(tssqzt=02 时返回) |
hint | 处理指引 |
请求示例
{
"zrrxm": "李建国", "sfzjhm": "37061119790101001X",
"khhszsf": "370000", "yhzh": "6222020000012345678",
"tdssqly": "发票红冲,申请退还已缴税款"
}返回示例(成功)
{ "code": "CYT_00000", "msg": "success", "requestId": "cyt_xxx", "data": {
"refundable": { "ytssehj": 1760,
"list": [ { "zsxmDm": "10101", "zspmDm": "101014001", "ktse": 1760, "skssswjgDm": "13711000000" } ] },
"apply": { "sqjg": "0", "tdssqxh": "TS2026071900001" },
"status": { "tssqzt": "01" },
"hint": "退税以受理结果为准;未终态可稍后重调本接口查询"
} }返回示例(失败/业务拦截)
{ "code": "CYT_00000", "msg": "success", "data": {
"refundable": { "ytssehj": 0 },
"hint": "暂无可退税额:请先完成红冲或作废,税款缴纳成功后才会产生可退税额"
} }异常与报错
| 情形 | 含义与处理 |
|---|---|
| HTTP 200 · refundable.ytssehj=0 | 暂无可退税额:退税前置是红冲/作废成功且税款已缴——先完成红字流程(原子接口红字确认单)再来申请 |
| HTTP 502 · 申请失败(sqjg=1) | sbyy 给出原因;常见:银行账号与自然人实名不符、存在在途退税申请 |
| HTTP 200 · status.tssqzt=01 | 税务机关审批中(正常):稍后重调本接口续查,重复调用幂等 |
前端怎么用
const r = await post('/lqbiz/refund/apply', { zrrxm, sfzjhm, khhszsf, yhzh });
if (r.data.refundable.ytssehj === 0) return toast(r.data.hint); // 无可退,不误提交
// 有申请序号后轮询终态:03 同意=退款在途;02 不同意=展示 spbtyyy
pollUntil(() => post('/lqbiz/refund/apply', sameBody), d => ['02','03','04'].includes(d.status.tssqzt));