Skip to content

代码示例

备注

  1. 解压方法 发票实时归集小节的最后
java
import cn.hutool.core.codec.Base64;
import cn.hutool.crypto.digest.HMac;
import cn.hutool.crypto.digest.MD5;
import cn.hutool.http.HttpRequest;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.my.mytest.utils.ZipUtil;

import java.nio.charset.StandardCharsets;
import java.time.LocalDate;

public class InvoiceServiceMain {

    private static final String APP_ID = "yourAppId";
    private static final String APP_SECRET = "yourAppSecret";
    private static final String NSRSBH = "yourNsrsbh";
    private static final String JTNSRSBH = "yourJtnsrsbh";
    private static final String URL = "yourUrl";

    public static void main(String[] args) {
        String url = URL + "S000601";

        JSONObject object = new JSONObject();
        object.put("appid", APP_ID);
        object.put("serviceid", "S000522");
        object.put("nsrsbh", NSRSBH);
        object.put("jtnsrsbh", JTNSRSBH);

        JSONObject con = new JSONObject();
        con.put("sjlx", "1");
        con.put("fplx", "81,82,83,84,85,86,08,10,01,04,03,15,11,14,61,51");
        con.put("fpzt", "01,02,03,04");
        con.put("kprqq", LocalDate.now().minusMonths(11).withDayOfMonth(1).toString());
        con.put("kprqz", LocalDate.now().minusMonths(1).withDayOfMonth(LocalDate.now().minusMonths(1).lengthOfMonth()).toString());
        con.put("iszip", "1");
        object.put("con", con);

        String contentJson = JSON.toJSONString(con);
        String contentBase64 = Base64.encode(contentJson);

        String signType = "1"; // 或者 "0"
        String signature;

        if ("0".equals(signType)) {
            String toSign = String.format("appid=%s&content=%s&jtnsrsbh=%s&nsrsbh=%s&serviceid=%s",
                    object.get("appid"), contentBase64, object.get("jtnsrsbh"), object.get("nsrsbh"), object.get("serviceid"));
            HMac hMac = new HMac("HmacSHA256", APP_SECRET.getBytes(StandardCharsets.UTF_8));
            signature = Base64.encode(hMac.digest(toSign));
        } else {
            String toSign = object.get("appid") + APP_SECRET + contentBase64 + object.get("jtnsrsbh") + object.get("nsrsbh") + object.get("serviceid");
            signature = MD5.create().digestHex(toSign).toUpperCase();
        }

        HttpRequest form = HttpRequest.post(url)
                .header("Content-Type", "application/x-www-form-urlencoded")
                .form("appid", object.get("appid"))
                .form("serviceid", object.get("serviceid"))
                .form("nsrsbh", object.get("nsrsbh"))
                .form("jtnsrsbh", object.get("jtnsrsbh"))
                .form("content", contentBase64)
                .form("signature", signature)
                .form("signType", signType);

        System.out.println("Request: " + form.toString());
        String response = form.execute().body();

        System.out.println("Response: " + response);

        JSONObject jsonObject = JSON.parseObject(response);
        String respContent = jsonObject.getString("content");
        System.out.println("解压后内容: " + ZipUtil.unzipDecode(respContent, "1".equals(con.get("iszip"))));
    }
}