package org.example;
import com.google.gson.Gson;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import org.junit.jupiter.api.Test;
import java.io.UnsupportedEncodingException;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.text.SimpleDateFormat;
import java.util.*;
/**
* 票通Demo 用于参考报文组装和加密示例
*
* HtppUtils :post请求用的java原生的IO.net,没有考虑超时/长连接等特殊情况.使用到真正项目时最好采用项目http框架
*
* demo在json转换的时候使用了Gson,单元测试的时候使用了Junit 以下是Maven依赖有需要添加即可:
*
* com.google.code.gson
* gson
* 2.8.9
*
*
*
*
* junit
* junit
* 4.13.2
* test
*
*
*/
public class Demo {
//私钥(与发给票通的公钥为一对)
private String privateKey = "MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAIVLAoolDaE7m5oMB1ZrILHkMXMF6qmC8I/FCejz4hwBcj59H3rbtcycBEmExOJTGwexFkNgRakhqM+3uP3VybWu1GBYNmqVzggWKKzThul9VPE3+OTMlxeG4H63RsCO1//J0MoUavXMMkL3txkZBO5EtTqek182eePOV8fC3ZxpAgMBAAECgYBp4Gg3BTGrZaa2mWFmspd41lK1E/kPBrRA7vltMfPj3P47RrYvp7/js/Xv0+d0AyFQXcjaYelTbCokPMJT1nJumb2A/Cqy3yGKX3Z6QibvByBlCKK29lZkw8WVRGFIzCIXhGKdqukXf8RyqfhInqHpZ9AoY2W60bbSP6EXj/rhNQJBAL76SmpQOrnCI8Xu75di0eXBN/bE9tKsf7AgMkpFRhaU8VLbvd27U9vRWqtu67RY3sOeRMh38JZBwAIS8tp5hgcCQQCyrOS6vfXIUxKoWyvGyMyhqoLsiAdnxBKHh8tMINo0ioCbU+jc2dgPDipL0ym5nhvg5fCXZC2rvkKUltLEqq4PAkAqBf9b932EpKCkjFgyUq9nRCYhaeP6JbUPN3Z5e1bZ3zpfBjV4ViE0zJOMB6NcEvYpy2jNR/8rwRoUGsFPq8//AkAklw18RJyJuqFugsUzPznQvad0IuNJV7jnsmJqo6ur6NUvef6NA7ugUalNv9+imINjChO8HRLRQfRGk6B0D/P3AkBt54UBMtFefOLXgUdilwLdCUSw4KpbuBPw+cyWlMjcXCkj4rHoeksekyBH1GrBJkLqDMRqtVQUubuFwSzBAtlc";
//票通公钥(票通提供)
private String ptPublicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCJkx3HelhEm/U7jOCor29oHsIjCMSTyKbX5rpoAY8KDIs9mmr5Y9r+jvNJH8pK3u5gNnvleT6rQgJQW1mk0zHuPO00vy62tSA53fkSjtM+n0oC1Fkm4DRFd5qJgoP7uFQHR5OEffMjy2qIuxChY4Au0kq+6RruEgIttb7wUxy8TwIDAQAB";
//3DES秘钥(票通提供)
private final static String password = "lsBnINDxtct8HZB7KCMyhWSJ";
//请更换请求平台简称(票通提供)
private final static String platform_alias = "DEMK";
//请更换请求平台编码(票通提供)
private final static String platform_code = "11111111";
//销售方税号(测试环境票通提供,正式环境使用正式税号)
private final static String taxpayerNum = "500102201007206608";
/**
* @throws Exception
* @title: testRSAGenerate
* @description: RAS公钥私钥的生成 1024bit pkcs8格式 公钥提供给票通 私钥保留
*/
@Test
public void testRSAGenerate() throws Exception {
KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA");
keyPairGen.initialize(1024);
KeyPair keyPair = keyPairGen.generateKeyPair();
PublicKey publicKey = keyPair.getPublic();
PrivateKey privateKey = keyPair.getPrivate();
String publicKeyStr = RSAUtil.getKeyString(publicKey);
System.out.println("publicKeyString:" + publicKeyStr);
String privateKeyStr = RSAUtil.getKeyString(privateKey);
System.out.println("privateKeyString:" + privateKeyStr);
}
/**
* @title: testRealEstateRentalInvoiceBlue
* @description: 蓝票接口调用
*/
@Test
public void testInvoiceBlue() throws Exception {
String url = "http://fpkj.testnw.vpiaotong.cn/tp/openapi/invoiceBlue.pt";
Map map = new HashMap();
map.put("taxpayerNum", taxpayerNum); //销方税号
map.put("invoiceReqSerialNo", date(platform_alias));//发票请求流水号
map.put("buyerName", "购买方名称");//购买方名称
map.put("invoiceIssueKindCode", "82");//购买方名称
map.put("buyerTaxpayerNum", "XX0000000000000000");//购买方税号(非必填,个人发票传null)
map.put("remark", "扫码");//购买方税号(非必填,个人发票传null)
List