PHP code example of sk-id-solutions / mobile-id-php-client
1. Go to this page and download the library: Download sk-id-solutions/mobile-id-php-client library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
sk-id-solutions / mobile-id-php-client example snippets
// step #1 - validate user input
try {
$phoneNumber = MidInputUtil::getValidatedPhoneNumber($this->userData['phoneNumber']);
$nationalIdentityNumber = MidInputUtil::getValidatedNationalIdentityNumber($this->userData['nationalIdentityNumber']);
}
catch (MidInvalidPhoneNumberException $e) {
echo 'The phone number you entered is invalid';
}
catch (MidInvalidNationalIdentityNumberException $e) {
echo 'The national identity number you entered is invalid';
}
// step #2 - create client with long-polling.
// withSslPinnedPublicKeys() is explained later in this document
$client = MobileIdClient::newBuilder()
->withRelyingPartyUUID($this->config['relyingPartyUUID'])
->withRelyingPartyName($this->config['relyingPartyName'])
->withHostUrl($this->config['hostUrl'])
->withLongPollingTimeoutSeconds(60)
->withSslPinnedPublicKeys("sha256//k/w7/9MIvdN6O/rE1ON+HjbGx9PRh/zSnNJ61pldpCs=;sha256//some-future-ssl-host-key")
->build();
// step #3 - generate hash & calculate verification code and display to user
$authenticationHash = MobileIdAuthenticationHashToSign::generateRandomHashOfDefaultType();
$verificationCode = $authenticationHash->calculateVerificationCode();
// step #4 - display $verificationCode (4 digit code) to user
echo 'Verification code: '.$verificationCode."\n";
// step #5 - create request to be sent to user's phone
$request = AuthenticationRequest::newBuilder()
->withPhoneNumber($phoneNumber)
->withNationalIdentityNumber($nationalIdentityNumber)
->withHashToSign($authenticationHash)
->withLanguage(ENG::asType())
->withDisplayText("Log into self-service?")
->withDisplayTextFormat(DisplayTextFormat::GSM7)
->build();
// step #6 - send request to user's phone and catch possible errors
try {
$response = $client->getMobileIdConnector()->initAuthentication($request);
}
catch (MidNotMidClientException $e) {
echo "User is not a MID client or user's certificates are revoked.";
}
catch (MidUnauthorizedException $e) {
echo 'Integration error with Mobile-ID. Invalid MID credentials';
}
catch (MissingOrInvalidParameterException $e) {
echo 'Problem with MID integration';
}
catch (MidInternalErrorException $e) {
echo 'MID internal error';
}
// step #7 - keep polling for session status until we have a final status from phone
$finalSessionStatus = $client
->getSessionStatusPoller()
->fetchFinalSessionStatus($response->getSessionID());
// step #8 - get authenticationResult
try {
$authenticationResult = $client
->createMobileIdAuthentication($finalSessionStatus, $authenticationHash);
}
catch (MidUserCancellationException $e) {
echo "User cancelled operation from his/her phone.";
}
catch (MidNotMidClientException $e) {
echo "User is not a MID client or user's certificates are revoked.";
}
catch (MidSessionTimeoutException $e) {
echo "User did not type in PIN code or communication error.";
}
catch (MidPhoneNotAvailableException $e) {
echo "Unable to reach phone/SIM card. User needs to check if phone has coverage.";
}
catch (MidDeliveryException $e) {
echo "Error communicating with the phone/SIM card.";
}
catch (MidInvalidUserConfigurationException $e) {
echo "Mobile-ID configuration on user's SIM card differs from what is configured on service provider's side. User needs to contact his/her mobile operator.";
}
catch (MidSessionNotFoundException | MissingOrInvalidParameterException | MidUnauthorizedException | MidSslException $e) {
throw new RuntimeException("Integrator-side error with MID integration or configuration. Error code:". $e->getCode());
}
catch (MidServiceUnavailableException $e) {
echo "MID service is currently unavailable. User shold try again later.";
}
catch (MidInternalErrorException $internalError) {
echo "Something went wrong with Mobile-ID service";
}
# step #9 - validate returned result (to protect yourself from man-in-the-middle attack)
$validator = AuthenticationResponseValidator::newBuilder()
->withTrustedCaCertificatesFolder(__DIR__ . "/test_numbers_ca_certificates/")
->build();
$validator->validate($authenticationResult);
# step #10 - read out authenticated person details
$authenticatedPerson = $authenticationResult->constructAuthenticationIdentity();
echo 'Welcome, '.$authenticatedPerson->getGivenName().' '.$authenticatedPerson->getSurName().' ';
echo ' (ID code '.$authenticatedPerson->getIdentityCode().') ';
echo 'from '. $authenticatedPerson->getCountry(). '!';
$client = MobileIdClient::newBuilder()
->withRelyingPartyUUID(TestData::DEMO_RELYING_PARTY_UUID)
->withRelyingPartyName(TestData::DEMO_RELYING_PARTY_NAME)
->withHostUrl(TestData::DEMO_HOST_URL)
->withSslPinnedPublicKeys("sha256//k/w7/9MIvdN6O/rE1ON+HjbGx9PRh/zSnNJ61pldpCs=;sha256//some-future-ssl-host-key")
->build();
$request = CertificateRequest::newBuilder()
->withPhoneNumber("+37200000766")
->withNationalIdentityNumber("60001019906")
->build();
try {
$response = $client->getMobileIdConnector()->pullCertificate($request);
$person = $client->parseMobileIdIdentity($response);
echo 'This is a Mobile-ID user.';
echo 'Name, '.$person->getGivenName().' '.$person->getSurName().' ';
echo ' (ID code '.$person->getIdentityCode().') ';
echo 'from '. $person->getCountry(). '!';
}
catch (MidNotMidClientException $e) {
// if user is not MID client then this exception is thrown and caught already during first request (see above)
echo "You are not a Mobile-ID client or your Mobile-ID certificates are revoked. Please contact your mobile operator.";
}
catch (MissingOrInvalidParameterException | MidUnauthorizedException $e) {
throw new RuntimeException("Client side error with mobile-ID integration. Error code:". $e->getCode());
}
catch (MidInternalErrorException $internalError) {
echo "Something went wrong with Mobile-ID service";
}
echo $message."\n";
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.