ESIAã®å®è£ ã®ãããã§ãæ¿åºããã³åæ¥çµç¹ããªã³ã©ã€ã³ãµãŒãã¹ã®éçºè ããã³ææè ã¯ããŠãŒã¶ãŒããŒã¿ã®å ¥åããã³æ€èšŒã«é¢é£ããæäœãé«éåããããå®å šã«ããããšãã§ããŸããã Rusfinance Bankã¯ãŸããã·ã¹ãã ã®å¯èœæ§ãå©çšããããšã決å®ãããªã³ã©ã€ã³ããŒã³åŠçãµãŒãã¹ïŒéè¡ã¯èªåè»ããŒã³ãå°éãšããŠããŸãïŒã宿ãããéã«ããã©ãããã©ãŒã ãšã®çµ±åãå®è£ ããŸããã
ããã¯ããã»ã©ç°¡åã§ã¯ãããŸããã§ãããæè¡çãªåé¡ã解決ããã«ã¯ãããã€ãã®èŠä»¶ãšæé ãæºããå¿ èŠããããŸããã
ãã®èšäºã§ã¯ãESIAãšã®çµ±åãç¬ç«ããŠå®è£ ããã人ã«ãšã£ãŠç¥ã£ãŠããã¹ãéèŠãªãã€ã³ããšæ¹æ³è«ã®ã¬ã€ãã©ã€ã³ã«ã€ããŠèª¬æããéçºäžã®åé¡ãå æããã®ã«åœ¹ç«ã€Javaèšèªã®ã³ãŒããã©ã°ã¡ã³ããæäŸããŸãïŒå®è£ ã®äžéšã¯çç¥ãããŠããŸãããäžè¬çãªäžé£ã®ã¢ã¯ã·ã§ã³ïŒæç¢ºã§ãïŒã
ç§ãã¡ã®çµéšããJavaéçºè ãïŒã ãã§ãªãïŒãã¬ã³ã ããã³ãã¹ã³ãã¥ãã±ãŒã·ã§ã³çã®æ¹æ³è«çæšå¥šäºé ãéçºããŠçè§£ããéã«å€ãã®æéãç¯çŽããã®ã«åœ¹ç«ã€ããšãé¡ã£ãŠããŸãã
ESIAãšã®çµ±åãå¿ èŠãªã®ã¯ãªãã§ããïŒ
ã³ãããŠã€ã«ã¹ã®å€§æµè¡ã«é¢é£ããŠã貞ä»ã®å€ãã®åéã§ã®ãªãã©ã€ã³ååŒã®æ°ã¯æžå°ãå§ããŸãããã¯ã©ã€ã¢ã³ãã¯ããªã³ã©ã€ã³åããå§ããèªåè»ããŒã³åžå Žã§ã®ãªã³ã©ã€ã³ãã¬ãŒã³ã¹ã匷åããããšãäžå¯æ¬ ã§ããã AutocreditãµãŒãã¹ã宿ãããéçšã§ïŒHabréã¯ãã§ã«ãã®éçºã«é¢ããèšäºãæã£ãŠããŸãïŒãéè¡ã®Webãµã€ãã«ããŒã³ç³è«ãé 眮ããããã®ã€ã³ã¿ãŒãã§ã€ã¹ãã§ããã ã䟿å©ã§ã·ã³ãã«ã«ããããšã«ããŸããã ESIAãšã®çµ±åã¯ãã¯ã©ã€ã¢ã³ãã®å人ããŒã¿ãèªåçã«ååŸããããšãå¯èœã«ããããããã®åé¡ã解決ããäžã§éèŠãªç¬éã«ãªããŸããã
ã¯ã©ã€ã¢ã³ãã«ãšã£ãŠãããã®ãœãªã¥ãŒã·ã§ã³ã¯ã1åã®ãã°ã€ã³ãšãã¹ã¯ãŒãã䜿çšããŠãã¯ã¬ãžããã§è»ãè³Œå ¥ããããã®ãªã³ã©ã€ã³æ¿èªãµãŒãã¹ã«ç»é²ããŠå ¥åããããšãã§ããããã䟿å©ã§ããããšãããããŸããã
ããã«ãESIAãšã®çµ±åã«ãããRusfinanceBankã¯æ¬¡ã®ããšãå¯èœã«ãªããŸããã
- ãªã³ã©ã€ã³è³ªå祚ã«èšå ¥ããæéãççž®ããŸãã
- 倿°ã®ãã£ãŒã«ãã«æåã§å ¥åããããšãããšãã®ãŠãŒã¶ãŒããŠã³ã¹ã®æ°ãæžãããŸãã
- ãé«å質ãã®æ€èšŒæžã¿ã¯ã©ã€ã¢ã³ãã®ã¹ããªãŒã ãæäŸããŸãã
ç§ãã¡ãéè¡ã®çµéšã«ã€ããŠè©±ããŠãããšããäºå®ã«ããããããããã®æ å ±ã¯éèæ©é¢ã ãã§ãªã圹ç«ã€å¯èœæ§ããããŸããæ¿åºã¯ãä»ã®ã¿ã€ãã®ãªã³ã©ã€ã³ãµãŒãã¹ã«ESIAãã©ãããã©ãŒã ã䜿çšããããšãæšå¥šããŠããŸãïŒè©³çްã¯ãã¡ãïŒã
äœãã©ã®ããã«è¡ããïŒ
æåã¯ãæè¡çãªèгç¹ããESIAãšã®çµ±åã«ç¹å¥ãªããšã¯äœããªãããã«èŠããŸãããããã¯ãRESTAPIãä»ããããŒã¿ã®ååŸã«é¢é£ããæšæºçãªã¿ã¹ã¯ã§ãããããã詳ãã調ã¹ãŠã¿ããšããã¹ãŠãããã»ã©åçŽã§ã¯ãªãããšãæããã«ãªããŸãããããšãã°ãããã€ãã®ãã©ã¡ãŒã¿ã«çœ²åããããã«å¿ èŠãªèšŒææžãã©ã®ããã«åŠçããããããããªãããšã倿ããŸãããç§ã¯æéãç¡é§ã«ããŠãããçè§£ããªããã°ãªããŸããã§ããããããããŸãæåã«ã
ãŸããè¡åèšç»ã®æŠèŠã説æããããšãéèŠã§ãããç§ãã¡ã®èšç»ã«ã¯ã次ã®äž»ãªã¹ããããå«ãŸããŠããŸããã
- ESIAãã¯ãããžãŒããŒã¿ã«ã«ç»é²ããŸãã
- ãã¹ãããã³ç£æ¥ç°å¢ã§ESIAãœãããŠã§ã¢ã€ã³ã¿ãŒãã§ãŒã¹ã䜿çšããããã®ç³è«æžãæåºããã
- ESIAãšã®çžäºäœçšã®ã¡ã«ããºã ãç¬èªã«éçºããŸãïŒçŸåšã®ææžãESIAã®äœ¿çšã«é¢ããæ¹æ³è«çæšå¥šäºé ãã«åŸã£ãŠïŒã
- ESIAã®ãã¹ãããã³ç£æ¥ç°å¢ã§ã¡ã«ããºã ã®åäœããã¹ãããŸãã
ç§ãã¡ã¯éåžžãJavaã§ãããžã§ã¯ããéçºããŸãããããã£ãŠããœãããŠã§ã¢ã®å®è£ ã«ã¯æ¬¡ã®ãã®ãéžæããŸããã
- IntelliJ IDEA;
- CryptoPro JCPïŒãŸãã¯CryptoPro Java CSPïŒ;
- Java 8;
- Apache HttpClient;
- ãã³ãã¯;
- FasterXML /ãžã£ã¯ãœã³ã
ãªãã€ã¬ã¯ãURLã®ååŸ
æåã®ã¹ãããã¯ãèªèšŒã³ãŒããååŸããããšã§ããç§ãã¡ã®å Žåãããã¯ãState ServicesããŒã¿ã«ã®æ¿èªããŒãžãžã®ãªãã€ã¬ã¯ãã䌎ãå¥ã®ãµãŒãã¹ã«ãã£ãŠè¡ãããŸãïŒããã«ã€ããŠè©³ãã説æããŸãïŒã
ãŸãã倿°ESIA_AUTH_URLïŒESIAã¢ãã¬ã¹ïŒãšAPI_URLïŒèªèšŒãæåããå Žåã«ãªãã€ã¬ã¯ããçºçããã¢ãã¬ã¹ïŒãåæåããŸãããã®åŸãESIAãžã®ãªã¯ãšã¹ãã®ãã©ã¡ãŒã¿ããã£ãŒã«ãã«å«ãEsiaRequestParamsãªããžã§ã¯ããäœæããesiaAuthUriãªã³ã¯ã圢æããŸãã
public Response loginByEsia() throws Exception {
final String ESIA_AUTH_URL = dao.getEsiaAuthUrl(); //
final String API_URL = dao.getApiUrl(); // ,
EsiaRequestParams requestDto = new EsiaRequestParams(API_URL);
URI esiaAuthUri = new URIBuilder(ESIA_AUTH_URL)
.addParameters(Arrays.asList(
new BasicNameValuePair(RequestEnum.CLIENT_ID.getParam(), requestDto.getClientId()),
new BasicNameValuePair(RequestEnum.SCOPE.getParam(), requestDto.getScope()),
new BasicNameValuePair(RequestEnum.RESPONSE_TYPE.getParam(), requestDto.getResponseType()),
new BasicNameValuePair(RequestEnum.STATE.getParam(), requestDto.getState()),
new BasicNameValuePair(RequestEnum.TIMESTAMP.getParam(), requestDto.getTimestamp()),
new BasicNameValuePair(RequestEnum.ACCESS_TYPE.getParam(), requestDto.getAccessType()),
new BasicNameValuePair(RequestEnum.REDIRECT_URI.getParam(), requestDto.getRedirectUri()),
new BasicNameValuePair(RequestEnum.CLIENT_SECRET.getParam(), requestDto.getClientSecret())
))
.build();
return Response.temporaryRedirect(esiaAuthUri).build();
}
ããããããããããã«ãEsiaRequestParamsã¯ã©ã¹ãã©ã®ããã«èŠãããã瀺ããŸãããã
public class EsiaRequestParams {
String clientId;
String scope;
String responseType;
String state;
String timestamp;
String accessType;
String redirectUri;
String clientSecret;
String code;
String error;
String grantType;
String tokenType;
public EsiaRequestParams(String apiUrl) throws Exception {
this.clientId = CLIENT_ID;
this.scope = Arrays.stream(ScopeEnum.values())
.map(ScopeEnum::getName)
.collect(Collectors.joining(" "));
responseType = RESPONSE_TYPE;
state = EsiaUtil.getState();
timestamp = EsiaUtil.getUrlTimestamp();
accessType = ACCESS_TYPE;
redirectUri = apiUrl + RESOURCE_URL + "/" + AUTH_REQUEST_ESIA;
clientSecret = EsiaUtil.generateClientSecret(String.join("", scope, timestamp, clientId, state));
grantType = GRANT_TYPE;
tokenType = TOKEN_TYPE;
}
}
ãã®åŸããŠãŒã¶ãŒãESIAèªèšŒãµãŒãã¹ã«ãªãã€ã¬ã¯ãããå¿ èŠããããŸãããŠãŒã¶ãŒã¯ãŠãŒã¶ãŒåãšãã¹ã¯ãŒããå ¥åããã·ã¹ãã ã®ããŒã¿ãžã®ã¢ã¯ã»ã¹ã確èªããŸããæ¬¡ã«ãESIAã¯ãèªèšŒã³ãŒããå«ãå¿çããªã³ã©ã€ã³ãµãŒãã¹ã«éä¿¡ããŸãããã®ã³ãŒãã¯ãESIAãžã®ãããªãåãåããã«å¿ èŠã«ãªããŸãã
ESIAãžã®åèŠæ±ã«ã¯ãPKCS7圢åŒïŒPublic Key Cryptography StandardïŒã®åé¢ãããé»å眲åã§ããclient_secretãã©ã¡ãŒã¿ãŒããããŸãããã®å Žåã眲åã«ã¯èšŒææžã䜿çšãããŸãããã®èšŒææžã¯ãESIAãšã®çµ±åäœæ¥ãéå§ããåã«èªèšŒã»ã³ã¿ãŒã«ãã£ãŠåä¿¡ãããŸãããããŒã¹ãã¢ã®æäœæ¹æ³ã¯ããã®äžé£ã®èšäºã§è©³ãã説æãããŠããŸãã
äŸãšããŠãCryptoProã«ãã£ãŠæäŸãããããŒã¹ãã¢ãã©ã®ããã«èŠãããã瀺ããŸãããã
ãã®å Žåãç§å¯éµãšå ¬ééµã®åŒã³åºãã¯æ¬¡ã®ããã«ãªããŸãã
KeyStore keyStore = KeyStore.getInstance("HDImageStore"); //
keyStore.load(null, null);
PrivateKey privateKey = (PrivateKey) keyStore.getKey(esiaKeyStoreParams.getName(), esiaKeyStoreParams.getValue().toCharArray()); //
X509Certificate certificate = (X509Certificate) keyStore.getCertificate(esiaKeyStoreParams.getName()); // , â .
JCP.HD_STORE_NAMEãCryptoProã®ã¹ãã¬ãŒãžåã§ããã®ã«å¯ŸããesiaKeyStoreParams.getNameïŒïŒã¯ã³ã³ãããŒåãesiaKeyStoreParams.getValueïŒïŒã§ããToCharArrayïŒïŒã¯ã³ã³ãããŒãã¹ã¯ãŒãã§ãã
ãã®å Žåããã®ã¹ãã¬ãŒãžã®ååãæå®ãããšãã«ããŒããã§ã«ååšãããããloadïŒïŒã¡ãœããã䜿çšããŠã¹ãã¬ãŒãžã«ããŒã¿ãããŒãããå¿ èŠã¯ãããŸããã
ããã§ããã©ãŒã ã§çœ²åãååŸããããšãèŠããŠããããšãéèŠã§ãã
final Signature signature = Signature.getInstance(SIGN_ALGORITHM, PROVIDER_NAME);
signature.initSign(privateKey);
signature.update(data);
final byte[] sign = signature.sign();
ESIAã¯PKCS7圢åŒã®åé¢ããã眲åãå¿ èŠãšãããããããã ãã§ã¯ååã§ã¯ãããŸããããããã£ãŠãPKCS7圢åŒã®çœ²åãçæããå¿ èŠããããŸãã
ãã¿ããããã眲åãè¿ãã¡ãœããã®äŸã¯æ¬¡ã®ããã«ãªããŸãã
public String generateClientSecret(String rawClientSecret) throws Exception {
if (this.localCertificate == null || this.esiaCertificate == null) throw new RuntimeException("Signature creation is unavailable");
return CMS.cmsSign(rawClientSecret.getBytes(), localPrivateKey, localCertificate, true);
}
ããã§ã¯ãå ¬ééµãšESIAå ¬ééµã確èªããŸããcmsSignïŒïŒã¡ãœããã«ã¯æ©å¯æ å ±ãå«ãŸããŠããå¯èœæ§ããããããé瀺ããŸããã
è©³çŽ°ã¯æ¬¡ã®ãšããã§ãã
- rawClientSecret.getBytesïŒïŒ-ã¹ã³ãŒããã¿ã€ã ã¹ã¿ã³ããclientIdãããã³ç¶æ ã®ãã€ãé åã
- localPrivateKey-ã³ã³ããããã®ç§å¯éµã
- localCertificate-ã³ã³ããããã®å ¬ééµã
- true-眲åãã©ã¡ãŒã¿ãŒã®ããŒã«å€-ãã§ãã¯ã¢ãŠããããã©ããã
眲åã®äœæäŸã¯ãPKCS7æšæºãCMSãšåŒã°ããCryptoProjavaã©ã€ãã©ãªã«ãããŸãããŸããããŠã³ããŒãããããŒãžã§ã³ã®CryptoProã®ãœãŒã¹ã³ãŒãã«å«ãŸããŠããããã°ã©ããŒãºããã¥ã¢ã«ã«ãèšèŒãããŠããŸãã
ããŒã¯ã³ã®ååŸ
次ã®ã¹ãããã¯ãèªèšŒã³ãŒããšåŒãæãã«ã¢ã¯ã»ã¹ããŒã¯ã³ïŒå¥åããŒã¯ã³ïŒãåä¿¡ããããšã§ããèªèšŒã³ãŒãã¯ãStateServicesããŒã¿ã«ã§ã®ãŠãŒã¶ãŒèªèšŒãæåãããšãã«ãã©ã¡ãŒã¿ãŒãšããŠåä¿¡ãããŸããã
çµ±åèå¥ã·ã¹ãã ã§ããŒã¿ãåä¿¡ããã«ã¯ãã¢ã¯ã»ã¹ããŒã¯ã³ãååŸããå¿ èŠããããŸãããããè¡ãããã«ãçµ±åãããèå¥ããã³èªèšŒã·ã¹ãã ã«èŠæ±ãäœæããŸããããã§ã®äž»ãªãªã¯ãšã¹ããã£ãŒã«ãã¯åãæ¹æ³ã§åœ¢æãããã³ãŒãã¯æ¬¡ã®ããã«ãªããŸãã
URI getTokenUri = new URIBuilder(ESIA_TOKEN_API_URL)
.addParameters(Arrays.asList(
new BasicNameValuePair(RequestEnum.CLIENT_ID.getParam(), requestDto.getClientId()),
new BasicNameValuePair(RequestEnum.CODE.getParam(), code),
new BasicNameValuePair(RequestEnum.GRANT_TYPE.getParam(), requestDto.getGrantType()),
new BasicNameValuePair(RequestEnum.CLIENT_SECRET.getParam(), requestDto.getClientSecret()),
new BasicNameValuePair(RequestEnum.STATE.getParam(), requestDto.getState()),
new BasicNameValuePair(RequestEnum.REDIRECT_URI.getParam(), requestDto.getRedirectUri()),
new BasicNameValuePair(RequestEnum.SCOPE.getParam(), requestDto.getScope()),
new BasicNameValuePair(RequestEnum.TIMESTAMP.getParam(), requestDto.getTimestamp()),
new BasicNameValuePair(RequestEnum.TOKEN_TYPE.getParam(), requestDto.getTokenType())
))
.build();
HttpUriRequest getTokenPostRequest = RequestBuilder.post()
.setUri(getTokenUri)
.setHeader(HttpHeaders.CONTENT_TYPE, "application/x-www-form-urlencoded")
.build();
çããåãåã£ããããããè§£æããŠããŒã¯ã³ãååŸããŸãã
try (CloseableHttpResponse response = httpClient.execute(getTokenPostRequest)) {
HttpEntity tokenEntity = response.getEntity();
String tokenEntityString = EntityUtils.toString(tokenEntity);
tokenResponseDto = extractEsiaGetResponseTokenDto(tokenEntityString);
}
ããŒã¯ã³ã¯ãããªãªãã§åºåããã3ã€ã®éšåãããªãæååã§ãïŒHEADER.PAYLOAD.SIGNATUREãããã§ïŒ
- HEADERã¯ã眲åã¢ã«ãŽãªãºã ãå«ãããŒã¯ã³ã®ããããã£ãæã€ããããŒã§ãã
- PAYLOADã¯ãããŒã¯ã³ãšãµããžã§ã¯ãã«é¢ããæ å ±ã§ãããå·ã®ãµãŒãã¹ã«èŠæ±ããŸãã
- 眲åã¯HEADER.PAYLOADã®çœ²åã§ãã
ããŒã¯ã³ã®æ€èšŒ
ã¹ããŒããµãŒãã¹ããã®å¿çã確å®ã«åä¿¡ããã«ã¯ãã¹ããŒããµãŒãã¹ã®Webãµã€ãããããŠã³ããŒãã§ããèšŒææžïŒå ¬éããŒïŒãžã®ãã¹ãæå®ããŠããŒã¯ã³ãæ€èšŒããå¿ èŠããããŸããåä¿¡ããæååïŒdataïŒãšçœ²åïŒdataSignatureïŒãisEsiaSignatureValidïŒïŒã¡ãœããã«æž¡ãããšã«ãããæ€èšŒçµæãããŒã«å€ãšããŠååŸã§ããŸãã
public static boolean isEsiaSignatureValid(String data, String dataSignature) throws Exception {
InputStream inputStream = EsiaUtil.class.getClassLoader().getResourceAsStream(CERTIFICATE); // ,
CertificateFactory certFactory = CertificateFactory.getInstance("X.509"); // X.509
X509Certificate certificate = (X509Certificate) certFactory.generateCertificate(inputStream);
Signature signature = Signature.getInstance(certificate.getSigAlgName(), new JCP()); // Signature JCP
signature.initVerify(certificate.getPublicKey()); //
signature.update(data.getBytes()); // ,
return signature.verify(Base64.getUrlDecoder().decode(dataSignature));
}
ã¬ã€ãã©ã€ã³ã«åŸããããŒã¯ã³ã®æå¹æéã確èªããå¿ èŠããããŸããæå¹æéãçµäºããå Žåã¯ã远å ã®ãã©ã¡ãŒã¿ãŒã䜿çšããŠæ°ãããªã³ã¯ãäœæããhttpã¯ã©ã€ã¢ã³ãã䜿çšããŠèŠæ±ãè¡ãå¿ èŠããããŸãã
URI refreshTokenUri = new URIBuilder(ESIA_TOKEN_API_URL)
.addParameters(Arrays.asList(
new BasicNameValuePair(RequestEnum.CLIENT_ID.getParam(), requestDto.getClientId()),
new BasicNameValuePair(RequestEnum.REFRESH_TOKEN.getParam(), tokenResponseDto.getRefreshToken()),
new BasicNameValuePair(RequestEnum.CODE.getParam(), code),
new BasicNameValuePair(RequestEnum.GRANT_TYPE.getParam(), EsiaConstants.REFRESH_GRANT_TYPE),
new BasicNameValuePair(RequestEnum.STATE.getParam(), requestDto.getState()),
new BasicNameValuePair(RequestEnum.SCOPE.getParam(), requestDto.getScope()),
new BasicNameValuePair(RequestEnum.TIMESTAMP.getParam(), requestDto.getTimestamp()),
new BasicNameValuePair(RequestEnum.TOKEN_TYPE.getParam(), requestDto.getTokenType()),
new BasicNameValuePair(RequestEnum.CLIENT_SECRET.getParam(), requestDto.getClientSecret()),
new BasicNameValuePair(RequestEnum.REDIRECT_URI.getParam(), requestDto.getRedirectUri())
))
.build();
ãŠãŒã¶ãŒããŒã¿ã®ååŸ
ç§ãã¡ã®å Žåãããªãã¯ããªãã®ãã«ããŒã ãçå¹Žææ¥ããã¹ããŒãã®è©³çްãšé£çµ¡å ãååŸããå¿ èŠããããŸãã
ãŠãŒã¶ãŒããŒã¿ã®åä¿¡ã«åœ¹ç«ã€æ©èœã€ã³ã¿ãŒãã§ã€ã¹ã䜿çšããŸãã
Function<String, String> esiaPersonDataFetcher = (fetchingUri) -> {
try {
URI getDataUri = new URIBuilder(fetchingUri).build();
HttpGet dataHttpGet = new HttpGet(getDataUri);
dataHttpGet.addHeader("Authorization", requestDto.getTokenType() + " " + tokenResponseDto.getAccessToken());
try (CloseableHttpResponse dataResponse = httpClient.execute(dataHttpGet)) {
HttpEntity dataEntity = dataResponse.getEntity();
return EntityUtils.toString(dataEntity);
}
} catch (Exception e) {
throw new UndeclaredThrowableException(e);
}
};
ãŠãŒã¶ãŒããŒã¿ã®ååŸïŒ
String personDataEntityString = esiaPersonDataFetcher.apply(ESIA_REST_API_URL + "/prns/" + esiaAccountId);
é£çµ¡å ã®ååŸã¯ããŠãŒã¶ãŒããŒã¿ã®ååŸã»ã©æçœã§ã¯ãªããªããŸããããŸããé£çµ¡å ãžã®ãªã³ã¯ã®ãªã¹ããååŸããå¿ èŠããããŸãã
String contactsListEntityString = esiaPersonDataFetcher.apply(ESIA_REST_API_URL + "/prns/" + esiaAccountId + "/ctts");
EsiaListDto esiaListDto = objectMapper.readValue(contactsListEntityString, EsiaListDto.class);
ãã®ãªã¹ããéã·ãªã¢ã«åããesiaListDtoãªããžã§ã¯ããååŸããŸããESIAããã¥ã¢ã«ã®ãã£ãŒã«ãã¯ç°ãªãå Žåããããããçµéšçã«ç¢ºèªãã䟡å€ããããŸãã
次ã«ããªã¹ãã®åãªã³ã¯ããã©ã£ãŠãåãŠãŒã¶ãŒã®é£çµ¡å ãååŸããå¿ èŠããããŸããæ¬¡ã®ããã«ãªããŸãã
for (String contactUrl : esiaListDto.getElementUrls()) {
String contactEntityString = esiaPersonDataFetcher.apply(contactUrl);
EsiaContactDto esiaContactDto = objectMapper.readValue(contactEntityString, EsiaContactDto.class);
}
ç¶æ³ã¯ãããã¥ã¡ã³ãã®ãªã¹ããååŸããå Žåãšåãã§ãããŸããããã¥ã¡ã³ããžã®ãªã³ã¯ã®ãªã¹ããååŸããŸãã
String documentsListEntityString = esiaPersonDataFetcher.apply(ESIA_REST_API_URL + "/prns/" + esiaAccountId + "/docs");
次ã«ããããéã·ãªã¢ã«åããŸãã
EsiaListDto esiaDocumentsListDto = objectMapper.readValue(documentsListEntityString, EsiaListDto.class);
:
for (String documentUrl : esiaDocumentsListDto.getElementUrls()) {
String documentEntityString = esiaPersonDataFetcher.apply(documentUrl);
EsiaDocumentDto esiaDocumentDto = objectMapper.readValue(documentEntityString, EsiaDocumentDto.class);
}
ã§ã¯ããã®ãã¹ãŠã®ããŒã¿ãã©ãããã®ã§ããããã
ããŒã¿ãè§£æããŠãå¿ èŠãªãã£ãŒã«ããæã€ãªããžã§ã¯ããååŸã§ããŸããããã§ã¯ãåéçºè ã¯ãåç §æ¡ä»¶ã«åŸã£ãŠãå¿ èŠã«å¿ããŠã¯ã©ã¹ãèšèšã§ããŸãã
å¿ é ãã£ãŒã«ããæã€ãªããžã§ã¯ããååŸããäŸïŒ
final ObjectMapper objectMapper = new ObjectMapper()
.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
String personDataEntityString = esiaPersonDataFetcher
.apply(ESIA_REST_API_URL + "/prns/" + esiaAccountId);
EsiaPersonDto esiaPersonDto = objectMapper
.readValue(personDataEntityString, EsiaPersonDto.class);
esiaPersonDtoãªããžã§ã¯ãã«ãé£çµ¡å ãªã©ã®å¿ èŠãªããŒã¿ãå ¥åããŸãã
for (String contactUrl : esiaListDto.getElementUrls()) {
String contactEntityString = esiaPersonDataFetcher.apply(contactUrl);
EsiaContactDto esiaContactDto = objectMapper.readValue(contactEntityString, EsiaContactDto.class); //
if (esiaContactDto.getType() == null) continue;
switch (esiaContactDto.getType().toUpperCase()) {
case EsiaContactDto.MBT: // , mobilePhone
esiaPersonDto.setMobilePhone(esiaContactDto.getValue());
break;
case EsiaContactDto.EML: // , email
esiaPersonDto.setEmail(esiaContactDto.getValue());
}
}
EsiaPersonDtoã¯ã©ã¹ã¯æ¬¡ã®ããã«ãªããŸãã
@Data
@FieldNameConstants(prefix = "")
public class EsiaPersonDto {
private String firstName;
private String lastName;
private String middleName;
private String birthDate;
private String birthPlace;
private Boolean trusted; // - (âtrueâ) / (âfalseâ)
private String status; // - Registered () /Deleted ()
// , /prns/{oid}
private List<String> stateFacts;
private String citizenship;
private Long updatedOn;
private Boolean verifying;
@JsonProperty("rIdDoc")
private Integer documentId;
private Boolean containsUpCfmCode;
@JsonProperty("eTag")
private String tag;
// ----------------------------------------
private String mobilePhone;
private String email;
@javax.validation.constraints.Pattern(regexp = "(\\d{2})\\s(\\d{2})")
private String docSerial;
@javax.validation.constraints.Pattern(regexp = "(\\d{6})")
private String docNumber;
private String docIssueDate;
@javax.validation.constraints.Pattern(regexp = "([0-9]{3})\\-([0-9]{3})")
private String docDepartmentCode;
private String docDepartment;
@javax.validation.constraints.Pattern(regexp = "\\d{14}")
@JsonProperty("snils")
private String pensionFundCertificateNumber;
@javax.validation.constraints.Pattern(regexp = "\\d{12}")
@JsonProperty("inn")
private String taxPayerNumber;
@JsonIgnore
@javax.validation.constraints.Pattern(regexp = "\\d{2}")
private String taxPayerCertificateSeries;
@JsonIgnore
@javax.validation.constraints.Pattern(regexp = "\\d{10}")
private String taxPayerCertificateNumber;
}
ESIAã¯éæ¢ããŠããªãããããµãŒãã¹ã®æ¹åäœæ¥ã¯ç¶ç¶ãããŸãã