接口说明
开票前根据税号、分机号、票种获取下一张发票号码、代码的接⼝ 1.0版本中 1、仅支持纸票:普通发票(纸质)、收购发票(纸质)与专用发票(纸质) 且开票模式为5大单机版(全自动2.0、*全自动3.0*、全手动、全自动、电票自动)及 诺诺开票 2、支持的客户端版本:大于等于1221,小于 1300 或 等于1320 或 大于等于1410,小于 2000 或 大于等于3230,小于 4000 3、支持同一个分机号不同机器编号时有多个设备的情况 4、必须在前一张开票成功时 再请求获取下一张代码、号码,不然可能不准
API 方法名:nuonuo.OpeMplatform.getNextInvoiceCodeAndNum 版本:V2.0
请求地址
| 环境 | 请求地址 |
|---|
| 正式环境 | https://sdk.nuonuo.com/open/v1/services |
| 沙箱环境 | https://sandbox.nuonuocs.cn/open/v1/services |
公共请求参数(消息头)
| 参数名 | 类型 | 必填 | 长度 | 说明 | 示例 |
|---|
| Content-type | String | 否 | - | MIME类型【消息头】 | - |
公共请求参数(消息体)
| 参数名 | 类型 | 必填 | 长度 | 说明 | 示例 |
|---|
| senid | String | 否 | - | 唯一标识,由企业自己生成32位随机码【消息体】 | - |
私有请求参数
| 参数名 | 类型 | 必填 | 长度 | 说明 | 示例 |
|---|
| version | String | 否 | 10 | 版本号,当前版本:1.0 | 1.0 |
| appId | String | 是 | 16 | 授权来源身份ID,由服务⽅提供 | xxx |
| guid | String | 是 | 32 | 需要加密传输时使⽤,由秘钥中⼼颁发(默认有效 时间1⼩时) | xxxxxxxxxxx |
| requestTime | String | 是 | - | 请求时间;格式为:yyyyMMddHHmmss,时区 UTC+8; 服务端只接受请求时间与服务器时间间隔⼩于30分 钟内的报⽂; 如超出30分钟,则返回错误码:430 | 20200430153306 |
| requestId | String | 是 | 32 | 请求ID。同⼀appid的请求ID要求在24⼩时内唯 ⼀; 如果重复则认为是相同的请求,服务器不做业务处 理,直接返回错误码:431 | 20200430001000112321321321323112 |
| data | Object | 否 | - | 未加密的情况下为JSON格式的业务数据;加密的 情况下为加密后的数据 | - |
| └ taxNo | String | 否 | 20 | 企业税号 | 339901999999504 |
| └ extensionNum | String | 否 | 5 | 分机号 | 1 |
| └ machineCode | String | 是 | 12 | 机器编号 | 661234567891 |
| └ invoiceLine | String | 否 | 1 | 票种 c:普通发票(纸质)f:收购发票(纸 质) s:专⽤发票(纸质) | c |
响应参数
| 参数名 | 类型 | 必填 | 长度 | 说明 | 示例 |
|---|
| code | String | 否 | - | 响应码 | E0000 |
| describe | String | 否 | - | 描述 | success |
| result | Object | 否 | - | 结果 | - |
| └ nextInvoiceCode | String | 否 | - | 下⼀张发票代码 | 123131342312 |
| └ nextInvoiceNum | String | 否 | - | 下⼀张发票号码 | 12313331 |
| └ invoiceLine | String | 否 | - | 发票种类 | c |
| └ remainNum | String | 否 | - | 剩余份数 | 100 |
请求报文示例
NNOpenSDK sdk = NNOpenSDK.getIntance();
String taxnum = "23***789"; // 授权企业税号
String appKey = "Hn***XL";
String appSecret = "F65***65F";
String method = "nuonuo.OpeMplatform.getNextInvoiceCodeAndNum"; // API方法名
String token = "2d484e**************pdui"; // 访问令牌
String content = "{
\"requestTime\": \"20200430153306\",
\"data\": {
\"machineCode\": \"661234567891\",
\"invoiceLine\": \"c\",
\"taxNo\": \"339901999999504\",
\"extensionNum\": \"1\"
},
\"requestId\": \"20200430001000112321321321323112\",
\"appId\": \"xxx\",
\"guid\": \"xxxxxxxxxxx\",
\"version\": \"1.0\"
}";
String url = "https://sdk.nuonuo.com/open/v1/services"; // SDK请求地址
String senid = UUID.randomUUID().toString().replace("-", ""); // 唯一标识,32位随机码,无需修改,保持默认即可
String result = sdk.sendPostSyncRequest(url, senid, appKey, appSecret, token, taxnum, method, content);
System.out.println(result);
响应报文示例
{
"code": "响应码",
"describe": "success",
"result": {
"nextInvoiceCode": "下⼀张发票代码",
"nextInvoiceNum": "下⼀张发票号码"
}
}
返回码说明
| 返回码 | 说明 | 处理建议 |
|---|
E0000 | 成功 | 业务正常进行 |
E9835 | 分机配置信息不存在 | 检查开票设备中是否配置了分机号 |
E9836 | 对应票种不存在分机配置 | 检查该分机号是否支持对应的票种 |
E9837 | 同⼀个分机号和票种下不能有多个设备 | 检查开票设备中是否有相同的分机号 |
E9838 | 客户端消息资质信息不存在 | 检查企业是否有电票资质 |
E9839 | 开票设备对应版本号不⽀持 | 检查客户端的版本号是否在支持范围内 |
E9840 | 开票设备不在线 | 检查客户端是否在线 |
E9841 | 获取下⼀张发票代码号码失败 | 如描述所示 |
E9842 | 对应票种的开票服务器不⽀持 | 检查对应分机号票种的开票模式是否为单机版或诺诺开票 |