1、前言
通过发票代码、发票号码、开票日期等查验发票是否真实,支持所有种类的发票。
2、请求参数
| 名称 | 类型 | 必须 | 说明 |
|---|---|---|---|
| appId | String | 是 | 用户唯一标识,获取appId |
| timestamp | Long | 是 | 当前时间戳 |
| sign | String | 是 | 签名,详见签名算法说明 |
| fpdm | String | 否 | 发票代码 非全电发票必填 |
| fphm | String | 是 | 发票号码 |
| kprq | String | 是 | 开票日期 格式YYYYMMDD |
| jym | String | 否 | 校验码后 6 位, 增值税普通发票、增值税电子普通发票、增值税普通发票(卷式)、增值税电子普通发票(通行费)必填 |
| je | String | 否 | 增值税专用发票、增值税电子专用发票、机动车销售统一发票输入不含税金额;二手车销售统一发票输入车价合计;全电发票输入价税合计 |
3、签名算法说明
sign = sha256(appId + appSecret + timestamp)
用 appId、 appSecret,当前时间时间戳 timestamp,按上述顺序拼接成字符串,再进行 sha256 哈希得到。如下:
String appId = "xyzxy2121zxyz";
String timestamp = "1555378976238";
String appSecret = "efcefcef1121cefcefc1212121";
String str = appId + appSecret + timestamp;
String sign = sha256(str);
4、请求示例代码(java)
import com.anq.core.utils.HttpUtil;
import com.anq.core.utils.JsonUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.digest.DigestUtils;
import org.junit.Test;
import java.util.HashMap;
import java.util.Map;
@Slf4j
public class Examples {
String appId = "聚美智数分配的appId";
String appSecret = "聚美智数分配的appSecret";
String apiUrl = "https://api.jumdata.com/invoice/validate/v2";
@Test
public void examples() {
long timestamp = System.currentTimeMillis();
String sign = DigestUtils.sha256Hex(appId + appSecret + timestamp); // 生成sign
Map<String, Object> params = new HashMap<String, Object>();
params.put("appId", appId); // 聚美智数分配的appId
params.put("timestamp", timestamp);
params.put("sign", sign);
params.put("productCode", "invoice_validate_v2");// 固定值
params.put("fpdm", ""); // 发票代码 ,发票代码 非全电发票必填
params.put("fphm", ""); // 发票号码
params.put("kprq", ""); // 开票日期 ,格式YYYYMMDD
params.put("jym", ""); // 校验码后6位 ,增值税普通发票、增值税电子普通发票、增值税普通发票(卷式)、增值税电子普通发票(通行费)必填
params.put("je", ""); // 金额 ,增值税专用发票、增值税电子专用发票、机动车销售统一发票输入**不含税金额**; 二手车销售统一发票输入**车价合计**; 全电发票输入**价税合计**
// HttpUtil可从这里下载 https://file.jumdata.com/support/HttpUtil.java
String resultJson = HttpUtil.postForm(apiUrl, null, params);
log.info(resultJson);
// JumeiOpenApiResponse 可从这里下载 https://file.jumdata.com/support/JumeiOpenApiResponse.java
// JsonUtil可从这里下载 https://file.jumdata.com/support/JsonUtil.java
JumeiOpenApiResponse jumeiOpenApiResponse = JsonUtil.toObject(resultJson, JumeiOpenApiResponse.class)
if(jumeiOpenApiResponse.getCode() == 200){
//TODO
}else{
//TODO
}
}
}
5、响应示例
以增值税专用发票为例
{
"code": 200, // 返回码,详见code返回码说明
"msg": "成功", //code对应的描述
"taskNo": "12552230716560623515", // 本次唯一请求号
"charge": true, // 计费标志
"data": {
"fplx": "01", // 发票类型,详见发票类型说明
"times": 4, // 查验次数(第几次)
"xfsbh":"1522***********K01451", //销方识别号
"gfmc":"东方****有限公司", //购方名称
"gmfyhzh":"工行杭州景江苑支行 12******************36", //购买方银行账号
"xhqdBz":"N", //清单标志:发票明细中是否有清单行(Y清单 N非清单)
"dkXsfmc":"马*弟<", //代开销售方名称
"dq":"内蒙古自治区", //地区
"tspzDm": "", // 特殊票种代码,02农产品收购发票 08成品油发票
"xsfdzdh":"乌兰浩特市 1584****535", //销售方地址电话
"se":240, //税额
"kprq":"2022-01-04 00:00:00", //开票日期
"bz":"代开企业税号:15222*****71610 代开企业名称:马*弟<br/>房屋坐落地址:乌兰浩特市爱国小区*号楼", //备注
"kjlx":"2", //开具类型
"fpztDm":"0", //发票状态代码
"sbbh":"661816407119", //设备编号
"gfsbh":"91330********66XE", //购方识别号
"fpdm":"150*****60", //发票代码
"fphm":"00****89", //发票号码
"jym":"69591030500952264929", //校验码
"dkXsfsbh":"152**************610", //代开销售方识别号
"gmfdzdh":"杭州市滨江区****66号 0571-8*****34", //购买方地址电话
"xsfyhzh":"31522***********07111", //销售方银行账号
"jshj":16800, //价税合计
"jshjcn":"壹万陆仟捌佰元整", //价税合计(中文大写)
"je":16560, //金额
"xfmc":"国家税务总局乌兰浩特市税务局第一税务分局", //销方名称
"txfbz":"Y",//如果是通行费,则有该字段,Y表示该通行费可抵扣,N表示不可以抵扣 //通行费标识
"tspzDm": "86",//特殊票种,02-农产品收购;03-稀土矿产品发票;04-稀土产成品发票;05-石脑油;06-通行费可抵扣;07-通行费(不可抵扣);08-成品油发票;12-机动车; 76-报废产品收购;77-报废产品收购; 83-建筑服务; 84-货物运输服务; 85-不动产销售; 86-不动产经营租赁服务; 89-旅客运输服务; 92-自产农产品销售; 93-拖拉机按减征税; 96-农产品收购;其它为空;
"hwxx":[ //货物信息
{
"ggxh":"", //规格型号
"jldw":"套", //计量单位
"dj":"16560.00", //单价
"mxxh":1, //明细序号
"se":240, //税额
"ysse":"240", //原始税额
"mc":"房屋租赁(20220101-20221231)", //名称
"sl":"1", //数量
"je":16560, //金额
"slv":0.015, //税率
"ysslv":"1.5%", //原始税率
"spbm":"" //商品编码
}
]
}
}
5280

被折叠的 条评论
为什么被折叠?



