Last active
August 16, 2023 13:11
-
-
Save zachabernathy/20e296a7b023cc74f49484e8caabeb50 to your computer and use it in GitHub Desktop.
LeagueApps API PHP SDK
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
define( 'THEME_DIR', get_template_directory() ); | |
define( 'LEAGUE_APPS_AUTH_HOST', 'https://auth.leagueapps.io/v2/auth/token' ); | |
define( 'LEAGUE_APPS_API_HOST', 'https://public.leagueapps.io' ); | |
define( 'LEAGUE_APPS_SITE_ID', 'YOUR_SITE_ID' ); | |
define( 'LEAGUE_APPS_PRIVATE_KEY_ID', 'YOUR_PRIVATE_KEY_ID' ); | |
define( 'LEAGUE_APPS_PRIVATE_KEY_DIR', THEME_DIR . '/keys/' ); | |
require_once(THEME_DIR . '/vendor/autoload.php'); | |
use Jose\Component\Core\AlgorithmManager; | |
use Jose\Component\Core\Converter\StandardConverter; | |
use Jose\Component\Signature\Algorithm\RS256; | |
use Jose\Component\Signature\JWSBuilder; | |
use Jose\Component\Signature\Serializer\CompactSerializer; | |
use Jose\Component\KeyManagement\JWKFactory; | |
use GuzzleHttp\Client; | |
class LeagueAppsAPI { | |
private $authHost = LEAGUE_APPS_AUTH_HOST; | |
private $apiHost = LEAGUE_APPS_API_HOST; | |
private $siteId = LEAGUE_APPS_SITE_ID; | |
private $clientId = LEAGUE_APPS_PRIVATE_KEY_ID; | |
private $keyFilePath; | |
public function __construct() { | |
$this->keyFilePath = LEAGUE_APPS_PRIVATE_KEY_DIR . LEAGUE_APPS_PRIVATE_KEY_ID . '.p12'; | |
} | |
public function getAccessToken() { | |
$algorithmManager = new AlgorithmManager([new RS256()]); | |
$jwsBuilder = new JWSBuilder($algorithmManager); | |
$payload = json_encode([ | |
'iat' => time(), | |
'nbf' => time(), | |
'exp' => time() + 300, | |
'iss' => $this->clientId, | |
'sub' => $this->clientId, | |
'aud' => $this->authHost | |
]); | |
$key = JWKFactory::createFromPKCS12CertificateFile($this->keyFilePath, 'notasecret'); | |
$jws = $jwsBuilder | |
->create() | |
->withPayload($payload) | |
->addSignature($key, ['alg' => 'RS256']) | |
->build(); | |
$serializer = new CompactSerializer(); | |
$token = $serializer->serialize($jws, 0); | |
$postData = [ | |
'grant_type' => 'urn:ietf:params:oauth:grant-type:jwt-bearer', | |
'assertion' => $token, | |
]; | |
$client = new Client(['base_uri' => $this->authHost]); | |
$response = $client->request('POST', '', ['query' => $postData]); | |
$response_data = json_decode($response->getBody()->getContents()); | |
return $response_data->access_token; | |
} | |
// League Apps -> Registrations | |
public function getRegistrations() { | |
$accessToken = $this->getAccessToken(); | |
$client = new Client([ | |
'base_uri' => $this->apiHost, | |
'headers' => ['authorization' => 'Bearer ' . $accessToken] | |
]); | |
$query = [ | |
'last-updated' => '0', | |
'last-id' => '0' | |
]; | |
$response = $client->request('GET', '/v2/sites/' . $this->siteId . '/export/registrations-2', ['query' => $query]); | |
return $response->getBody()->getContents(); | |
} | |
// League Apps -> Members | |
public function getMembers() { | |
$accessToken = $this->getAccessToken(); | |
$client = new Client([ | |
'base_uri' => $this->apiHost, | |
'headers' => ['authorization' => 'Bearer ' . $accessToken] | |
]); | |
$query = [ | |
'last-updated' => '0', | |
'last-id' => '0' | |
]; | |
$response = $client->request('GET', '/v2/sites/' . $this->siteId . '/export/members-2', ['query' => $query]); | |
return $response->getBody()->getContents(); | |
} | |
// League Apps -> Member Details | |
public function getMemberDetails($memberId) { | |
$accessToken = $this->getAccessToken(); | |
$client = new Client([ | |
'base_uri' => $this->apiHost, | |
'headers' => ['authorization' => 'Bearer ' . $accessToken] | |
]); | |
$response = $client->request('GET', '/v2/sites/' . $this->siteId . '/members/' . $memberId); | |
return $response->getBody()->getContents(); | |
} | |
} | |
$leagueAppsAPI = new LeagueAppsAPI(); | |
$registrations = $leagueAppsAPI->getRegistrations(); | |
$members = $leagueAppsAPI->getMembers(); | |
$memberDetails = $leagueAppsAPI->getMemberDetails('MEMBER_ID_HERE'); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"require": { | |
"firebase/php-jwt": "^6.8", | |
"guzzlehttp/guzzle": "^7.7", | |
"web-token/jwt-framework": "^2.0" | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Access League Apps secure admin API using PHP | |
League Apps API Docs: http://leagueapps.com/api/ | |
## Installation | |
```shell | |
composer intall | |
``` | |
## Update | |
```shell | |
define( 'LEAGUE_APPS_SITE_ID', 'YOUR_SITE_ID' ); // found in the url of your LA site | |
define( 'LEAGUE_APPS_PRIVATE_KEY_ID', 'YOUR_PRIVATE_KEY_ID' ); // generated in the LA admin | |
define( 'LEAGUE_APPS_PRIVATE_KEY_DIR', THEME_DIR . '/keys/' ); // path/to/theme/keys/ | |
``` | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment