<?php
declare(strict_types=1);
namespace Termwind\Components;
use Symfony\Component\Console\Output\OutputInterface;
use Termwind\Actions\StyleToMethod;
use Termwind\Html\InheritStyles;
use Termwind\ValueObjects\Styles;
/**
* @internal
*
* @method Element inheritFromStyles(Styles $styles)
* @method Element fontBold()
* @method Element strong()
* @method Element italic()
* @method Element underline()
* @method Element lineThrough()
* @method int getLength()
* @method int getInnerWidth()
* @method array getProperties()
* @method Element href(string $href)
* @method bool hasStyle(string $style)
* @method Element addStyle(string $style)
*/
abstract class Element
{
/** @var string[] */
protected static array $defaultStyles = [];
protected Styles $styles;
/**
* Creates an element instance.
*
* @param array<int, Element|string>|string $content
*/
final public function __construct(
protected OutputInterface $output,
protected array|string $content,
Styles|null $styles = null
) {
$this->styles = $styles ?? new Styles(defaultStyles: static::$defaultStyles);
$this->styles->setElement($this);
}
/**
* Creates an element instance with the given styles.
*
* @param array<int, Element|string>|string $content
* @param array<string, mixed> $properties
*/
final public static function fromStyles(OutputInterface $output, array|string $content, string $styles = '', array $properties = []): static
{
$element = new static($output, $content);
if ($properties !== []) {
$element->styles->setProperties($properties);
}
$elementStyles = StyleToMethod::multiple($element->styles, $styles);
return new static($output, $content, $elementStyles);
}
/**
* Get the string representation of the element.
*/
public function toString(): string
{
if (is_array($this->content)) {
$inheritance = new InheritStyles();
$this->content = implode('', $inheritance($this->content, $this->styles));
}
return $this->styles->format($this->content);
}
/**
* @param array<int, mixed> $arguments
*/
public function __call(string $name, array $arguments): mixed
{
if (method_exists($this->styles, $name)) {
$result = $this->styles->{$name}(...$arguments);
if (str_starts_with($name, 'get') || str_starts_with($name, 'has')) {
return $result;
}
}
return $this;
}
/**
* Sets the content of the element.
*
* @param array<int, Element|string>|string $content
*/
final public function setContent(array|string $content): static
{
return new static($this->output, $content, $this->styles);
}
/**
* Renders the string representation of the element on the output.
*/
final public function render(int $options): void
{
$this->output->writeln($this->toString(), $options);
}
/**
* Get the string representation of the element.
*/
final public function __toString(): string
{
return $this->toString();
}
}
Initiates a new payment transaction.
create-order
| Parameter | Type | Details |
|---|---|---|
| amount | decimal | Your Amount , Must be rounded at 2 precision. |
| currency | string | Currency Code, Must be in Upper Case (Alpha-3 code) |
| success_url | string | Enter your return or success URL |
| cancel_url | string (optional) | Enter your cancel or failed URL |
Request Example (guzzle)
<?php
require_once('vendor/autoload.php');
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', $base_url.'create-order', [
'headers' => [
'Authorization' => 'Bearer '. $authorizationToken,
'accept' => 'application/json',
'content-type' => 'application/json',
],
'form_params' => [
'amount' => '$amount',
'currency' => 'currency',
'success_url' => 'success_url',
'cancel_url' => 'cancel_url',
],
]);
echo $response->getBody();
**Response: SUCCESS (200 OK)**
{
"message": {
"success": [
"Order created successfully."
]
},
"data": {
"redirect_url":"https://example.com/login/OISADFDFSDFSF",
"order_details":{
"amount" : "10",
"fixed_charge" : 2,
"percent_charge" : 1,
"total_charge" : 3,
"total_payable" : 13,
"currency" : "USD",
"expiry_time": "2024-04-25T06:48:35.984285Z",
"success_url": "http://127.0.0.1/nfcpay/user/transaction/success",
"cancel_url": "http://127.0.0.1/nfcpay/user/transaction/cancel"
}
},
"type": "success"
}
**Response: ERROR (400 FAILED)**
{
"message": {
"error": [
"Invalid token."
]
},
"data": null,
"type": "error"
}