PHP code example of pumasoft / puma-api
1. Go to this page and download the library: Download pumasoft/puma-api library . Choose the download type require .
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
pumasoft / puma-api example snippets
$cert = $Puma->getCertificate(); // Access validated request data
$method = $cert->getRequestedMethod(); // e.g., 'get'
$controller = $cert->getRequestedRoot(); // e.g., 'auth'
$resource = $cert->getRequestedResource(); // e.g., 'bearing_username'
$body = $cert->getRequestBody(); // Validated request body
$jwtPayload = $cert->getRequestedJWTPayload(); // JWT claims
use PumaAPI\Model\Tokenizer;
$tokenizer = new Tokenizer('/path/to/__manifest');
$token = $tokenizer->generateNewToken(
$tokenizer->getCurrentIssuer(),
[
'alg' => $tokenizer->getCurrentAlgorithm(),
'typ' => $tokenizer->getCurrentTokenType()
],
[
'iss' => $tokenizer->getCurrentIssuer(),
'exp' => time() + 3600
]
);
use PumaAPI\Model\Caller;
use PumaAPI\Model\Tokenizer;
// Generate a token for the target service
$tokenizer = new Tokenizer();
$jwt = $tokenizer->generateNewToken(
$tokenizer->getCurrentIssuer(),
[
'alg' => $tokenizer->getCurrentAlgorithm(),
'typ' => $tokenizer->getCurrentTokenType()
],
[
'iss' => $tokenizer->getCurrentIssuer(),
'exp' => time() + 3600
]
);
// Create the caller
$caller = new Caller(
Caller::POST,
'https://api.partner.com/users/create',
['Content-Type' => 'application/json'],
$jwt,
['name' => 'John Doe', 'email' => '[email protected] ']
);
// Execute the request
$caller->initRequest();
// Get the response
$response = $caller->getResponse(); // Returns: ['Code' => 200, 'Headers' => [...], 'Body' => '...']
// Parse JWT from response headers
$responseJWT = $caller->getJWTResponse(); // Returns: ['Head' => [...], 'Payload' => [...], 'Signature' => '...']
$cert = $Puma->getCertificate();
// Request routing
$cert->getRequestedMethod(); // HTTP method (lowercase)
$cert->getRequestedRoot(); // Controller/root path
$cert->getRequestedResource(); // Resource identifier
// Request data (only contracted fields)
$cert->getRequestHeaders(); // Validated headers
$cert->getRequestBody(); // Validated body
// JWT data
$cert->getRequestedJWTHead(); // JWT header claims
$cert->getRequestedJWTPayload(); // JWT payload claims
// Response contract
$cert->getResponseContract(); // Expected response structure
// Log exceptions to PHP error log
define('PUMA_API_LOG_EXCEPTIONS', true);
// Include detailed error messages in JSON response
define('PUMA_API_SEND_EXCEPTIONS_IN_RESPONSE', true);
// Disable SSL certificate verification for cURL requests
define('PUMA_API_DO_NOT_VALIDATE_SSL', true);
$cert = $Puma->getCertificate();
// Route to appropriate controller
$controllerName = $cert->getResponseContract()['Controller'] ?? 'Default';
$controllerClass = "Controllers\\{$controllerName}Controller";
if (class_exists($controllerClass)) {
$controller = new $controllerClass($cert);
$controller->handle();
} else {
http_response_code(500);
echo json_encode(['error' => 'Controller not found']);
}
namespace Controllers;
use PumaAPI\Model\Tokenizer;
class AuthController {
private $cert;
public function __construct($cert) {
$this->cert = $cert;
}
public function handle() {
$body = $this->cert->getRequestBody();
$username = $body['username'];
$password = $body['password'];
// Validate credentials (implement your logic)
if ($this->validateCredentials($username, $password)) {
$tokenizer = new Tokenizer();
$token = $tokenizer->generateNewToken(
$tokenizer->getCurrentIssuer(),
[
'alg' => $tokenizer->getCurrentAlgorithm(),
'typ' => $tokenizer->getCurrentTokenType()
],
[
'iss' => $tokenizer->getCurrentIssuer(),
'exp' => time() + 3600,
'sub' => $username
]
);
header('Content-Type: application/json');
header('Authorization: Bearer ' . $token);
echo json_encode(['result' => 'success', 'message' => 'Login successful']);
} else {
http_response_code(401);
echo json_encode(['error' => 'Invalid credentials']);
}
}
private function validateCredentials($username, $password) {
// Implement your authentication logic
return true;
}
}
project/
├── __manifest/
│ ├── service.ini
│ └── post/
│ └── auth/
│ └── login.json
├── controllers/
│ └── AuthController.php
├── index.php
└── .htaccess