金蝶发票云(Java)
企业开通金蝶发票云
- 金蝶发票云
获取clint_id和client_secret
注册后通过金蝶云查询
或者查看注册邮件内容
发票云产品 | 序列号 | CDKEY | 税号 | 企业名称 | 税盘号UKey | 分盘 | client_id | client_secret | encrypt_key |
---|---|---|---|---|---|---|---|---|---|
······ | ······ | ······ | ······ | ······ | ······ | ······ | ······ | ······ | ······ |
金蝶发票云准备
- 金蝶发票云开发者文档
- 准备企业金税盘
- 前往金蝶发票云下载中心下载并安装“金蝶发票管理”
- 前往金蝶发票云下载中心下载并安装“航信开票软件”
- 插入企业金税盘后启动“金蝶发票管理”
Java测试代码
Maven依赖
org.springframework
spring-web
5.3.4
com.alibaba
fastjson
1.2.75
junit
junit
4.13.1
compile
KingdeeTaxHttp
package tax.http;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.ResponseEntity;
import org.springframework.web.client.RestTemplate;
/**
* @author songjh
* @date 2021.06.10
* @description 金蝶发票云Http调用工具
*/
public class KingdeeTaxHttp {
/**
* 金蝶发票云接口地址
*/
private final static String httpUrl = "https://wss.piaozone.com/bill-websocket/invoicewebsocket/push?name=";
/**
* 金蝶发票云授权ID
*/
private final static String clientID = "client_id";
/**
* 金蝶发票云授权信息
*/
private final static String clientSecret = "client_secret";
/**
* 金蝶发票云金税盘号12-3456789101112 去掉横线
*/
private final static String uKey = "123456789101112";
/**
* 金蝶发票云请求方法
* @param params
* @return
*/
public static ResponseEntity http(JSONObject params){
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.add("Content-Type", "application/json");
JSONObject sfrz = new JSONObject();
sfrz.put("client_id",clientID);
sfrz.put("client_secret",clientSecret);
params.put("sfrz",sfrz);
HttpEntity httpEntity = new HttpEntity(JSON.toJSONString(params),httpHeaders);
RestTemplate restTemplate = new RestTemplate();
ResponseEntity responseEntity = restTemplate.exchange(httpUrl+clientSecret+uKey, HttpMethod.POST, httpEntity, String.class);
return responseEntity;
}
}
发票开具
获取税盘信息 getTaxDisc()
/**
* 获取税盘信息
*/
@Test
public static Map getTaxDisc(){
JSONObject params = new JSONObject();
params.put("czlx","7");
/**
* KingdeeTaxHttp 来源上一步
*/
ResponseEntity responseEntity = KingdeeTaxHttp.http(params);
if(responseEntity.getStatusCodeValue()==200) {
Map data = (Map) JSON.parse(responseEntity.getBody());
Map sjd = (Map) data.get("sjd");
String qymc = (String)sjd.get("qymc");
String qynsrsbh = (String)sjd.get("qynsrsbh");
String qydzdh = (String)sjd.get("qydzdh");
String qykhhjzh = (String)sjd.get("qykhhjzh");
/**
* 获取税盘后能得到企业名称和企业纳税人识别号,但是企业地址电话和企业银行及账号有可能为空。
*/
if(qydzdh.equals("")){
qydzdh = "企业地址 企业座机";
}
if(qykhhjzh.equals("")){
qykhhjzh = "开户行 账户";
}
Map result = new HashMap<>();
result.put("qymc",qymc); //企业名称
result.put("qynsrsbh",qynsrsbh); //企业纳税人识别号
result.put("qydzdh",qydzdh); //企业地址电话
result.put("qykhhjzh",qykhhjzh); //企业银行及账号
result.put("zyfpdm",(String)sjd.get("zyfpdm")); //专用发票代码
result.put("zyfphm",(String)sjd.get("zyfphm")); //专用发票号码
result.put("zyfpkpxe",(String)sjd.get("zyfpkpxe")); //专用发票开票限额
result.put("zyfpsyfs",(String)sjd.get("zyfpsyfs")); //专用发票剩余份数
return result;
}
return null;
}
开具发票
/**
* 开具发票
*/
@Test
public static void issueInvoice(){
Map taxDisc = getTaxDisc();
if(taxDisc==null||taxDisc.get("zyfpsyfs").equals("0")){
return;
}
JSONObject params = new JSONObject();
params.put("czlx","3");
JSONObject sjd = new JSONObject();
//发票请求流水号:Kingdee+时间戳(共20位) 相同流水号将返回上一次的开票结果
sjd.put("fpqqlsh","Kingdee"+System.currentTimeMillis());
//单据编号 可为空 当fpqqlsh20位时 返回值ddj = fpqqlsh
sjd.put("ddj","Kingdee"+System.currentTimeMillis());
//开票种类 0:专用发票; 2:普通发票; 41:卷式发票; 51:电子发票; 61:电子专用发票
sjd.put("kpzl","0");
//开票类型 0:蓝字发票; 1:红字发票
sjd.put("kplx","0");
//清单标志 0:非清单开具; 1:清单开具
sjd.put("qdbz","0");
// sjd.put("yfpdm",taxDisc.get("zyfpdm"));原发票代码 可为空
// sjd.put("yfphm",taxDisc.get("zyfphm"));//原发票号码 可为空
sjd.put("xhf_mc",taxDisc.get("qymc"));//销货方名称
sjd.put("xhf_nsrsbh",taxDisc.get("qynsrsbh"));//销货方纳税人识别号
sjd.put("xhf_dzdh",taxDisc.get("qydzdh"));//销货方地址电话
sjd.put("xhf_yhzh",taxDisc.get("qykhhjzh"));//销货方银行账户
sjd.put("ghf_mc","购货方名称");//购货方名称
sjd.put("ghf_nsrsbh","购货方纳税人识别号");//购货方纳税人识别号
sjd.put("ghf_dzdh","购货方地址电话");//购货方地址电话
sjd.put("ghf_yhzh","购货方银行账户");//购货方银行账户
// sjd.put("ghf_openid","");购货方微信openid用于推送微信消息 可为空
// sjd.put("ghf_sj","购货方手机号");购货方手机号 用于发送短信通知 可为空
// sjd.put("ghf_email","");购货方邮箱地址 用于发送邮件 可为空
// sjd.put("bz","");备注 可为空
sjd.put("kpy","开票人");//开票人
sjd.put("sky","收款人");//收款人 可为空
sjd.put("fhr","复核人");//复核人 可为空
sjd.put("kphjse","0.6");//开票合计税额
sjd.put("hjbhsje","9.4");//开票合计金额(不含税)
sjd.put("jshjje","10");//价税合计金额
sjd.put("hsbz","1");//含税标识 0:不含税; 1:含税;
sjd.put("sgfp","");//特殊票种标识 可为空 1:农产品销售; 2:农产品收购; 8:成品油; 11:卷烟类; 18:机动车
List items = new ArrayList<>();//发票明细信息
JSONObject item = new JSONObject();//发票明细行信息
item.put("sm","");//税目 可为空
item.put("xmlx","");//项目类型 可为空 0:正常行(默认); 1:折扣行; 2:被折扣行
item.put("xmmc","项目名称");//项目名称
item.put("xmdw","");//项目单位 可为空
item.put("ggxh","1.0");//规格型号 可为空
item.put("xmsl","1");//项目数量 可为空
item.put("xmdj","10");//项目单价 可为空
item.put("sl","6");//税率 (整数 如17%即为17)
item.put("xmje","10");//项目金额
item.put("se","0.6");//税额
JSONObject taxcode = new JSONObject(); //税收分类编码
taxcode.put("kce","");//扣除额 可为空
taxcode.put("lslbs","");//零税率标识 可为空
taxcode.put("qyzbm","");//企业自编码 可为空
taxcode.put("ssflbm","1060301010100000000");//税收分类编码
taxcode.put("ssyhzc","1");//税收优惠政策 0:不享受优惠政策; 1:享受优惠政策;
taxcode.put("ssyhzcnr","超税负3%即征即退");//税收优惠政策内容 可为空 当ssyhzc为1时 必填
item.put("taxcode",taxcode);
items.add(item);
sjd.put("items",items);
params.put("sjd",sjd);
ResponseEntity responseEntity = KingdeeTaxHttp.http(params);
if(responseEntity.getStatusCodeValue()==200) {
/*
返回值
{
"business_id":"",
"ddh":"Kingdee1623401252580",
"description":"开具成功",
"device_info":{
"card_no":"123456789100",
"subid":0,
"taxcode":"12345678910111213"
},
"errcode":"0",
"is_duplicate":false,
"lists":[
{
"description":"开具成功",
"errcode":"4011",
"fpdm":"12345678910",
"fphm":"12345678",
"hjbhsje":"9.40",
"jshjje":"10.00",
"jym":"",
"kphjse":"0.60",
"kprq":"2021-06-11 17:28:12",
"pdfurl":"",
"qdbz":"0"
}
]
}
*/
}
}
}
其他
- 金蝶发票云文档比较全,其他功能请查阅金蝶发票云开发者文档