Includes
Shared functions required by API operations are provided in a number of standalone PHP include files. The first file returns the client information (for example, email address) which further S3 API user management requests need for various operations. Create a file S3_getClient.php with the following contents:
<?php // API request to get whmcs client information. if (!function_exists('S3_getClient')) { function S3_getClient($userid, $whmcs_username) { // Get client details for user email. $command = 'GetClientsDetails'; $data = array( 'clientid' => $userid, ); $results = localAPI($command, $data, $whmcs_username); // Return client information. return $results; } } ?>
The next file adds notes to the client in WHMCS with the S3 access key pairs whenever a new user or access key pair is created. Create a file S3_addClientNote.php with the following contents:
<?php // API request to add note to client in whmcs. if (!function_exists('S3_addClientNote')) { function S3_addClientNote( $userid, $whmcs_username, $s3_client_userid, $s3_client_key, $s3_client_secret ) { // Add note only for non-empty users. if (!empty($s3_client_userid)) { // Add note with the s3 access key and s3 secret. $command = 'AddClientNote'; $data = array( 'userid' => $userid, 'notes' => "UserId: " . $s3_client_userid . "\n" . "AWSAccessKeyId: " . $s3_client_key . "\n" . "AWSSecretAccessKey: " . $s3_client_secret, ); localAPI($command, $data, $whmcs_username); } } } ?>
The next file removes notes from the client in WHMCS with the S3 access key pairs whenever a user or access key pair is removed. Create a file S3_delClientNote.php with the following contents:
<?php // whmcs database access. use WHMCS\Database\Capsule; // API request to remove note from client in whmcs. if (!function_exists('S3_delClientNote')) { function S3_delClientNote( $userid, $whmcs_username, $s3_client_userid, $s3_client_key ) { // Delete notes in database. $db = Capsule::connection()->getPdo(); $db->exec(' DELETE FROM tblnotes WHERE userid = ' . $userid . ' AND note LIKE "%' . $s3_client_userid . '%" AND note LIKE "%' . $s3_client_key . '%"' ); } } ?>
The last file is the cURL library for sending GET
, PUT
, POST
, and DELETE
requests. Create a file S3_requestCurl.php with the following contents:
<?php // API request to s3 gateway. if (!function_exists('S3_requestCurl')) { function S3_requestCurl($s3_key, $s3_secret, $s3_gateway, $s3_query, $method) { // Prepare signature. $s3_host = parse_url($s3_gateway, PHP_URL_HOST); $s3_date = date(DATE_RFC2822); // Generate signature. $s3_signature = hash_hmac('sha1', $method . "\n\n\n" . $s3_date . "\n" . current(explode('&', $s3_query)), $s3_secret, true); $s3_signature = base64_encode($s3_signature); // Curl init. $s3_curl = curl_init($s3_gateway . $s3_query); // Curl options. switch ($method) { case "PUT": curl_setopt($s3_curl, CURLOPT_PUT, 1); break; case "POST": curl_setopt($s3_curl, CURLOPT_POST, 1); break; case "DELETE": curl_setopt($s3_curl, CURLOPT_CUSTOMREQUEST, "DELETE"); break; } curl_setopt($s3_curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($s3_curl, CURLOPT_URL, $s3_gateway . $s3_query); curl_setopt($s3_curl, CURLOPT_HTTPHEADER, array( 'Host: ' . $s3_host, 'Date: ' . $s3_date, 'Authorization: AWS ' . $s3_key . ':' . $s3_signature, 'Content-Type:', 'Expect:', )); // Call. $response = curl_exec($s3_curl); $response = json_decode($response, true); // Curl deinit. curl_close($s3_curl); // Return response. return $response; } } ?>