carropublic / myinfo
PHP Integrating with MyInfo
Installs: 91 597
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 6
Forks: 2
Open Issues: 3
Requires
- guzzlehttp/guzzle: ^7.4.3
- illuminate/support: ~5|~6|~7|~8|~9|~10
- web-token/jwt-core: ^3.2
Requires (Dev)
- phpunit/phpunit: ^9.3.8
- squizlabs/php_codesniffer: ^3.3
This package is not auto-updated.
Last update: 2024-11-19 21:34:25 UTC
README
This is a Laravel Pacakge for MyInfo. You can read more about MyInfo on their page. There is [PUBLIC] Demo client application for integrating with MyInfo which was in Nodejs. So, I implemented my own for Laravel Package base on their Nodejs demo.
Take a look at contributing.md to see a to do list.
Installation
Via Composer
$ composer require carropublic/myinfo
Usage
Run php artisan vendor:publish
which will move private.pem
and public.pem
to your storage/ssl
folder. I got the private/public key pair from MyInfo demo page. You have to use your own
Setup Environment
MYINFO_AUTHORIZE_API="https://test.api.myinfo.gov.sg/com/v3/authorise"
MYINFO_TOKEN_API="https://test.api.myinfo.gov.sg/com/v3/token"
MYINFO_PERSON_API="https://test.api.myinfo.gov.sg/com/v3/person"
MYINFO_CALLBACK_URL="http://localhost:3001/callback"
MYINFO_CLIENT_ID="STG2-MYINFO-SELF-TEST"
MYINFO_CLIENT_SECRET="44d953c796cccebcec9bdc826852857ab412fbe2"
MYINFO_REALM="http://localhost:3001"
MY_INFO_PRIVATE_KEY="ssl/private.pem"
MY_INFO_PUBLIC_KEY="ssl/public.pem"
MYINFO_ATTRIBUTES="uinfin,name,sex,race,nationality,dob,email,mobileno,regadd,housingtype,hdbtype,marital,edulevel,noa-basic,ownerprivate,cpfcontributions,cpfbalances"
MYINFO_PURPOSE="demonstrating MyInfo APIs"
Usage,
You can create aturhoize URL something like the following.
MyInfo::createAuthorizeUrl($code); # $code in this case for state
When user agree to retrieve their info, then it's gonna redirect to MYINFO_CALLBACK_URL
base on your configruation.
Then you need to handle something like the following
// This is the state that you passed when creating authorize URL
$state = $request->input('state');
// This is the authorizon code
$code = $request->input('code');
// Create token request base on authorize code
$myInfoToken = MyInfo::createTokenRequest($code);
$token = json_decode($myInfoToken, true);
if (!$token) {
// handle error when there is no token
}
$jwtPayload = MyInfo::getJWTPayload($token['access_token']);
if(!$jwtPayload) {
// handle error when there is problem with getting JWT
}
$userUniFin = $jwtPayload['sub'];
// Create person request
$personRequest = MyInfo::createPersonRequest(
$userUniFin,
$token['access_token']
);
if(!$personRequest) {
// handle error when there is problem with person request
}
// Get user data using private key
$userData = MyInfo::getUserData(
$personRequest,
storage_path(config('myinfo.keys.private'))
);
Change log
Please see the changelog for more information on what has changed recently.
Testing
$ composer test
Contributing
Please see contributing.md for details and a todo list.
Security
If you discover any security related issues, please email author email instead of using the issue tracker.
Credits
License
license. Please see the license file for more information.