carropublic/myinfo

PHP Integrating with MyInfo
102,114
Install
composer require carropublic/myinfo
Latest Version:4.0.0
License:MIT
Last Updated:Feb 27, 2024
Links: GitHub  ·  Packagist
Maintainer: sithuaung

MyInfo

Latest Version on Packagist Total Downloads

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.

Related Packages

accredifysg/singpass-login

A Laravel package for integrating SingPass Login and MyInfo

2,639 2
php-tmdb/laravel

Laravel Package for TMDB ( The Movie Database ) API. Provides easy access to the...

53,315 160
laravel-ja/laravel

The Laravel Framework.

5,667 17
kavenegar/laravel

laravel 4 and 5 kavenegar integration

368,693 86
reliese/laravel

Reliese Components for Laravel Framework code generation.

3,991,690 1,705