3. SmartHR-Bibliothek kiji wird verwendet, um e-Gov (Ausführung der Ausführungsumgebung) auszuführen.

kiji ist eine in SmartHR integrierte Bibliothek, die auf GitHub veröffentlicht wird. Diese Bibliothek ist ein in Ruby erstelltes OSS und kann von jedem bezogen, geändert und weitergegeben werden. SmartHR kiji

Hier entwickeln wir einen Treiber, der kiji aufruft, um eine signierte XML zu generieren.

1. 1. Kiji-Ordnerstruktur

Laden Sie kiji von GitHub herunter. Die Ordnerstruktur ist wie folgt.

kiji-Hauptordnerstruktur


kiji-master/
        ├ bin/
        ├ lib/         #Komplette Entwicklungsquelle
        │  └ kiji/
        └ spec/        #Komplette Testumgebung

Es gibt eine Reihe von Entwicklungsquellen in lib direkt unter kiji-master und eine Reihe von Testumgebungen in spec. Sie können die Versionen anderer Gem-Pakete überprüfen, von denen Kiji abhängt, indem Sie die Datei kiji.gemspec direkt unter kiji-master überprüfen.

Wie ich später erklären werde, habe ich Kiji in meiner lokalen Umgebung erstellt, da ich einige der Entwicklungsquellen ändern musste. Da die Dateiliste von GitHub aus den spec.files von kiji.gemspec abgerufen werden sollte, wurde sie so geändert, dass sie aus dem lokalen Ordner abgerufen werden kann.

Die Entwicklungsquelle in lib ist unten gezeigt.

lib Ordnerstruktur


lib/
  ├ kiji.rb
  └ kiji/
       ├ access.rb
       ├ api.rb
       ├ authentication.rb
       ├ client.rb
       ├ digester.rb
       ├ signer.rb
       ├ version.rb
       └ zipper.rb

Wenn Sie kiji.rb überprüfen, können Sie sehen, dass die Anwendung version.rb, client.rb und zipper.rb direkt auffüllt.

kiji.rb


require 'kiji/version.rb'
require 'kiji/client.rb'
require 'kiji/zipper.rb'

2. Über die Struktur von Kiji

Kiji besteht aus 4 Klassen und 2 Modulen.

Struktur von Kiji


module kiji
  ├ class Zipper             #Zum Zip-Datei härten
  ├ class Client             # e-An die externe Linkage-API von Gov senden
  ├ class Signer             #Erstellen Sie eine signierte XML
  ├ class Digester           #Erstellung digitaler Signaturen
  ├ module Authentication    #Dienstprogramme zur Authentifizierung
  └ module Access            # e-Regierungsbezogene Versorgungsunternehmen

In der Hierarchie der vier Klassen stehen die Klassen Zipper und Client an der Spitze, gefolgt von den Klassen Signer und Digester. Wenn Sie es in ein Klassendiagramm schreiben, sieht es wie folgt aus. kijiクラス関連図.png

Um e-Gov elektronisch zu beantragen, gehen Sie wie folgt vor.

① Erstellen Sie eine signierte XML (2) Konsolidieren Sie signierte XML-Dateien, angehängte Dateien usw. in einer Zip-Datei ③ Codieren Sie die Zip-Datei in das Base64-Format und speichern Sie sie in den Übertragungsdaten ④ Senden nach Einstellung ③ im http-Anforderungshauptteil der externen Verknüpfungs-API von e-Gov

Die Klasse Zipper hat die Funktionen von ①② und die Klasse Client hat die Funktionen von ③④.

Dieses Mal habe ich beschlossen, die Klasse Zipper zu verwenden, um ①② auszuführen, und den Befehl curl zu verwenden, um sie an e-Gov zu senden. Hiermit überprüfen Sie den Inhalt der signierten XML-Datei und die Antwort von e-Gov.

3. 3. Behebung von Kiji aufgrund des Zeilenvorschubcodes in der Windows-Umgebung

In zipper.rb gab es bei der Berechnung des Hashwerts des Antragsformulars ein Problem beim Lesen der zu signierenden XML, und der Code wurde korrigiert.

Im ursprünglichen Code "app_doc = File.read (app_file_path)" wird xml im Textmodus gelesen, sodass der Fensterzeilen-Feedcode "\ r \ n" intern automatisch durch "\ n" ersetzt wird. Ich habe den Hash-Wert für das Ergebnis berechnet. Daher wurde es so geändert, dass es im Binärmodus liest, ohne den Zeilenvorschubcode zu ersetzen.

zipper.rb


      #Suchen Sie den Hashwert des Antragsformulars
      app_file_paths.each do |app_file_path|
-       app_doc = File.read(app_file_path)
+       f = File.open(app_file_path, "rb")
+       app_doc = f.read
        app_file_name = File.basename(app_file_path)
        signer.digest_file!(app_doc, id: app_file_name)
      end

Dies führte zur Schaffung eines lokalen Edelsteins. Nachdem ich die Spezifikationsdateien von kiji.gemspec in ein lokales Ziel geändert hatte, erstellte ich kiji und installierte es in der lokalen Umgebung.

Kiji bauen


\kiji-master>rake build
kiji 0.2.2 built to pkg/kiji-0.2.2.gem.


\kiji-master>dir pkg
2020/08/21  11:42    <DIR>          .
2020/08/21  11:42    <DIR>          ..
2020/08/16  20:54            13,312 kiji-0.2.2.gem


\kiji-master>gem install pkg\kiji-0.2.2.gem
Successfully installed kiji-0.2.2
Parsing documentation for kiji-0.2.2
Installing ri documentation for kiji-0.2.2
Done installing documentation for kiji after 0 seconds
1 gem installed

4. Bereiten Sie die Testdaten vor

Bereiten Sie die Testdaten vor, die für eine Stapelanwendung erforderlich sind. Die Testdaten umfassen das Standardformat und das individuelle Dateisignaturformat. Zu diesem Zeitpunkt sind die öffentlichen Materialien, auf die Bezug genommen wird, die Materialien, die sich auf das Testverfahren für die Verifizierungsumgebung beziehen. Die folgenden Informationen sind im öffentlichen Dokument "Liste der Verfahren für API-Tests" enthalten.

Liste der API-Testverfahren


Verfahrensinformationen
├ Prozedurkennung
├Verfahrenname (Name, der im "Prozedurnamen-Tag" des Konfigurationsverwaltungs-XML beschrieben ist)
├ Style ID
├ Name des Antragsformulars
├ Spezifikationsmuster des Antragsformulars
├ Empfangsverwaltungs-ID
├ Klassifizierung
├ Informationen zum Verfahren als Vorlage
│ ├ Prozedur-ID
│ └ Name der Prozedur
├ Verfahrensbedingungen
│ ├ Anwendungstyp
│ ├ Antragsformular (Verfahrenskennung, Antragsformularversion)
│ ├ Signieren (An- / Abwesenheit, maximale Anzahl von Signaturen)
│ ├ Angehängte Dokumente (Anwesenheit / Abwesenheit, erforderlich/Irgendein/Kann nicht angehängt werden, Dokumentname, behoben/Irgendein、書類名、送付方法)
│ ├ Übermittlungsziel (Kennung des Übermittlungsziels, Name des Übermittlungsziels, Hauptklassifizierung, mittlere Klassifizierung, Nebenklassifizierung)
│ ├ Single Style/Mehrere Stile
│ ├ So ziehen Sie sich zurück
│ ├ Mit oder ohne Dienstanfrage
│ ├ Gebührentyp
│ ├ Empfangszeit
│ ├ Stil
│ ├ Flag zum Löschen von Prozeduren
│ └ Status automatisches Übergangsziel
└ Mögliche Bearbeitung nach Ankunft
├ Rücktritt (keine, Anfrage, Antrag)
├ Änderung (keine, teilweise Änderung, Wiedervorlage, Antrag auf Änderung)
├ Ausstellung offizieller Dokumente (keine, ja)
├ Gebührenregistrierung(Zahlungsaufschub)(Keine, ja)
├ Verfahren abgeschlossen (Benachrichtigung, Rücknahme, Wiedervorlage, endgültige Erfassung offizieller Dokumente)
└ Kommentarbenachrichtigung (keine, mit Nachricht, mit Datei)

Darüber hinaus werden die folgenden Informationen für jeden neuen Antrag, jede Auszahlungsanforderung, jede Auszahlungsanwendung und jede Änderungsanwendung im öffentlichen Dokument "Liste der Verfahrensstatusübergänge für API-Tests" veröffentlicht.

Statusübergangsliste für API-Testverfahren


Statusübergangsliste
├ Prozedurkennung
├ Prozedurname
├ Betrieb / Bearbeitung für die Anwendung
│ ├ Rückzug
│ ├ Änderungsantrag
│ ├ Benachrichtigung über Kommentare
│ ├ Ausstellung offizieller Dokumente
│ └ Zahlungsstatus ändern
├ Anwendungsstatus und Aktionen
│ ├ Vorheriger Antragsstatus
│ │ ├ Zielanwendung
│ │ └ Antragsstatus (Antragsunterstatus)
│ ├ Aktion
│ │ ├ Bedienung auf der Benutzerseite
│    │   └ e-Vorhandensein oder Nichtvorhandensein einer Gov-seitigen Verarbeitung
│ └ Status nach der Bewerbung
│ ├ Zielanwendung
│ └ Bewerbungsstatus (Bewerbungsstatus)
└ Bemerkungen

Verwenden Sie diese Materialien als Referenz, um Testdaten zu erstellen, damit Sie den gewünschten Test durchführen können.

4.1 Standardformat

Die Prozedurkennung "900A010200001000" wird als Testdaten aufgenommen. Dieses Verfahren ist "Benachrichtigung über den Erwerb des Status einer versicherten Arbeitsversicherung / elektronische Bewerbung". Beigefügte Dokumente sind erforderlich und es werden keine offiziellen Dokumente ausgestellt.

Die erforderlichen Dateien lauten wie folgt. Für den Dateinamen wird die Spezifikation im öffentlichen Dokument "Externe Zusammenarbeit API-Anwendungsdatenspezifikation Allgemeine Datenspezifikation" festgelegt. Befolgen Sie daher die Regel.

No Dateikategorie Dateiname Bemerkungen
1 Konfigurationsmanagement-XML kousei.xml
2 Antragsformular XML 900A01020000100001_01.xml Formular-ID (18 alphanumerische Zeichen halber Breite) + "_01 "behoben
3 Anhang Angehängte Datei.docx

Diese Dateien befinden sich in der folgenden Hierarchie.

Dateihierarchie


kousei.xml
      ├ 900A01020000100001_01.xml
└ Angehängte Datei.docx

Die für das Konfigurationsverwaltungs-XML (kousei.xml) erforderlichen Informationen lauten wie folgt.

No Artikel Inhalt Bemerkungen
1 Prozedur-ID 900A010200001000
2 Prozedurname API-Testverfahren (arbeitsversicherungsbezogenes Verfahren) (Mitteilung) 0001 / API-Testverfahren (arbeitsversicherungsbezogenes Verfahren) (Mitteilung) 0001
3 900A01020000100001
4
5 0001
6 Formular-ID Antragsformular Formularname API-Testverfahren (arbeitsversicherungsbezogenes Verfahren) (Kommunikation) 0001_01 Muster des Antragsformulars Spezifikation des Antragsformulars XML-Strukturdefinition [API-Testverfahren] Muster Empfangsverwaltungsagentur-ID 100900

Die Bedingungen für das in der XML-Konfigurationsverwaltung (kousei.xml) beschriebene Verfahren lauten wie folgt.

No Artikel Inhalt Bemerkungen
1 Anwendungstyp Normale Anwendung
2 Anmeldeformular-Verfahrenskennung (Antragsformular) 900A010200001000
3 Anmeldeformular-Version des Antragsformulars 0003
4 Unterschrift-Anwesenheit oder Abwesenheit Unterschriftあり(単署)
5 Unterschrift-Maximale Anzahl von Signaturen 1
6 Anhang-Anwesenheit oder Abwesenheit Ja
7 Anhang-Verpflichtend/Irgendein Verpflichtend
8 Anhang-Dokumentname behoben/Irgendein Dokumentname behoben Nennen Sie das Dokument "Test Anhang 1"
9 Anhang-Dokumentname Testanhang 1
10 Anhang-Versandart Anhang
11 Einreichungsziel-Übermittlungskennung 900API00000000001001001
12 Einreichungsziel-Name der Einreichung Ministerium für innere Angelegenheiten und Kommunikation,Verwaltungsverwaltungsbüro,API

Betten Sie diese Informationen in das Tag des Konfigurationsverwaltungs-XML (kousei.xml) ein.

kousei.xml


<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="999000000000000001.xsl" type="text/xsl"?>
<DataRoot>
  <Formular-ID>999000000000000001</Formular-ID>
  <Style-Version>0001</Style-Version>
  <STYLESHEET>999000000000000001.xsl</STYLESHEET>
  <Konfigurationsinformations-ID="Konfigurationsinformationen">
    <Verwaltungsinformationen>
      <Verfahrensnummer>
        <ID der Empfangsverwaltung>100900</ID der Empfangsverwaltung>
        <Prozedur-ID>900A010200001000</Prozedur-ID>
      </Verfahrensnummer>
      <Prozedurname>API-Testverfahren (arbeitsversicherungsbezogenes Verfahren) (Mitteilung) 0001 / API-Testverfahren (arbeitsversicherungsbezogenes Verfahren) (Mitteilung) 0001</Prozedurname>
      <Erste Empfangsnummer/>
      <Anwendungstyp>Neue Bewerbung</Anwendungstyp>
      <Kontaktinformationen des Antragstellers>
        <Bewerbungsinformation>
          <Vollständiger Name>Hoge Hoge</Vollständiger Name>
          <Nennen Sie Frigana>Vorgeben, Gana</Nennen Sie Frigana>
          <Position/>
          <Name der Unternehmensorganisation/>
          <Name der Unternehmensorganisation Frigana/>
          <Abteilungsname/>
          <Abteilungsname Frigana/>
          <Postleitzahl>1200001</Postleitzahl>
          <Adresse>Oyada, Adachi-ku, Tokio</Adresse>
          <Adresse Frigana>Tokio Adachiku Oyata</Adresse Frigana>
          <Telefonnummer>12-232-1232</Telefonnummer>
          <Faxnummer/>
          <E-Mail-Addresse>[email protected]</E-Mail-Addresse>
        </Bewerbungsinformation>
        <Kontaktinformation>
          <Vollständiger Name>chinesische Charaktere</Vollständiger Name>
          <Nennen Sie Frigana>Vorgeben, Gana</Nennen Sie Frigana>
          <Position/>
          <Name der Unternehmensorganisation/>
          <Name der Unternehmensorganisation Frigana/>
          <Abteilungsname/>
          <Abteilungsname Frigana/>
          <Postleitzahl>1200001</Postleitzahl>
          <Adresse>Oyada, Adachi-ku, Tokio</Adresse>
          <Adresse Frigana>Tokio Adachiku Oyata</Adresse Frigana>
          <Telefonnummer>12-232-1232</Telefonnummer>
          <Faxnummer/>
          <E-Mail-Addresse>[email protected]</E-Mail-Addresse>
        </Kontaktinformation>
        <Informationen zum Registrierungsschein für die Delegation sind beigefügt>
          <Ausgabe Nummer/>
          <Name des Registrierungsregistrierungsformulars/>
          <Dateiname des Registrierungsregistrierungsbelegs/>
        </Informationen zum Registrierungsschein für die Delegation sind beigefügt>
      </Kontaktinformationen des Antragstellers>
    </Verwaltungsinformationen>
    <Angehängte Dokumentattributinformationen>
      <Art des Anhangs>Anhang</Art des Anhangs>
      <Angehängter Dokumentname>Testanhang 1</Angehängter Dokumentname>
      <Name der angehängten Dokumentdatei>Angehängte Datei.docx</Name der angehängten Dokumentdatei>
      <Einreichungsinformationen>1</Einreichungsinformationen>
    </Angehängte Dokumentattributinformationen>
    <Gebühreninformationen>
      <Gebühr 1>
        <Gebührenkennung/>
        <Abgekürzter Betreffcode/>
        <Kurzname des Subjekts/>
        <Geldbetrag überweisen/>
      </Gebühr 1>
      <Gebühr 2>
        <Gebührenkennung/>
        <Abgekürzter Betreffcode/>
        <Kurzname des Subjekts/>
        <Geldbetrag überweisen/>
      </Gebühr 2>
      <Gebühr 3>
        <Gebührenkennung/>
        <Abgekürzter Betreffcode/>
        <Kurzname des Subjekts/>
        <Geldbetrag überweisen/>
      </Gebühr 3>
      <Gebühr 4>
        <Gebührenkennung/>
        <Abgekürzter Betreffcode/>
        <Kurzname des Subjekts/>
        <Geldbetrag überweisen/>
      </Gebühr 4>
      <Gebühr 5>
        <Gebührenkennung/>
        <Abgekürzter Betreffcode/>
        <Kurzname des Subjekts/>
        <Geldbetrag überweisen/>
      </Gebühr 5>
      <Gebühr 6>
        <Gebührenkennung/>
        <Abgekürzter Betreffcode/>
        <Kurzname des Subjekts/>
        <Geldbetrag überweisen/>
      </Gebühr 6>
    </Gebühreninformationen>
    <Kommunikationsspalte/>
    <Informationen zur Untersuchung des Ministeriums>
      <Untersuchung des Ministeriums 1>
        <Informationsetikett für Anfragen des Ministeriums/>
        <Informationen zur Untersuchung des Ministeriums/>
      </Untersuchung des Ministeriums 1>
      <Untersuchung des Ministeriums 2>
        <Informationsetikett für Anfragen des Ministeriums/>
        <Informationen zur Untersuchung des Ministeriums/>
      </Untersuchung des Ministeriums 2>
      <Untersuchung des Ministeriums 3>
        <Informationsetikett für Anfragen des Ministeriums/>
        <Informationen zur Untersuchung des Ministeriums/>
      </Untersuchung des Ministeriums 3>
      <Untersuchung des Ministeriums 4>
        <Informationsetikett für Anfragen des Ministeriums/>
        <Informationen zur Untersuchung des Ministeriums/>
      </Untersuchung des Ministeriums 4>
      <Untersuchung des Ministeriums 5>
        <Informationsetikett für Anfragen des Ministeriums/>
        <Informationen zur Untersuchung des Ministeriums/>
      </Untersuchung des Ministeriums 5>
      <Untersuchung des Ministeriums 6>
        <Informationsetikett für Anfragen des Ministeriums/>
        <Informationen zur Untersuchung des Ministeriums/>
      </Untersuchung des Ministeriums 6>
      <Untersuchung des Ministeriums 7>
        <Informationsetikett für Anfragen des Ministeriums/>
        <Informationen zur Untersuchung des Ministeriums/>
      </Untersuchung des Ministeriums 7>
      <Untersuchung des Ministeriums 8>
        <Informationsetikett für Anfragen des Ministeriums/>
        <Informationen zur Untersuchung des Ministeriums/>
      </Untersuchung des Ministeriums 8>
      <Untersuchung des Ministeriums 9>
        <Informationsetikett für Anfragen des Ministeriums/>
        <Informationen zur Untersuchung des Ministeriums/>
      </Untersuchung des Ministeriums 9>
      <Untersuchung des Ministeriums 10>
        <Informationsetikett für Anfragen des Ministeriums/>
        <Informationen zur Untersuchung des Ministeriums/>
      </Untersuchung des Ministeriums 10>
    </Informationen zur Untersuchung des Ministeriums>
    <Einreichungsinformationen>
      <Übermittlungskennung>900API00000000001001001</Übermittlungskennung>
      <Name der Einreichung>Ministerium für innere Angelegenheiten und Kommunikation,Verwaltungsverwaltungsbüro,API</Name der Einreichung>
    </Einreichungsinformationen>
  <Attributinformationen zum Antragsformular><Antragsformular ID>900A01020000100001</Antragsformular ID><Version des Antragsformulars>0003</Version des Antragsformulars>
  <Name des Antragsformulars>API-Testverfahren (arbeitsversicherungsbezogenes Verfahren) (Mitteilung) 0001_01</Name des Antragsformulars><Name der Anwendungsdatei>900A01020000100001_01.xml</Name der Anwendungsdatei></Attributinformationen zum Antragsformular></Konfigurationsinformationen>
</DataRoot>

Erstellen Sie das Antragsformular XML (900A01020000100001_01.xml) wie folgt.

900A01020000100001_01.xml


<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="900A01020000100001.xsl" ?>
<DataRoot>
  <Formular-ID>900A01020000100001</Formular-ID>
  <Style-Version>0003</Style-Version>
  <STYLESHEET>900A01020000100001.xsl</STYLESHEET>
  <Formularkopie Informationen>0</Formularkopie Informationen>
  <Doctype>1</Doctype>
  <G00005-A-250045-001_1>
  <Formulartyp>13101</Formulartyp>
  <Versicherte Nummer>
    <Versicherte Nummer 4 Ziffern></Versicherte Nummer 4 Ziffern>
    <Versicherte Nummer 6 Ziffern></Versicherte Nummer 6 Ziffern>
    <Versicherte Nummer CD></Versicherte Nummer CD>
  </Versicherte Nummer>
  <Erhalten>1</Erhalten>
  <Versicherten Name>Degen Ai Taro</Versicherten Name>
  <Versicherter Name Frigana>API Taro</Versicherter Name Frigana>
  <Name nach Änderung></Name nach Änderung>
  <Name nach Änderung Frigana></Name nach Änderung Frigana>
  <Sex>Mann</Sex>
  <Geburtstag>
    <Jahr>Showa</Jahr>
    <Jahr>59</Jahr>
    <Mond>5</Mond>
    <Tag>23</Tag>
  </Geburtstag>
  <Büro nummer>
    <Büronummer 4 Ziffern>1111</Büronummer 4 Ziffern>
    <Geschäftsstelle Nummer 6 Ziffern>222222</Geschäftsstelle Nummer 6 Ziffern>
    <Büronummer CD>3</Büronummer CD>
  </Büro nummer>
  <Qualifikationsdatum>
    <Jahr>Heisei</Jahr>
    <Jahr>27</Jahr>
    <Mond>4</Mond>
    <Tag>9</Tag>
  </Qualifikationsdatum>
  <Grund, versichert zu werden>1</Grund, versichert zu werden>
  <Lohn>
    <Zahlungsart>1</Zahlungsart>
    <Monatliches Gehalt>500</Monatliches Gehalt>
  </Lohn>
  <Beschäftigungsstatus>7</Beschäftigungsstatus>
  <Besetzung>1</Besetzung>
  <Typklassifizierung der versicherten Person zum Zeitpunkt des Erwerbs/>
  <Sie müssen nicht nach mehreren Nummern suchen/>
  <Bereitstellung der Vertragslaufzeit>Ja</Bereitstellung der Vertragslaufzeit>
  <Gibt an, ob die Vertragslaufzeit festgelegt ist oder nicht>
    <Es gibt eine feste Vertragslaufzeit>
      <Vertragslaufzeit beginnt>
        <Jahr>Heisei</Jahr>
        <Jahr>27</Jahr>
        <Mond>4</Mond>
        <Tag>9</Tag>
      </Vertragslaufzeit beginnt>
      <Ende der Vertragslaufzeit>
        <Jahr>Heisei</Jahr>
        <Jahr>28</Jahr>
        <Mond>3</Mond>
        <Tag>31</Tag>
      </Ende der Vertragslaufzeit>
      <Bestehen einer Vertragsverlängerungsklausel>Ja</Bestehen einer Vertragsverlängerungsklausel>
    </Es gibt eine feste Vertragslaufzeit>
  </Gibt an, ob die Vertragslaufzeit festgelegt ist oder nicht>
  <Geplante Arbeitszeiten pro Woche>
    <Zeit>40</Zeit>
    <Protokoll>0</Protokoll>
  </Geplante Arbeitszeiten pro Woche>
  <Büroname>Examination Co., Ltd.</Büroname>
  <Spalte Bemerkungen_Antragsteller>
    <Staatsbürgerschaftsland/>
    <Aufenthaltsstatus/>
    <Aufenthaltsdauer>
      <Jahr/>
      <Mond/>
      <Tag/>
    </Aufenthaltsdauer>
    <Gibt an, ob eine Genehmigung für Aktivitäten außerhalb des Qualifikationsstatus vorliegt oder nicht/>
    <Vertragsarbeiter entsenden/>
    <Bemerkungen/>
  </Spalte Bemerkungen_Antragsteller>
  <Geschäftsinhaber>
    <Adresse>Tokio</Adresse>
    <Vollständiger Name>Testbesitzer</Vollständiger Name>
    <Telefonnummer>
      <Vorwahl>03</Vorwahl>
      <Postleitzahl>3030</Postleitzahl>
      <Abonnentenanzahl>3333</Abonnentenanzahl>
    </Telefonnummer>
  </Geschäftsinhaber>
  <Benachrichtigungsdatum>
    <Jahr>Heisei</Jahr>
    <Jahr>27</Jahr>
    <Mond>4</Mond>
    <Tag>1</Tag>
  </Benachrichtigungsdatum>
  <Adresse>Shinagawa</Adresse>
  <Spalte für die Eingabe von Sozialversicherungsarbeitern>
    <Erstelldatum>
      <Jahr>Heisei</Jahr>
      <Jahr></Jahr>
      <Mond></Mond>
      <Tag></Tag>
    </Erstelldatum>
    <Übermittlungsagent Anzeige des Verwaltungsagenten></Übermittlungsagent Anzeige des Verwaltungsagenten>
    <Vollständiger Name></Vollständiger Name>
    <Telefonnummer>
      <Vorwahl></Vorwahl>
      <Postleitzahl></Postleitzahl>
      <Abonnentenanzahl></Abonnentenanzahl>
    </Telefonnummer>
    <Ergänzende Spalte></Ergänzende Spalte>
  </Spalte für die Eingabe von Sozialversicherungsarbeitern>
  <Spalte Bemerkungen_Mitarbeiter>
    <Bemerkungen></Bemerkungen>
    <Datum der Benachrichtigung über die Bestätigung>
      <Jahr>Heisei</Jahr>
      <Jahr></Jahr>
      <Mond></Mond>
      <Tag></Tag>
    </Datum der Benachrichtigung über die Bestätigung>
  </Spalte Bemerkungen_Mitarbeiter>
  <Xmit>0</Xmit>
</G00005-A-250045-001_1>
</DataRoot>

Wenn Sie die Einschränkungen einhalten, z. B. ob Daten in jedem Tag weggelassen werden können, werden die Anzahl der Zeichen und der Zeichentyp, die Formatprüfung usw. problemlos bestanden. Da es sich um Testdaten handelt, ist fiktiver Inhalt in Ordnung.

4.2 Individuelles Dateisignaturformat

Die Prozedurkennung "950A102200039000" wird als Testdaten verwendet. Bei diesem Verfahren handelt es sich um "Erwerb einer nationalen Rentenversicherungsqualifikation / Typänderung / Typbestätigung (Nr. 3 der anwendbaren versicherten Person) Benachrichtigung / elektronischer Antrag". Es sind keine beigefügten Dokumente erforderlich und offizielle Dokumente werden ausgestellt.

Die erforderlichen Dateien lauten wie folgt.

No Dateikategorie Dateiname Bemerkungen
1 Konfigurationsmanagement-XML kousei.xml
2 Antragsformular XML ① 950A10220003900001_01.xml Formular-ID (18 alphanumerische Zeichen halber Breite) + "_01 "behoben
3 Konfigurationsinformationen XML für Antragsformular ① kousei20200716142110000.xml ‘kousei’+ yyyyMMddHHmmssSSS
4 Antragsformular XML② 950A10220003900002_01.xml
5 Konfigurationsinformationen XML für Antragsformular ② kousei20200716142115000.xml

"YyyyMMddHHmmssSSS" in der Konfigurationsinformation XML für das Antragsformular ist das Erstellungsdatum und die Erstellungszeit (in Hundertstelsekunden) der Datei, die hinzugefügt werden soll, um den Dateinamen im Ordner "application matter" eindeutig zu machen. Dies wird auch im öffentlichen Dokument "Externe Verknüpfungs-API-Anwendungsdatenspezifikation Allgemeine Datenspezifikation" beschrieben.

Diese Dateien haben die folgende Hierarchie.

Dateihierarchie


kousei.xml
      ├ 950A10220003900001_01.xml
      ├ kousei20200716142110000.xml
      ├ 950A10220003900002_01.xml
      └ kousei20200716142115000.xml

Der spezifische Inhalt von xml wird weggelassen.

5. Informationen zu Datenkonvertierungstools

In Zukunft wird beim Erstellen von Testdaten und Überprüfen des Vorgangs das Datenkonvertierungstool verwendet. Mit diesem Tool können Sie Hash-Werte berechnen, im Base64-Format codieren oder decodieren und die codierten oder decodierten Ergebnisse in eine Datei ausgeben. Verwenden Sie das Tool in den folgenden Fällen.

--Überprüfen Sie den vom signierten XML-Generierungstreiber berechneten Hashwert

6. Erstellen Sie einen signierten XML-Generierungstreiber

Dieses Mal erstellen wir einen signierten XML-Generierungstreiber für die Benutzerregistrierung / -authentifizierung und die Stapelanwendung. In der Stapelanwendung unterscheiden sich die zu signierenden Dateien zwischen dem Standardformat und dem einzelnen Dateisignaturformat. Erstellen Sie daher jeweils einen Treiber.

6.1 Benutzerregistrierung / -authentifizierung

Bei der Benutzerregistrierung / -authentifizierung wird der Hash-Wert für den Bereich berechnet, der vom \ -Tag von kousei.xml umgeben ist, und der Hash-Wert wird ohne Verwendung der XML-Vorlage signiert. Ist der Punkt.

Vor dem Ausführen des Tools muss die in der Anwendungsanwendung für die e-Gov-Verifizierungsumgebung angegebene Benutzer-ID in der Umgebungsvariablen "EGOV_USER_ID" festgelegt werden.

Der signierte XML-Generierungstreiber lautet:

make_register_xml.rb


require 'kiji'

egov_env = {
  "KEY" => File.expand_path("./Zertifikat/e-GovEE01_sha2.pfx"),
  "KEY_PASSWORD" => "gpkitest",
}

user_id = ENV["EGOV_USER_ID"]

pkcs12 = OpenSSL::PKCS12.new(File.open(egov_env["KEY"], "rb"),egov_env["KEY_PASSWORD"])

#Benutzer-ID festlegen
appl_data = Nokogiri::XML::Builder.new do |xml|
  xml.DataRoot {
    xml.ApplData(Id: 'ApplData') {
      xml.UserID user_id
    }
  }
end

doc = appl_data.to_xml(save_with:  0)

signer = Kiji::Signer.new(doc) do |s|
  s.cert = pkcs12.certificate
  s.private_key = pkcs12.key
  s.digest_algorithm           = :sha256
  s.signature_digest_algorithm = :sha256
end

signer.security_node = signer.document.root

#Berechnen Sie den Digest-Wert
signer.document.xpath('/DataRoot/ApplData').each do |node|
  signer.digest!(node, id: '#ApplData')
end

#Zeichen
signer.sign!(issuer_serial: true)

#Schreiben Sie in XML
File.write("register.xml", signer.to_xml)

6.2 Massenanwendung

(1) Standardformat

Im Standardformat besteht der Punkt darin, dass das Konfigurationsverwaltungs-XML zu einer signierten XML wird. Befolgen Sie die nachstehenden Schritte, um zu unterschreiben.

  1. Erstellen Sie eine Zipper-Instanz
  2. Erstellen Sie ein signiertes Konfigurationsverwaltungs-XML, indem Sie das Konfigurationsverwaltungs-XML an das erste Argument (Signaturausgabeziel) von zipper und den Dateipfad des Anwendungsformulars XML (+ angehängte Datei) an das zweite Argument (signierendes Ziel) übergeben.
  3. Konsolidieren Sie signiertes Konfigurationsmanagement-XML und Anwendungs-XML (+ angehängte Datei) in einer Zip-Format-Datei
  4. Wenn es mehrere Prozeduren gibt, wiederholen Sie 2 für jede Prozedur und führen Sie am Ende 3 aus.

Der zu erstellende Treiber ist make_zip_file_standard_format.rb. In Bezug auf die Treibereingabe / -ausgabe befindet sich ./zip_data/standard/ in dem Ordner, in dem sich der Treiber befindet, und darunter befinden sich In- und Out-Ordner.

Im Ordner in befindet sich ein Ordner 900A010200001000 (1) und die folgenden 3 Dateien. · Das ist der Grund. xml A 900A01020000100001_01.xml ・ Angehängte Datei .docx

Erstellen Sie für die Zertifikatdatei einen Zertifikatordner direkt unter dem Ordner, in dem sich der Treiber befindet, und platzieren Sie e-GovEE01_sha2.pfx darin.

Vor dem Ausführen des Treibers ist der Ordner out leer. Wenn Sie den Treiber ausführen, wird der Ordner 900A010200001000 (1), apply_data.zip, erstellt. Der Ordner 900A010200001000 (1) enthält dieselben Dateien wie der Ordner in, und kousei.xml ist hier eine signierte XML. Bei apply_data.zip handelt es sich um ein Zip-Format des Ordners 900A010200001000 (1).

Codieren Sie apply_data.zip mit dem Datenkonvertierungstool (https://hogehoge.tk/tool/) in das Base64-Format. Fügen Sie das Codierungsergebnis in das Tag \ von apply_data.xml ein, um die Anwendungsdaten zu vervollständigen, die an e-Gov gesendet werden können.

apply_data_xml.png

Nach dem Ausführen des Treibers befindet sich die Ausführungsumgebung im folgenden Status.

Standardformat Layout


Ausführungsumgebung/ 
     ├ make_zip_file_standard_format.rb
├ Zertifikat/
     │    └ e-GovEE01_sha2.pfx
     └ zip_data/
             └ standard/
                     ├ in/
                     │  └ 900A010200001000(1)/
                     │              ├ kousei.xml
                     │              ├ 900A01020000100001_01.xml
│ └ Angehängte Datei.docx
                     └ out/
                         ├ 900A010200001000(1)/
                         │          ├ kousei.xml
                         │          ├ 900A01020000100001_01.xml
│ └ Angehängte Datei.docx
                         └ apply_data.zip

Der signierte XML-Generierungstreiber lautet:

make_zip_file_standard_format.rb


require 'fileutils'
require 'zip'
require "cgi"
require 'date' 
require 'kiji'

#Datei, Passwort
Key = "./Zertifikat/e-GovEE01_sha2.pfx"
password = "gpkitest"

#Definieren Sie den Eingabe- / Ausgabezielpfad
input_base_path = "./zip_data/standard/in/"
output_base_path = "./zip_data/standard/out/"

#Definieren Sie den Dateipfad für Eingabe- / Ausgabedaten
Procedure = Struct.new(:folder, :kousei_xml, :application_xml, :attachment_file)
proc = Procedure.new("900A010200001000(1)","kousei.xml","900A01020000100001_01.xml","Angehängte Datei.docx")

input_path = "#{input_base_path}/#{proc.folder}"
output_path = "#{output_base_path}/#{proc.folder}"

signed_xml_path = "#{input_path}/#{proc.kousei_xml}"
style_file_path = "#{input_path}/#{proc.application_xml}"
attachment_file_path = "#{input_path}/#{proc.attachment_file}"
app_files_path = ["#{style_file_path}", "#{attachment_file_path}"]

#Löschen Sie den Ausgabezielordner, die Datei usw.
Dir.glob("#{output_base_path}/*") do |f|
  FileUtils.rm_r(f)
end

#Reißverschlussgeneration
pkcs12 = OpenSSL::PKCS12.new(File.open(Key, "rb"),password)
zipper = Kiji::Zipper.new() do |s|
  s.cert = pkcs12.certificate
  s.private_key = pkcs12.key
end

#Zeichen
signer = zipper.sign(signed_xml_path, app_files_path)

#Erstellen Sie einen Anwendungsordner
FileUtils.mkdir_p(output_path)

#Exportieren Sie signierte XML
File.write("#{output_path}/#{proc.kousei_xml}", signer.to_xml)

#Kopieren Sie Anwendungs-XML und angehängte Dateien
app_files_path.each do |f|
  FileUtils.cp(f, output_path)
end

#Kombinieren Sie den Ausgabeordner zu einer Zip-Datei
zipper.write_zip(output_base_path, "#{output_base_path}/apply_data.zip")

(2) Individuelles Dateisignaturformat

Im individuellen Dateisignaturformat ist der Punkt, dass "Konfigurationsinformationen XML für Anwendung ①" und "Konfigurationsinformationen XML für Anwendung ②" jeweils signierte XML sind (kousei.xml ist keine signierte XML). .. Befolgen Sie die nachstehenden Schritte, um zu unterschreiben.

  1. Erstellen Sie eine Zipper-Instanz
  2. Übergeben Sie den Dateipfad "Anwendungsformular (1) Konfigurationsinformationen XML" an das erste Argument (Signaturausgabeziel) von zipper und "Anwendungsformular (2) XML" an das zweite Argument (Signaturziel) und "Konfigurationsinformationen für Anwendungsformular (1)". Geben Sie "XML" eine Signatur
  3. Übergeben Sie den Dateipfad von "Anwendungsformular (2) XML" an das erste Argument (Signaturausgabeziel) von zipper und "Anwendungsformular (2) XML" an das zweite Argument (Signaturziel) und "Konfigurationsinformationen für Anwendung (2)". Geben Sie "XML" eine Signatur
  4. Konfigurieren Sie Konfigurationsverwaltungs-XML, Konfigurationsinformationen XML für Anwendung application, Anwendung ①XML, Konfigurationsinformationen XML für Anwendung ②, Anwendung ②XML in einer Datei im Zip-Format
  5. Wenn es mehrere Prozeduren gibt, wiederholen Sie die Schritte 2 und 3 für jede Prozedur und führen Sie schließlich 4 aus.

Der zu erstellende Treiber ist make_zip_file_individual_signature_format.rb. In Bezug auf die Treibereingabe / -ausgabe befindet sich ./zip_data/indivisual/ in dem Ordner, in dem sich der Treiber befindet, und darunter befinden sich In- und Out-Ordner. Im Ordner in befindet sich ein Ordner 950A102200039000 (1) und die folgenden 5 Dateien. ・ Kousei.xml // Konfigurationsmanagement-XML ・ 950A10220003900001_01.xml // Antragsformular XML ① ・ Kousei20200716142110000.xml // Konfigurationsinformationen XML für Anwendungs-XML ① ・ 950A10220003900002_01.xml // Antragsformular XML② ・ Kousei20200716142115000.xml // Konfigurationsinformationen XML für Anwendungs-XML②

Erstellen Sie für die Zertifikatdatei einen Zertifikatordner direkt unter dem Ordner, in dem sich der Treiber befindet, und platzieren Sie e-GovEE01_sha2.pfx darin.

Vor dem Ausführen des Treibers ist der Ordner out leer. Durch Ausführen des Treibers wird ein 950A102200039000 (1) -Ordner (apply_data.zip) erstellt. Der Ordner 950A102200039000 (1) enthält dieselben Dateien wie der Ordner in. Allerdings sind kousei20200716142110000.xml und kousei20200716142115000.xml hier mit xml signiert. Bei apply_data.zip handelt es sich um ein Zip-Format des Ordners 950A102200039000 (1).

Codieren Sie apply_data.zip mit dem Datenkonvertierungstool (https://hogehoge.tk/tool/) in das Base64-Format. Fügen Sie das Codierungsergebnis in das Tag \ von apply_data.xml ein, um die Anwendungsdaten zu vervollständigen, die an e-Gov gesendet werden können. Das Format von apply_data.xml entspricht dem Standardformat.

Nach dem Ausführen des Treibers befindet sich die Ausführungsumgebung im folgenden Status.

Layoutkonfiguration für das individuelle Dateisignaturformat


Ausführungsumgebung/
     ├ make_zip_file_individual_signature_format.rb
├ Zertifikat/
     │    └ e-GovEE01_sha2.pfx
     └ zip_data/
             └ indivisual/
                    ├ in/
                    │  └ 950A102200039000(1)/
                    │            ├ kousei.xml
                    │            ├ 950A10220003900001_01.xml
                    │            ├ kousei20200716142110000.xml
                    │            ├ 950A10220003900002_01.xml
                    │            └ kousei20200716142115000.xml
                    └ out/
                       ├ 950A102200039000(1)/
                       │         ├ kousei.xml
                       │         ├ 950A10220003900001_01.xml
                       │         ├ kousei20200716142110000.xml
                       │         ├ 950A10220003900002_01.xml
                       │         └ kousei20200716142115000.xml
                       └ apply_data.zip

Der signierte XML-Generierungstreiber lautet:

make_zip_file_individual_signature_format.rb


require 'fileutils'
require 'zip'
require "cgi"
require 'date' 
require 'kiji'

#Signaturdatei und Passwort definieren
Key = "./Zertifikat/e-GovEE01_sha2.pfx"
password = "gpkitest"

#Definieren Sie den Eingabe- / Ausgabezielpfad
input_base_path = "./zip_data/indivisual/in/"
output_base_path = "./zip_data/indivisual/out/"

#Löschen Sie den Ausgabezielordner, die Datei usw.
Dir.glob("#{output_base_path}/*") do |f|
  FileUtils.rm_r(f)
end

#Definieren Sie den Dateipfad für Eingabe- / Ausgabedaten
Procedure = Struct.new(:folder, :kousei_xml, 
                       :config_info_appl_xml, :application_xml, 
                       :config_info_appl_xml_2, :application_xml_2)
proc = Procedure.new("950A102200039000(1)","kousei.xml",
                     "kousei20200716142110000.xml","950A10220003900001_01.xml",
                     "kousei20200716142115000.xml","950A10220003900002_01.xml")

input_path = "#{input_base_path}/#{proc.folder}"
output_path = "#{output_base_path}/#{proc.folder}"

#Erstellen Sie einen Anwendungsordner
FileUtils.mkdir_p(output_path)

#Reißverschlussgeneration
pkcs12 = OpenSSL::PKCS12.new(File.open(Key, "rb"),password)
zipper = Kiji::Zipper.new() do |s|
  s.cert = pkcs12.certificate
  s.private_key = pkcs12.key
end

#Signieren Sie die Konfigurationsinformationen XML für Anwendung 1
signed_xml_path = "#{input_path}/#{proc.config_info_appl_xml}"
style_file_path = ["#{input_path}/#{proc.application_xml}"]
signer = zipper.sign(signed_xml_path, style_file_path)

#Exportieren Sie signierte XML
File.write("#{output_path}/#{proc.config_info_appl_xml}", signer.to_xml)

#Signieren Sie die Konfigurationsinformationen XML für Antragsformular 2
signed_xml_path_2 = "#{input_path}/#{proc.config_info_appl_xml_2}"
style_file_path_2 = ["#{input_path}/#{proc.application_xml_2}"]
signer = zipper.sign(signed_xml_path_2, style_file_path_2)

#Exportieren Sie signierte XML
File.write("#{output_path}/#{proc.config_info_appl_xml_2}", signer.to_xml)

#Listen Sie das zu kopierende Anwendungs-XML und die angehängten Dateien auf
copy_files_path = ["#{input_path}/#{proc.kousei_xml}", style_file_path, style_file_path_2]

#Kopieren Sie Anwendungs-XML und angehängte Dateien
copy_files_path.each do |f|
  FileUtils.cp(f, output_path)
end

#Zippen Sie die Ausgabeliste
zipper.write_zip(output_base_path, output_base_path + "apply_data.zip")

Recommended Posts

3. SmartHR-Bibliothek kiji wird verwendet, um e-Gov (Ausführung der Ausführungsumgebung) auszuführen.
Teil 1 Führen Sie e-Gov mit der SmartHR-Bibliothek kiji aus (e-Gov-Spezifikationen)
2. SmartHR-Bibliothek kiji wird verwendet, um e-Gov (öffentliche Materialien von e-Gov) auszuführen
2. SmartHR-Bibliothek kiji wird verwendet, um e-Gov (öffentliche Materialien von e-Gov) auszuführen
Teil 1 Führen Sie e-Gov mit der SmartHR-Bibliothek kiji aus (e-Gov-Spezifikationen)
3. SmartHR-Bibliothek kiji wird verwendet, um e-Gov (Ausführung der Ausführungsumgebung) auszuführen.
pynq-z1 Vom Kauf bis zur Funktionsprüfung
Tokenize mit der Hugging Face-Bibliothek
Verwenden von Chainer mit CentOS7 [Umgebungskonstruktion]
Python3.6-Umgebungskonstruktion (unter Verwendung der Win-Umgebung Anaconda)
Benachrichtigen Sie mit Notification Center, wenn die Ausführungsumgebung in Python macOS ist