diff --git a/.gitignore b/.gitignore
index 34a5a1c..eb69bff 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,3 +2,4 @@ web/node_modules/
web/dist/
log/
server/src/main/resources/dist/
+doc/票通Demo/untitled/.idea/
diff --git a/doc/票通Demo/untitled/.gitignore b/doc/票通Demo/untitled/.gitignore
new file mode 100644
index 0000000..480bdf5
--- /dev/null
+++ b/doc/票通Demo/untitled/.gitignore
@@ -0,0 +1,39 @@
+target/
+!.mvn/wrapper/maven-wrapper.jar
+!**/src/main/**/target/
+!**/src/test/**/target/
+.kotlin
+
+### IntelliJ IDEA ###
+.idea/modules.xml
+.idea/jarRepositories.xml
+.idea/compiler.xml
+.idea/libraries/
+*.iws
+*.iml
+*.ipr
+
+### Eclipse ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+
+### NetBeans ###
+/nbproject/private/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
+build/
+!**/src/main/**/build/
+!**/src/test/**/build/
+
+### VS Code ###
+.vscode/
+
+### Mac OS ###
+.DS_Store
\ No newline at end of file
diff --git a/doc/票通Demo/untitled/pom.xml b/doc/票通Demo/untitled/pom.xml
new file mode 100644
index 0000000..919d61b
--- /dev/null
+++ b/doc/票通Demo/untitled/pom.xml
@@ -0,0 +1,38 @@
+
+
+ 4.0.0
+
+ ink.snowflake
+ untitled
+ 1.0-SNAPSHOT
+
+
+ 21
+ 21
+ UTF-8
+
+
+
+
+ com.google.code.gson
+ gson
+ 2.8.9
+
+
+
+
+ junit
+ junit
+ 4.13.2
+ test
+
+
+ org.junit.jupiter
+ junit-jupiter
+ 5.14.0
+ test
+
+
+
\ No newline at end of file
diff --git a/doc/票通Demo/untitled/src/main/java/ink/snowflake/Main.java b/doc/票通Demo/untitled/src/main/java/ink/snowflake/Main.java
new file mode 100644
index 0000000..df9c72f
--- /dev/null
+++ b/doc/票通Demo/untitled/src/main/java/ink/snowflake/Main.java
@@ -0,0 +1,17 @@
+package ink.snowflake;
+
+//TIP To Run code, press or
+// click the icon in the gutter.
+public class Main {
+ public static void main(String[] args) {
+ //TIP Press with your caret at the highlighted text
+ // to see how IntelliJ IDEA suggests fixing it.
+ System.out.printf("Hello and welcome!");
+
+ for (int i = 1; i <= 5; i++) {
+ //TIP Press to start debugging your code. We have set one breakpoint
+ // for you, but you can always add more by pressing .
+ System.out.println("i = " + i);
+ }
+ }
+}
\ No newline at end of file
diff --git a/doc/票通Demo/untitled/src/test/java/Demo.java b/doc/票通Demo/untitled/src/test/java/Demo.java
new file mode 100644
index 0000000..cf7b233
--- /dev/null
+++ b/doc/票通Demo/untitled/src/test/java/Demo.java
@@ -0,0 +1,824 @@
+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