跳到正文
开灵科技 - 北京开灵科技有限公司API百宝箱

⑦ 下单(开票信息预下单)

每卖一票的下单步:把这一票的全部开票信息 + 支付信息报给工行,工行受理后返回一个页面—— 要么展示「订单已受理」、要么直接跳到支付页(视特定要素/是否实名签而定)。页面类:前端 POST → 拿 pageUrl → location.href 跳过去。

接口

POST  https://openapi.kailingteck.com/api/v1/icbc/order/pre
工行:/ui/jft/ui/invoice/pre/order/V1  (页面类 · RSA2 签名 · biz_content=JSON)

鉴权:X-App-Key + X-Sign + X-Timestamp。中台注入 appId、invoiceNotifyUrl、verifiedCode、ukeyId,其余业务字段全字段原样透传给工行,不筛不改。

缴税方式:两种,由 taxPaymentMethod 决定

  • taxPaymentMethod=1 或不传 —— 企业委托扣缴(默认)。付款成功后工行自动开票 + 代扣代缴 + 把钱打给散户。
  • taxPaymentMethod=0 —— 自然人自行办理。工行不代扣,税由散户本人去办,企业只付货款。仅再生资源场景需要上送,其他场景不用传。

配套字段:iitProject(个人所得税项目)、supplementaryTax(补缴税费标志)。缴税结果可在每日缴税对账单里按「缴纳方式」字段核对。

必看:两个必输字段要成对填

specificElements(特定要素)与 buyerInvTypeCode(收购发票类型代码)是一组,填错会被税局侧退回:

农产品收购    specificElements = 16    buyerInvTypeCode = 01
报废产品收购  specificElements = 24    buyerInvTypeCode = 04

走业务层 /api/v1/rinv/invoice/create 时,只传其中一个,另一个会按上表自动推导;两个都不传按报废产品收购处理(2026-09-15 按客户确认由农产品改为报废)。原子层不做推导,传什么就是什么。

请求参数 · 顶层(工行原字段名 · 共 70 项)

工行字段必输最大长度说明
appId必输20平台商户标识(开灵自动注入,你不用传)
outOrderId必输35你侧订单号,全流程唯一;查结果、红冲都用它。payChannel 为 04/05 时长度不能超过 34
outVendorId必输40收方编号;支付渠道为 05 时上送收方自然人或子商户编号
outUserId必输20付方编号;支付渠道为 05 时上送付方子商户编号
trxChannel选输2交易渠道:01-PC / 02-移动端 / 03-H5
asynFlag选输1线上异步支付标识:0-其他 / 1-线上企网异步支付(默认) / 2-直接支付
payPhoneno选输30付款人手机号
province选输60收货方省份
city选输60收货人城市
county选输60收货人区县
email选输60收货人邮箱
phone选输30收货人电话
address选输100收货人详细地址
post选输10收货人邮编
payRem选输200付款备注,登记到交易明细;跨行交易时送到附言字段,最大 140 字符
orderRem选输140订单备注,会在页面上展示给用户看
addRemark选输140回单补充信息备注,需要打印在回单上时才传
currency必输3交易币种,人民币固定填 001
summary选输20打印到回单的摘要栏
purpose选输20打印到回单的用途栏
payJumpUrl必输200支付完成后回跳你们页面的地址(不支持传参)
invoiceNotifyUrl必输200发票状态变更通知地址。开灵自动注入我方回调地址,你不用传
invoiceJumpUrl选输200自然人确认成功后回跳的页面地址(不支持传参)
invoiceType选输2发票类型:01-增值税专用发票 / 02-普通发票。开票时必输
orderAmount必输17价税合计。整数位不超过 14 位,小数位不超过 2 位
naturalPersonName选输100收方(销售方自然人)姓名。开票时必输
cardType选输3收方身份证件类型,取值见证件类型对照表(如 201 居民身份证)。开票时必输
cardNumber选输20收方身份证件号码。开票时必输
sellerAddress选输30收方地址,填自然人销售方居住地
sellerTelephone选输20收方电话,填自然人销售方手机号。开票时必输
taxpayerNo选输20付方纳税人识别号(回收企业;特定要素为 16 农产品收购时为农产品收购企业)。开票时必输
taxpayerName选输160付方纳税人名称。开票时必输
drawerName选输200开票人。开票时必输
drawerCardType选输4开票人证件类型。开票时必输
drawerCardNumber选输30开票人证件号码。开票时必输
payeeName选输150收款人姓名
reviewerName选输75复核人姓名
specificElements必输2特定要素:16-农产品收购 / 24-报废产品收购。要与 buyerInvTypeCode 成对
areaCode选输20区域代码,填省级税务机关代码(取值见下方对照表);平台经营模式 merBusiModel 为 01-平台自营时必输。走业务层时不传会自动填后台为该客户配置的值
isSellerPersonProduct选输1Y-销售自己使用过的报废产品(报废车普票) / N-销售收购的报废产品
iitProject选输1个人所得税项目:1-财产转让所得 / 2-经营所得
buyerInvTypeCode必输2收购发票类型代码:01-农产品收购发票 / 04-报废产品收购发票
shouldTaxLocation选输11应税行为发生地,填 11 位省市级税务机关代码(如重庆 15000000000)
notes选输450备注(开票时备注)
mac选输17mac 地址。开票时必输
cpuId选输20CPU 序列号
mainboaedId选输20主板序列号(工行字段名如此拼写,原样保留)
goodsInfo必输list商品信息列表,结构见下一张表
taxPayerAccountNo选输32缴税付款账户
taxPayerBankCode选输12缴税付款开户行行号
taxPayerOrgName选输200缴税单位名称
payerName选输120付款账户户名。E 企付线上异步支付(asynFlag=1)时必输
payerAcctNum选输34付款账户。E 企付线上异步支付(asynFlag=1)时必输
isShowSellBankAcct选输1电票票面是否展示销售方银行账号:Y-展示 / N-不展示
isShowBuyBankAcct选输1票面是否展示购买方银行账号:Y-展示 / N-不展示
taxRate选输4,2★增值税税率,填「百分数的数值」不是小数:1% 填 1、3% 填 3、13% 填 13。填 0.01 会被判「增值税税率不合法」。依据:工行对 unuseReduceTaxCode 的说明原文是「增值税税率传 3 时必输」,而 3 对应 3% 征收率。开票时必输
supplementaryTax选输1补缴税费标志:Y-补缴 / N-不补缴。文档说明目前固定传 Y
unuseReduceTaxCode选输2减按征税类型代码。税率传 3 时必输;54-前期已开 3% 需红冲或重开,55-放弃减按 1% 征收
isRedo选输1是否重复下单。传 Y 时只有 appId、outOrderId 为必输项,默认 N
payChannel选输2支付渠道:01-e企付 / 02-场景结算 / 04-公对公结算 / 05-公对私结算 / 09-资金流水匹配 / 15-收款流水匹配。反向开票(企业付自然人)场景工行明确固定用 05,业务层不传时按 05 处理。注意它与 asynFlag 是两件事:payChannel 决定走哪条结算渠道,asynFlag 决定推送企业网银(1)还是直接支付(2)
verifiedCode选输30机构编码(开灵自动注入)。特定要素为 16 且支付渠道不为 05 时必输
ukeyId选输24U盾 ID(开灵自动注入)。特定要素为 16 且未换开时必输;支付渠道为 05 时非必输
isChange选输2是否换开:00-否(默认) / 01-是。仅支持特定要素 16 农产品收购的换开
outInvoiceId选输35开票请求流水号,换开时必输
loanApplyNo选输60融资申请编号
merBusiModel选输2平台经营模式:01-平台自营(默认) / 02-非平台自营 / 03-反向开票助手
isBatchSign选输1是否批量验签:0-否(默认) / 1-是
payBusinessFlag选输2支付业务标记:00-普通支付(默认) / 02-先票后款
enterpriseConfirm选输1企业确认:0 或空-自然人确认(默认) / 1-企业确认
taxPaymentMethod选输1税费缴纳方式:0-自然人自行办理 / 1 或空-企业委托扣缴(默认)。仅再生资源场景需要上送

goodsInfo · 开票明细(数组,每个商品一行)

工行字段必输最大长度说明
goodsSeqno必输5商品信息子序号,同一订单内不能重复
projectName必输300项目名称
goodsNum必输17商品总数
goodsAmt必输17商品金额(元)。整数位不超过 14 位,小数位不超过 2 位
weight选输150订单商品规格
price必输23含税单价(元),整体长度不超过 23 位
units必输10计量单位,如「个」「公斤」
taxRate选输4,2★增值税税率,填「百分数的数值」不是小数:1% 填 1、3% 填 3、13% 填 13。填 0.01 会被判「增值税税率不合法」。依据:工行对 unuseReduceTaxCode 的说明原文是「增值税税率传 3 时必输」,而 3 对应 3% 征收率。开票时必输
mergedCode选输19商品和服务税收分类合并编码。开票时必输
preferentialType选输2优惠政策标识:03-免税 / 08-按3%简易征收。特定要素为农产品收购时无需上送,再生资源也可以不送

算税靠工行/税局:你把 taxRate(税率)、mergedCode(税收分类编码)、金额传对,工行按乐企规则算税,税额从预查询(⑩)取回。中台不自算。

特定要素 · 旅客运输服务发票(specificElements 命中时才传)

工行字段必输最大长度说明
travelerCardNumber条件必输20有效身份证件号
travelDate条件必输10出行日期,格式 yyyy-MM-dd
departurePoint条件必输80旅客出发地
destination条件必输80旅客到达地
seatingClass条件必输20座位等级。火车:一等座/二等座/软席(软座、软卧)/硬席(硬座、硬卧);飞机:公务舱/头等舱/经济舱;船舶(不含旅游船):一等舱/二等舱/三等舱
transportation条件必输80交通工具类型:1飞机 2火车 3长途汽车 4公共交通 5出租车 6汽车 7船舶 9其他

不动产、建筑服务、机动车等其它特定要素的字段,工行同样按 specificElements 取值追加,透传层一律原样转发。

返回 & 页面行为

{ "code":"CYT_00000", "data":{ "pageUrl":"https://…/redirect/xxx", "mock":false } }

前端 location.href = data.pageUrl。工行页面三种走向(视特定要素/是否实名签/是否换开):

  • 农产品收购且不需实名签 → 「订单已受理」页,返回按钮跳 payJumpUrl;
  • 农产品收购且需实名签 → 自动提交表单,打开支付页;
  • isChange=01 换开 → 「换开已受理」页,返回按钮跳 payJumpUrl。

省市级税务机关代码对照表(areaCode / shouldTaxLocation 取值)

areaCode(区域代码)与 shouldTaxLocation(应税行为发生地)都填这张表里的 11 位代码。 注意这套代码不等于国标行政区划代码,不能按「重庆=50」去推,必须查表。

代码税务机关名称
11100000000北京市税务局
11200000000天津市税务局
11300000000河北省税务局
11400000000山西省税务局
11500000000内蒙古自治区税务局
12100000000辽宁省税务局
12102000000大连市税务局
12200000000吉林省税务局
12300000000黑龙江省税务局
13100000000上海市税务局
13200000000江苏省税务局
13300000000浙江省税务局
13302000000宁波市税务局
13400000000安徽省税务局
13500000000福建省税务局
13502000000厦门市税务局
13600000000江西省税务局
13700000000山东省税务局
13702000000青岛市税务局
14100000000河南省税务局
14200000000湖北省税务局
14300000000湖南省税务局
14400000000广东省税务局
14403000000深圳市税务局
14500000000广西壮族自治区税务局
14600000000海南省税务局
15000000000重庆市税务局
15100000000四川省税务局
15200000000贵州省税务局
15300000000云南省税务局
15400000000西藏自治区税务局
16100000000陕西省税务局
16200000000甘肃省税务局
16300000000青海省税务局
16400000000宁夏回族自治区税务局
16500000000新疆维吾尔自治区税务局

工行 API 平台返回码(return_code)

这是网关层的返回码,与业务是否成功是两回事——业务校验不通过时工行会在页面上给出中文提示,不走这张表。

返回码返回说明
10100000接口访问成功
-31响应请求转换失败
-30服务方响应状态错误
400011参数非法。可能是 appId 为空 / appId 非法 / 签名为空 / 应用系统时间与 API 平台时间差超限 / 时间戳非法
500018访问的 API 不存在
500020非法调用
400016app 公钥未维护
400017签名验证失败
400019授权验证失败
500031速率超限
500032并发超限
-500041代理异常
-500042代理超时
-500044网关签名失败
500043网关配置文件错误,无法读取配置
400051appId 前缀错误。沙箱测试时 appId 必须加 sandboxie_ 前缀
500052沙箱测试不支持 UI 类型的 API
500091没有管理权限
-500099网关内部异常

工行原文特别注意:返回 -500041、-500042 或其他未知异常时,切勿重复提交, 应先调对应的查询接口确认最新状态再做处理。

两点说明

  • 规格已核实到官方原文:本页「必输 / 最大长度」逐行取自工行《融e聚开票信息预下单接口V1 1.0.11》第 3、4 节规格表。此前该表缺页、只能从示例反推,现已补齐。
  • 公对公结算正向开票另有一套参数:payChannel=04 时需上送 invoiceNormal 节点(文档 4.2~4.7 节,含商品明细、车牌号集合、建筑服务明细、旅客运输明细等嵌套结构)。透传层原样转发,本页暂未展开,需要时找我们要。