Skip to content

Instantly share code, notes, and snippets.

@zachabernathy
Last active August 16, 2023 13:11
Show Gist options
  • Save zachabernathy/20e296a7b023cc74f49484e8caabeb50 to your computer and use it in GitHub Desktop.
Save zachabernathy/20e296a7b023cc74f49484e8caabeb50 to your computer and use it in GitHub Desktop.
LeagueApps API PHP SDK
<?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');
{
"require": {
"firebase/php-jwt": "^6.8",
"guzzlehttp/guzzle": "^7.7",
"web-token/jwt-framework": "^2.0"
}
}
# 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