Added the first API handler for external payments (to use with the Omnipay plugin)
This commit is contained in:
parent
da5ecf6f86
commit
500223390d
130
src/Application/API/Handler.php
Normal file
130
src/Application/API/Handler.php
Normal file
@ -0,0 +1,130 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Informatica Eindproject D4p
|
||||
* 6in3, Stedelijk Gymnasium Nijmegen
|
||||
* Docent: Hans de Wolf
|
||||
*
|
||||
* ==================
|
||||
*
|
||||
* Daniel Boutros,
|
||||
* Christiaan Goossens,
|
||||
* Jelmer Hinssen
|
||||
*/
|
||||
|
||||
namespace InfD4p\Application\API;
|
||||
|
||||
use \Slim\App;
|
||||
|
||||
class Handler
|
||||
{
|
||||
public function __construct(App $app)
|
||||
{
|
||||
/**
|
||||
* Create the API route group
|
||||
*/
|
||||
$app->group('/api', function () {
|
||||
/**
|
||||
* TransactionRequest API Endpoint
|
||||
*
|
||||
* Requires the following POST arguments:
|
||||
* - clientId
|
||||
* - transactionId
|
||||
* - amount
|
||||
* - description
|
||||
* - returnUrl
|
||||
* - sha1
|
||||
*/
|
||||
$this->post('/transactionRequest', function ($request, $response, $args) {
|
||||
$parsedBody = $request->getParsedBody();
|
||||
|
||||
if (isset($parsedBody['clientId']) && isset($parsedBody['transactionId']) && isset($parsedBody['amount']) && isset($parsedBody['description']) && isset($parsedBody['returnUrl']) && isset($parsedBody['sha1'])) {
|
||||
// Correct request
|
||||
|
||||
$clientSecret = Handler::getClientSecret($parsedBody['clientId']);
|
||||
$sha = sha1($parsedBody['transactionId'] . $parsedBody['amount'] . $clientSecret);
|
||||
|
||||
if ($sha === $parsedBody['sha1']) {
|
||||
$responseJSON = array(
|
||||
"success" => true,
|
||||
"redirect" => "https://example.com"
|
||||
);
|
||||
} else {
|
||||
$response = $response->withStatus(403);
|
||||
$responseJSON = array(
|
||||
"success" => false,
|
||||
"error" => "Incorrect sha1 verification hash."
|
||||
);
|
||||
}
|
||||
} else {
|
||||
$response = $response->withStatus(400);
|
||||
$responseJSON = array(
|
||||
"success" => false,
|
||||
"error" => "Missing one of the following attributes: [clientId, transactionId, amount, description, returnUrl, sha1]"
|
||||
);
|
||||
}
|
||||
|
||||
$body = $response->getBody();
|
||||
$body->write(json_encode($responseJSON));
|
||||
return $response->withBody($body);
|
||||
});
|
||||
|
||||
/**
|
||||
* StatusRequest API Endpoint
|
||||
*
|
||||
* Requires the following POST arguments:
|
||||
* - clientId
|
||||
* - transactionId
|
||||
* - sha1
|
||||
*/
|
||||
$this->post('/statusRequest', function ($request, $response, $args) {
|
||||
$parsedBody = $request->getParsedBody();
|
||||
|
||||
if (isset($parsedBody['clientId']) && isset($parsedBody['transactionId']) && isset($parsedBody['sha1'])) {
|
||||
// Correct request
|
||||
|
||||
$clientSecret = Handler::getClientSecret($parsedBody['clientId']);
|
||||
$sha = sha1($parsedBody['transactionId'] . $clientSecret);
|
||||
|
||||
if ($sha === $parsedBody['sha1']) {
|
||||
$responseJSON = array(
|
||||
"success" => true,
|
||||
"transaction" => array(
|
||||
"status" => "Success",
|
||||
"transactionId" => "notyetfromdb",
|
||||
"someotherrandomkey" => "changethis"
|
||||
)
|
||||
);
|
||||
} else {
|
||||
$response = $response->withStatus(403);
|
||||
$responseJSON = array(
|
||||
"success" => false,
|
||||
"error" => "Incorrect sha1 verification hash."
|
||||
);
|
||||
}
|
||||
} else {
|
||||
$response = $response->withStatus(400);
|
||||
$responseJSON = array(
|
||||
"success" => false,
|
||||
"error" => "Missing one of the following attributes: [clientId, transactionId, sha1]"
|
||||
);
|
||||
}
|
||||
|
||||
$body = $response->getBody();
|
||||
$body->write(json_encode($responseJSON));
|
||||
return $response->withBody($body);
|
||||
});
|
||||
})->add(function ($request, $response, $next) {
|
||||
/**
|
||||
* Add the correct JSON headers to the responses
|
||||
*/
|
||||
$response = $response->withHeader('Content-type', 'application/json');
|
||||
return $next($request, $response);
|
||||
});
|
||||
}
|
||||
|
||||
public static function getClientSecret($clientId)
|
||||
{
|
||||
return '42';
|
||||
}
|
||||
}
|
@ -16,7 +16,8 @@ namespace InfD4p\Application;
|
||||
|
||||
use \Slim\App;
|
||||
|
||||
class Main {
|
||||
class Main
|
||||
{
|
||||
|
||||
/**
|
||||
* Constructor function
|
||||
@ -29,7 +30,12 @@ class Main {
|
||||
* Hier wordt onze applicatie gestart. De functie hieronder wordt aangeroepen bij het starten van de app. Hier kun je dus routes toevoegen.
|
||||
*
|
||||
*/
|
||||
public function __construct(App $app) {
|
||||
public function __construct(App $app)
|
||||
{
|
||||
// Load the API handler for the Omnipay plugin
|
||||
new API\Handler($app);
|
||||
|
||||
// Add the default view routes
|
||||
$app->get('/[{name}]', function ($request, $response, $args) {
|
||||
// Render index view
|
||||
return $this->renderer->render($response, 'index.phtml', $args);
|
||||
|
Reference in New Issue
Block a user