kiji est une bibliothèque intégrée à SmartHR et publiée sur GitHub. Cette bibliothèque est un OSS réalisé en Ruby et peut être obtenue, modifiée et redistribuée par n'importe qui. SmartHR kiji
Ici, nous développons un pilote qui appelle kiji pour générer un xml signé.
Téléchargez kiji depuis GitHub. La structure des dossiers est la suivante.
kiji-structure du dossier principal
kiji-master/
├ bin/
├ lib/ #Source de développement complète
│ └ kiji/
└ spec/ #Environnement de test complet
Il existe un ensemble de sources de développement dans lib directement sous kiji-master, et un ensemble d'environnement de test dans spec. Vous pouvez vérifier les versions des autres packages de gemmes dont dépend kiji en vérifiant le kiji.gemspec directement sous kiji-master.
Comme je l'expliquerai plus tard, j'ai construit kiji dans mon environnement local car j'avais besoin de modifier certaines des sources de développement. Puisque la liste de fichiers devait être obtenue à partir de GitHub à partir de spec.files de kiji.gemspec, elle a été modifiée pour être obtenue à partir du dossier local.
La source de développement dans lib est indiquée ci-dessous.
structure du dossier lib
lib/
├ kiji.rb
└ kiji/
├ access.rb
├ api.rb
├ authentication.rb
├ client.rb
├ digester.rb
├ signer.rb
├ version.rb
└ zipper.rb
Si vous vérifiez kiji.rb, vous pouvez voir que l'application remplit directement version.rb, client.rb et zipper.rb.
kiji.rb
require 'kiji/version.rb'
require 'kiji/client.rb'
require 'kiji/zipper.rb'
kiji se compose de 4 classes et 2 modules.
structure de kiji
module kiji
├ class Zipper #Durcir en fichier zip
├ class Client # e-Envoyer à l'API de lien externe Gov
├ class Signer #Créer un XML signé
├ class Digester #Création de signature numérique
├ module Authentication #Utilitaires liés à l'authentification
└ module Access # e-Utilitaires liés au gouvernement
En ce qui concerne la hiérarchie de quatre classes, la classe Zipper et la classe Client sont en tête, suivies par la classe Signer et la classe Digester. Si vous l'écrivez dans un diagramme de classes, ce sera comme suit.
Pour postuler à e-Gov par voie électronique, suivez la procédure ci-dessous.
① Créez un xml signé (2) Consolider le xml signé, les fichiers joints, etc. dans un fichier zip ③ Encodez le fichier zip au format Base64 et stockez-le dans les données de transmission ④ Envoyer après configuration ③ dans le corps de la requête http de l'API de liaison externe e-Gov
La classe Zipper a les fonctions de ①②, et la classe Client a les fonctions de ③④.
Cette fois, j'ai décidé d'utiliser la classe Zipper pour effectuer ①② et d'utiliser la commande curl pour envoyer à e-Gov. Il s'agit de vérifier le contenu du xml signé et la réponse d'e-Gov.
Dans zipper.rb, lors du calcul de la valeur de hachage du formulaire de candidature, un problème est survenu lors de la lecture du xml à signer et le code a été corrigé.
Dans le code d'origine "app_doc = File.read (app_file_path)", xml est lu en mode texte, de sorte que le code de saut de ligne de fenêtre "\ r \ n" est automatiquement remplacé par "\ n" en interne. Je calculais la valeur de hachage du résultat. Par conséquent, il a été modifié pour lire en mode binaire sans remplacer le code de saut de ligne.
zipper.rb
#Trouvez la valeur de hachage du formulaire de demande
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
Cela a conduit à la création d'un joyau local. Après avoir changé les fichiers spec de kiji.gemspec en destination locale, j'ai construit kiji et l'ai installé dans l'environnement local.
construction de Kiji
\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
Préparez les données de test requises lors de la création d'une application par lots. Les données de test incluent le format standard et le format de signature de fichier individuel. À l'heure actuelle, les matériaux publics auxquels il faut se référer sont les matériaux liés à la procédure d'essai de l'environnement de vérification. Les informations suivantes sont incluses dans le document public «Liste des procédures de test API».
Liste des procédures de test API
Informations sur la procédure
├ Identificateur de procédure
├Nom de la procédure (nom décrit dans la "balise de nom de procédure" du XML de gestion de la configuration)
├ ID de style
├ Nom du formulaire de candidature
├ Modèle de spécification du formulaire de demande
├ ID d'administration de la réception
├ Classification
├ Informations sur la procédure comme modèle
│ ├ Identificateur de procédure
│ └ Nom de la procédure
├ Conditions de procédure
│ ├ Type d'application
│ ├ Formulaire de candidature (identifiant de la procédure, version du formulaire de candidature)
│ ├ Signature (présence / absence, nombre maximum de signatures)
│ ├ Documents joints (présence / absence, obligatoire/Tout/Ne peut être joint, nom du document, corrigé/Tout、書類名、送付方法)
│ ├ Destination de soumission (identificateur de destination de soumission, nom de destination de soumission, classification principale, classification moyenne, classification mineure)
│ ├ Style unique/Styles multiples
│ ├ Comment se retirer
│ ├ Avec ou sans enquête ministérielle
│ ├ Type de frais
│ ├ Période de réception
│ ├ Style
│ ├ Drapeau de suppression de procédure
│ └ État cible de transition automatique
└ Traitement possible après l'arrivée
├ Retrait (aucun, demande, demande)
├ Modification (aucune, modification partielle, nouvelle soumission, demande de modification)
├ Délivrance de documents officiels (aucun, oui)
├ Inscription des frais(Paiement différé)(Aucun, Oui)
├ Procédure terminée (notification, retrait, nouvelle soumission, acquisition définitive des documents officiels)
└ Notification de commentaire (aucun, avec message, avec fichier)
En outre, les informations suivantes sont publiées pour chaque nouvelle demande, demande de retrait, demande de retrait et demande de modification dans le document public "Liste des transitions de statut de procédure pour le test API".
Liste de transition de l'état de la procédure de test API
Liste de transition de statut
├ Identificateur de procédure
├ Nom de la procédure
├ Fonctionnement / traitement pour l'application
│ ├ Retrait
│ ├ Demande de modification
│ ├ Notification de commentaire
│ ├ Délivrance des documents officiels
│ └ Modifier l'état du paiement
├ Statut et actions de l'application
│ ├ Statut antérieur de la demande
│ │ ├ Application cible
│ │ └ Statut de l'application (sous-statut de l'application)
│ ├ Action
│ │ ├ Fonctionnement côté utilisateur
│ │ └ e-Présence ou absence de traitement côté gouvernement
│ └ Statut post-candidature
│ ├ Application cible
│ └ Statut de l'application (sous-statut de l'application)
└ Remarques
Utilisez ces matériaux comme référence pour créer des données de test afin de pouvoir effectuer le test souhaité.
L'identifiant de procédure "900A010200001000" est repris comme données de test. Cette procédure est «Notification d'acquisition du statut d'assuré à l'assurance-emploi / demande électronique». Les documents joints sont requis et aucun document officiel ne sera délivré.
Les fichiers requis sont les suivants. En ce qui concerne le nom du fichier, la spécification est décidée dans le document public "Spécification de données communes de spécification de données d'application API de coopération externe", suivez donc la règle.
No | catégorie de fichier | Nom de fichier | Remarques |
---|---|---|---|
1 | Gestion de la configuration XML | kousei.xml | |
2 | Formulaire de candidature XML | 900A01020000100001_01.xml | ID du formulaire (18 caractères alphanumériques demi-largeur) + "_01 "fixe |
3 | Document attaché | Pièce jointe.docx |
Ces fichiers sont dans la hiérarchie suivante.
Hiérarchie des fichiers
kousei.xml
├ 900A01020000100001_01.xml
└ Fichier joint.docx
Les informations requises pour le XML de gestion de la configuration (kousei.xml) sont les suivantes.
No | article | Contenu | Remarques |
---|---|---|---|
1 | Identificateur de procédure | 900A010200001000 | |
2 | Nom de la procédure | Procédure de test API (procédure relative à l'assurance du travail) (communication) 0001 / Procédure de test API (procédure relative à l'assurance du travail) (communication) 0001 | Nom à décrire dans "Nom de la procédure" du XML de gestion de la configuration |
3 | ID de formulaire | 900A01020000100001 | |
4 | Nom du formulaire de demande | Procédure de test API (procédure relative à l'assurance du travail) (communication) 0001_01 | |
5 | Modèle de spécification du formulaire de demande | 0001 | Modèle dans la définition de la structure XML du formulaire de candidature [procédure de test API] |
6 | Identifiant de l'agence administrative d'accueil | 100900 |
Les conditions liées à la procédure décrite dans le XML de gestion de la configuration (kousei.xml) sont les suivantes.
No | article | Contenu | Remarques |
---|---|---|---|
1 | Type d'application | Application normale | |
2 | Formulaire de candidature-Identificateur de procédure (formulaire de demande) | 900A010200001000 | |
3 | Formulaire de candidature-Version du formulaire de demande | 0003 | |
4 | Signature-Présence ou absence | Signatureあり(単署) | |
5 | Signature-Nombre maximum de signatures | 1 | |
6 | Document attaché-Présence ou absence | Oui | |
7 | Document attaché-Obligatoire/Tout | Obligatoire | |
8 | Document attaché-Nom du document fixe/Tout | Nom du document fixe | Nommez le document "Test Attachment 1" |
9 | Document attaché-Nom du document | Pièce jointe d'essai 1 | |
10 | Document attaché-Méthode d'envoi | Attachement | |
11 | Destination de soumission-Identifiant de soumission | 900API00000000001001001 | |
12 | Destination de soumission-Nom de la soumission | Ministère des affaires intérieures et des communications,Bureau d'administration administrative,API |
Incorporez ces informations dans la balise XML de gestion de la configuration (kousei.xml).
kousei.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="999000000000000001.xsl" type="text/xsl"?>
<DataRoot>
<ID de formulaire>999000000000000001</ID de formulaire>
<Version de style>0001</Version de style>
<STYLESHEET>999000000000000001.xsl</STYLESHEET>
<ID des informations de configuration="Informations de configuration">
<Information de gestion>
<Numéro de procédure>
<Identifiant de l'agence administrative d'accueil>100900</Identifiant de l'agence administrative d'accueil>
<ID de procédure>900A010200001000</ID de procédure>
</Numéro de procédure>
<Nom de la procédure>Procédure de test API (procédure relative à l'assurance du travail) (communication) 0001 / Procédure de test API (procédure relative à l'assurance du travail) (communication) 0001</Nom de la procédure>
<Premier numéro de réception/>
<Type d'application>Nouvelle application</Type d'application>
<Coordonnées du candidat>
<Information relative aux demandeurs>
<Nom complet>Hoge Hoge</Nom complet>
<Nom Frigana>Faire semblant de Gana</Nom Frigana>
<Position/>
<Nom de l'organisation corporative/>
<Dénomination sociale Frigana/>
<Nom du département/>
<Nom du département Frigana/>
<Code postal>1200001</Code postal>
<adresse de rue>Oyada, Adachi-ku, Tokyo</adresse de rue>
<Adresse Frigana>Tokyo Adachiku Oyata</Adresse Frigana>
<numéro de téléphone>12-232-1232</numéro de téléphone>
<Numéro de fax/>
<adresse électronique>[email protected]</adresse électronique>
</Information relative aux demandeurs>
<Informations de contact>
<Nom complet>Caractères chinois</Nom complet>
<Nom Frigana>Faire semblant de Gana</Nom Frigana>
<Position/>
<Nom de l'organisation corporative/>
<Dénomination sociale Frigana/>
<Nom du département/>
<Nom du département Frigana/>
<Code postal>1200001</Code postal>
<adresse de rue>Oyada, Adachi-ku, Tokyo</adresse de rue>
<Adresse Frigana>Tokyo Adachiku Oyata</Adresse Frigana>
<numéro de téléphone>12-232-1232</numéro de téléphone>
<Numéro de fax/>
<adresse électronique>[email protected]</adresse électronique>
</Informations de contact>
<Information jointe à la fiche d'inscription de la délégation>
<numéro de série/>
<Nom du formulaire d'inscription à la délégation/>
<Nom du fichier du bordereau d'enregistrement de la délégation/>
</Fiche d'inscription de la délégation en pièce jointe>
</Coordonnées du candidat>
</Information de gestion>
<Informations d'attribut de document joint>
<Type de pièce jointe>Attachement</Type de pièce jointe>
<Nom du document joint>Pièce jointe d'essai 1</Nom du document joint>
<Nom du fichier du document joint>Pièce jointe.docx</Nom du fichier du document joint>
<Informations de soumission>1</Informations de soumission>
</Informations d'attribut de document joint>
<Informations sur les frais>
<Frais 1>
<Identifiant des frais/>
<Code sujet abrégé/>
<Nom du sujet abrégé/>
<Transférer une somme d'argent/>
</Frais 1>
<Frais 2>
<Identifiant des frais/>
<Code sujet abrégé/>
<Nom du sujet abrégé/>
<Transférer une somme d'argent/>
</Frais 2>
<Frais 3>
<Identifiant des frais/>
<Code sujet abrégé/>
<Nom du sujet abrégé/>
<Transférer une somme d'argent/>
</Frais 3>
<Frais 4>
<Identifiant des frais/>
<Code sujet abrégé/>
<Nom du sujet abrégé/>
<Transférer une somme d'argent/>
</Frais 4>
<Frais 5>
<Identifiant des frais/>
<Code sujet abrégé/>
<Nom du sujet abrégé/>
<Transférer une somme d'argent/>
</Frais 5>
<Frais 6>
<Identifiant des frais/>
<Code sujet abrégé/>
<Nom du sujet abrégé/>
<Transférer une somme d'argent/>
</Frais 6>
</Informations sur les frais>
<Colonne de communication/>
<Information d'enquête du ministère>
<Enquête ministérielle 1>
<Étiquette d'information du ministère/>
<Information d'enquête du ministère/>
</Enquête ministérielle 1>
<Enquête ministérielle 2>
<Étiquette d'information du ministère/>
<Information d'enquête du ministère/>
</Enquête ministérielle 2>
<Enquête ministérielle 3>
<Étiquette d'information du ministère/>
<Information d'enquête du ministère/>
</Enquête ministérielle 3>
<Enquête ministérielle 4>
<Étiquette d'information du ministère/>
<Information d'enquête du ministère/>
</Enquête ministérielle 4>
<Enquête ministérielle 5>
<Étiquette d'information du ministère/>
<Information d'enquête du ministère/>
</Enquête ministérielle 5>
<Enquête ministérielle 6>
<Étiquette d'information du ministère/>
<Information d'enquête du ministère/>
</Enquête ministérielle 6>
<Enquête ministérielle 7>
<Étiquette d'information du ministère/>
<Information d'enquête du ministère/>
</Enquête ministérielle 7>
<Enquête ministérielle 8>
<Étiquette d'information du ministère/>
<Information d'enquête du ministère/>
</Enquête ministérielle 8>
<Enquête ministérielle 9>
<Étiquette d'information du ministère/>
<Information d'enquête du ministère/>
</Enquête ministérielle 9>
<Enquête ministérielle 10>
<Étiquette d'information du ministère/>
<Information d'enquête du ministère/>
</Enquête ministérielle 10>
</Information d'enquête du ministère>
<Informations de soumission>
<Identifiant de soumission>900API00000000001001001</Identifiant de soumission>
<Nom de la soumission>Ministère des affaires intérieures et des communications,Bureau d'administration administrative,API</Nom de la soumission>
</Informations de soumission>
<Informations sur les attributs du formulaire de demande><ID du formulaire de demande>900A01020000100001</ID du formulaire de demande><Version du formulaire de demande>0003</Version du formulaire de demande>
<Nom du formulaire de demande>Procédure de test API (procédure relative à l'assurance du travail) (communication) 0001_01</Nom du formulaire de demande><Nom du fichier d'application>900A01020000100001_01.xml</Nom du fichier d'application></Informations sur les attributs du formulaire de demande></Informations de configuration>
</DataRoot>
Créez le formulaire de candidature XML (900A01020000100001_01.xml) comme suit.
900A01020000100001_01.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="900A01020000100001.xsl" ?>
<DataRoot>
<ID de formulaire>900A01020000100001</ID de formulaire>
<Version de style>0003</Version de style>
<STYLESHEET>900A01020000100001.xsl</STYLESHEET>
<Informations sur la copie du formulaire>0</Informations sur la copie du formulaire>
<Doctype>1</Doctype>
<G00005-A-250045-001_1>
<Type de formulaire>13101</Type de formulaire>
<Numéro assuré>
<Numéro assuré 4 chiffres></Numéro assuré 4 chiffres>
<Numéro assuré 6 chiffres></Numéro assuré 6 chiffres>
<Numéro assuré CD></Numéro assuré CD>
</Numéro assuré>
<Avoir>1</Avoir>
<Nom de l'assuré>Épée Ai Taro</Nom de l'assuré>
<Nom de l'assuré Frigana>Taro API</Nom de l'assuré Frigana>
<Nom après changement></Nom après changement>
<Nom après changement Frigana></Nom après changement Frigana>
<sexe>Homme</sexe>
<Anniversaire>
<Année>Showa</Année>
<Année>59</Année>
<Mois>5</Mois>
<journée>23</journée>
</Anniversaire>
<Numéro de bureau>
<Numéro de bureau 4 chiffres>1111</Numéro de bureau 4 chiffres>
<Numéro de bureau d'affaires 6 chiffres>222222</Numéro de bureau d'affaires 6 chiffres>
<CD du numéro de bureau>3</CD du numéro de bureau>
</Numéro de bureau>
<Date de qualification>
<Année>Heisei</Année>
<Année>27</Année>
<Mois>4</Mois>
<journée>9</journée>
</Date de qualification>
<Cause d'être assuré>1</Cause d'être assuré>
<salaire>
<Mode de paiement>1</Mode de paiement>
<Salaire mensuel>500</Salaire mensuel>
</salaire>
<Statut d'emploi>7</Statut d'emploi>
<Occupation>1</Occupation>
<Classification du type de personne assurée au moment de l'acquisition/>
<Pas besoin de vérifier plusieurs numéros/>
<Fourniture de la durée du contrat>Oui</Fourniture de la durée du contrat>
<Si la durée du contrat est définie ou non>
<Il y a une durée de contrat fixe>
<Début de la période du contrat>
<Année>Heisei</Année>
<Année>27</Année>
<Mois>4</Mois>
<journée>9</journée>
</Début de la période du contrat>
<Fin de période contractuelle>
<Année>Heisei</Année>
<Année>28</Année>
<Mois>3</Mois>
<journée>31</journée>
</Fin de période contractuelle>
<Existence d'une clause de renouvellement de contrat>Oui</Existence d'une clause de renouvellement de contrat>
</Il y a une durée de contrat fixe>
</Si la durée du contrat est définie ou non>
<Heures de travail planifiées par semaine>
<temps>40</temps>
<Minutes>0</Minutes>
</Heures de travail prévues par semaine>
<Nom du bureau>Examination Co., Ltd.</Nom du bureau>
<Colonne Remarques_Demandeur>
<Pays de citoyenneté/>
<Statut de résidence/>
<Période de séjour>
<Année/>
<Mois/>
<journée/>
</Période de séjour>
<S'il existe ou non une autorisation pour des activités en dehors du statut de qualification/>
<Dispatch travailleur contractuel/>
<Remarques/>
</Colonne Remarques_Demandeur>
<Propriétaire d'entreprise>
<adresse de rue>Tokyo</adresse de rue>
<Nom complet>Propriétaire du test</Nom complet>
<numéro de téléphone>
<Indicatif régional>03</Indicatif régional>
<Code de la ville>3030</Code de la ville>
<Numéro d'adhérant>3333</Numéro d'adhérant>
</numéro de téléphone>
</Propriétaire d'entreprise>
<Date de notification>
<Année>Heisei</Année>
<Année>27</Année>
<Mois>4</Mois>
<journée>1</journée>
</Date de notification>
<adresse>Shinagawa</adresse>
<Colonne de saisie des travailleurs de l'assurance sociale>
<Date de création>
<Année>Heisei</Année>
<Année></Année>
<Mois></Mois>
<journée></journée>
</Date de création>
<Agent de soumission Affichage de l'agent administratif></Agent de soumission Affichage de l'agent administratif>
<Nom complet></Nom complet>
<numéro de téléphone>
<Indicatif régional></Indicatif régional>
<Code de la ville></Code de la ville>
<Numéro d'adhérant></Numéro d'adhérant>
</numéro de téléphone>
<Colonne supplémentaire></Colonne supplémentaire>
</Colonne de saisie des travailleurs de l'assurance sociale>
<Colonne Remarques_Personnel>
<Remarques></Remarques>
<Date de notification de confirmation>
<Année>Heisei</Année>
<Année></Année>
<Mois></Mois>
<journée></journée>
</Date de notification de confirmation>
</Colonne Remarques_Personnel>
<Xmit>0</Xmit>
</G00005-A-250045-001_1>
</DataRoot>
Si vous respectez les restrictions quant à savoir si des données peuvent être omises dans chaque balise, le nombre de caractères, le type de caractère, etc., le contrôle de format etc. passera sans problème. Puisqu'il s'agit de données de test, le contenu fictif convient.
L'identifiant de procédure "950A102200039000" est repris comme donnée de test. Cette procédure est la suivante: «Notification d'acquisition de la qualification d'assuré national de pension / changement de type / confirmation de type (personne assurée n ° 3 applicable) / demande électronique». Aucun document joint n'est requis et des documents officiels seront délivrés.
Les fichiers requis sont les suivants.
No | catégorie de fichier | Nom de fichier | Remarques |
---|---|---|---|
1 | Gestion de la configuration XML | kousei.xml | |
2 | Formulaire de candidature XML ① | 950A10220003900001_01.xml | ID de formulaire (18 caractères alphanumériques demi-largeur) + "_01 "fixe |
3 | Informations de configuration XML pour le formulaire de candidature ① | kousei20200716142110000.xml | ‘kousei’+ yyyyMMddHHmmssSSS |
4 | Formulaire de candidature XML② | 950A10220003900002_01.xml | |
5 | Informations de configuration XML pour le formulaire de candidature ② | kousei20200716142115000.xml |
"AAaaMMjjHHmmssSSS" dans les informations de configuration XML du formulaire de candidature correspond à la date et à l'heure de création (en centièmes de seconde) du fichier ajouté pour rendre le nom de fichier unique dans le dossier du dossier de candidature. Ceci est également décrit dans le document public "External Linkage API Application Data Specification Common Data Specification".
Ces fichiers ont la hiérarchie suivante.
Hiérarchie des fichiers
kousei.xml
├ 950A10220003900001_01.xml
├ kousei20200716142110000.xml
├ 950A10220003900002_01.xml
└ kousei20200716142115000.xml
Le contenu spécifique de xml sera omis.
À l'avenir, lors de la création des données de test et de la vérification de l'opération, Outil de conversion de données sera utilisé. Avec cet outil, vous pouvez calculer les valeurs de hachage, encoder ou décoder au format Base64 et générer les résultats encodés ou décodés dans un fichier. Utilisez l'outil dans les cas suivants.
--Vérifiez la valeur de hachage calculée par le pilote de génération xml signé --Encode l'ensemble de données d'application au format Zip au format Base64 pour créer des données d'application
Cette fois, nous allons créer un pilote de génération xml signé pour l'enregistrement / l'authentification des utilisateurs et l'application par lots. Dans l'application batch, les fichiers à signer diffèrent entre le format standard et le format de signature de fichier individuel, créez donc un pilote correspondant à chacun.
Dans le cas de l'inscription / authentification de l'utilisateur, la valeur de hachage est calculée pour la plage entourée par la balise \
Avant d'exécuter l'outil, il est nécessaire de définir l'ID utilisateur spécifié dans l'application d'utilisation de l'environnement de vérification e-Gov dans la variable d'environnement "EGOV_USER_ID".
Le pilote de génération xml signé est:
make_register_xml.rb
require 'kiji'
egov_env = {
"KEY" => File.expand_path("./Certificat/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"])
#Définir l'ID utilisateur
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
#Calculer la valeur de résumé
signer.document.xpath('/DataRoot/ApplData').each do |node|
signer.digest!(node, id: '#ApplData')
end
#Signe
signer.sign!(issuer_serial: true)
#Ecrire en xml
File.write("register.xml", signer.to_xml)
Dans le format standard, le fait est que le XML de gestion de la configuration devient un XML signé. Suivez les étapes ci-dessous pour signer.
Le pilote à créer est make_zip_file_standard_format.rb. En ce qui concerne l'entrée / sortie du pilote, il y a ./zip_data/standard/ dans le dossier où se trouve le pilote, et il y a des dossiers d'entrée et de sortie en dessous.
Dans le dossier in, il y a un dossier 900A010200001000 (1) et les 3 fichiers suivants. · C'est la raison. xml ・ 900A01020000100001_01.xml ・ Fichier joint .docx
Pour le fichier de certificat, créez un dossier de certificat directement sous le dossier où se trouve le pilote et placez-y e-GovEE01_sha2.pfx.
Avant d'exécuter le pilote, le dossier de sortie est vide. Lorsque vous exécutez le pilote, un dossier 900A010200001000 (1), apply_data.zip sera créé. Le dossier 900A010200001000 (1) contient les mêmes fichiers que le dossier in, et kousei.xml est ici un xml signé. À propos de apply_data.zip, il s'agit d'un format zip du dossier 900A010200001000 (1).
Encodez apply_data.zip au format Base64 à l'aide de l'outil de conversion de données (https://hogehoge.tk/tool/). Insérez le résultat du codage dans la balise \
Après avoir exécuté le pilote, l'environnement d'exécution sera dans l'état suivant.
Mise en page de format standard
Environnement d'exécution/
├ make_zip_file_standard_format.rb
├ Certificat/
│ └ e-GovEE01_sha2.pfx
└ zip_data/
└ standard/
├ in/
│ └ 900A010200001000(1)/
│ ├ kousei.xml
│ ├ 900A01020000100001_01.xml
│ └ Fichier joint.docx
└ out/
├ 900A010200001000(1)/
│ ├ kousei.xml
│ ├ 900A01020000100001_01.xml
│ └ Fichier joint.docx
└ apply_data.zip
Le pilote de génération xml signé est:
make_zip_file_standard_format.rb
require 'fileutils'
require 'zip'
require "cgi"
require 'date'
require 'kiji'
#Fichier de signature, mot de passe
Key = "./Certificat/e-GovEE01_sha2.pfx"
password = "gpkitest"
#Définir le chemin de destination d'entrée / sortie
input_base_path = "./zip_data/standard/in/"
output_base_path = "./zip_data/standard/out/"
#Définir le chemin du fichier pour les données d'entrée / sortie
Procedure = Struct.new(:folder, :kousei_xml, :application_xml, :attachment_file)
proc = Procedure.new("900A010200001000(1)","kousei.xml","900A01020000100001_01.xml","Pièce jointe.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}"]
#Supprimez le dossier, le fichier, etc. de destination de sortie.
Dir.glob("#{output_base_path}/*") do |f|
FileUtils.rm_r(f)
end
#Génération Zipper
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
#Signe
signer = zipper.sign(signed_xml_path, app_files_path)
#Créer un dossier d'application
FileUtils.mkdir_p(output_path)
#Exporter le XML signé
File.write("#{output_path}/#{proc.kousei_xml}", signer.to_xml)
#Copier le XML d'application et les fichiers joints
app_files_path.each do |f|
FileUtils.cp(f, output_path)
end
#Combinez le dossier de sortie dans un zip
zipper.write_zip(output_base_path, "#{output_base_path}/apply_data.zip")
Dans le format de signature de fichier individuel, le fait est que «informations de configuration XML pour l'application ①» et «informations de configuration XML pour l'application ②» sont chacune signées xml (kousei.xml n'est pas signé xml). .. Suivez les étapes ci-dessous pour signer.
Le pilote à créer est make_zip_file_individual_signature_format.rb. En ce qui concerne l'entrée / la sortie du pilote, il y a ./zip_data/indivisual/ dans le dossier où se trouve le pilote, et il y a des dossiers d'entrée et de sortie en dessous. Dans le dossier in, il y a un dossier 950A102200039000 (1) et les 5 fichiers suivants. ・ Kousei.xml // Gestion de la configuration XML ・ 950A10220003900001_01.xml // Formulaire de candidature XML ① ・ Kousei20200716142110000.xml // Informations de configuration XML pour l'application XML ① ・ 950A10220003900002_01.xml // Formulaire de candidature XML② ・ Kousei20200716142115000.xml // Informations de configuration XML pour l'application XML②
Pour le fichier de certificat, créez un dossier de certificat directement sous le dossier où se trouve le pilote et placez-y e-GovEE01_sha2.pfx.
Avant d'exécuter le pilote, le dossier de sortie est vide. L'exécution du pilote créera un dossier 950A102200039000 (1), apply_data.zip. Le dossier 950A102200039000 (1) contient les mêmes fichiers que le dossier in. Cependant, kousei20200716142110000.xml et kousei20200716142115000.xml sont ici signés xml. À propos de apply_data.zip, il s'agit d'un format zip du dossier 950A102200039000 (1).
Encodez apply_data.zip au format Base64 à l'aide de l'outil de conversion de données (https://hogehoge.tk/tool/). Insérez le résultat du codage dans la balise \
Après avoir exécuté le pilote, l'environnement d'exécution sera dans l'état suivant.
Configuration de la mise en page du format de signature de fichier individuel
Environnement d'exécution/
├ make_zip_file_individual_signature_format.rb
├ Certificat/
│ └ 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
Le pilote de génération xml signé est:
make_zip_file_individual_signature_format.rb
require 'fileutils'
require 'zip'
require "cgi"
require 'date'
require 'kiji'
#Définir le fichier de signature et le mot de passe
Key = "./Certificat/e-GovEE01_sha2.pfx"
password = "gpkitest"
#Définir le chemin de destination d'entrée / sortie
input_base_path = "./zip_data/indivisual/in/"
output_base_path = "./zip_data/indivisual/out/"
#Supprimez le dossier, le fichier, etc. de destination de sortie.
Dir.glob("#{output_base_path}/*") do |f|
FileUtils.rm_r(f)
end
#Définir le chemin du fichier pour les données d'entrée / sortie
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}"
#Créer un dossier d'application
FileUtils.mkdir_p(output_path)
#Génération Zipper
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
#Signez le XML des informations de configuration pour l'application 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)
#Exporter le XML signé
File.write("#{output_path}/#{proc.config_info_appl_xml}", signer.to_xml)
#Signez le XML des informations de configuration pour le formulaire de candidature 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)
#Exporter le XML signé
File.write("#{output_path}/#{proc.config_info_appl_xml_2}", signer.to_xml)
#Répertorier le XML d'application et les fichiers joints à copier
copy_files_path = ["#{input_path}/#{proc.kousei_xml}", style_file_path, style_file_path_2]
#Copier le XML d'application et les fichiers joints
copy_files_path.each do |f|
FileUtils.cp(f, output_path)
end
#Compressez la liste de sortie
zipper.write_zip(output_base_path, output_base_path + "apply_data.zip")
Recommended Posts