金蝶发票云(Java)

金蝶发票云(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"
            }
        ]
    }
 */
        }
    }
}

其他

  • 金蝶发票云文档比较全,其他功能请查阅金蝶发票云开发者文档

你可能感兴趣的:(金蝶发票云(Java))