mirror of
https://github.com/anikeen-com/id.git
synced 2026-11-02 05:39:35 +00:00
Orders and subscriptions created by untrusted apps are confirmed by the user on Anikeen ID. confirmationUrl($returnUrl) on Order and Subscription builds the link with the return URL; checking out such a draft throws ConfirmationRequiredException carrying the same URL. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
67 lines
1.8 KiB
PHP
67 lines
1.8 KiB
PHP
<?php
|
|
|
|
namespace Anikeen\Id\Resources;
|
|
|
|
use Anikeen\Id\Exceptions\ConfirmationRequiredException;
|
|
use Anikeen\Id\Exceptions\ResourceException;
|
|
use Anikeen\Id\Result;
|
|
use JsonSerializable;
|
|
|
|
#[\AllowDynamicProperties]
|
|
abstract class BaseResource implements JsonSerializable
|
|
{
|
|
public Result $result;
|
|
|
|
/**
|
|
* @throws ResourceException
|
|
*/
|
|
public function __construct(callable $callable)
|
|
{
|
|
$this->result = $callable();
|
|
|
|
if (!$this->result->success()) {
|
|
if (($this->result->data->error ?? null) === 'confirmation_required') {
|
|
throw new ConfirmationRequiredException(
|
|
$this->result->data->message ?? 'The user has to confirm this on Anikeen ID.',
|
|
$this->result->response->getStatusCode(),
|
|
$this->result->data->confirmation_url ?? null,
|
|
);
|
|
}
|
|
|
|
throw new ResourceException(sprintf('%s for resource [%s]', rtrim($this->result->data->message, '.'), get_called_class()), $this->result->response->getStatusCode());
|
|
}
|
|
|
|
foreach ($this->result->data as $key => $value) {
|
|
if (!property_exists($this, $key)) {
|
|
$this->{$key} = $value;
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Returns the collection of resources as a JSON string.
|
|
*/
|
|
public function jsonSerialize(): array
|
|
{
|
|
return $this->toArray();
|
|
}
|
|
|
|
/**
|
|
* Returns the collection of resources as an array.
|
|
*/
|
|
public function toArray(): array
|
|
{
|
|
return (array)$this->result->data;
|
|
}
|
|
|
|
public function __get(string $name)
|
|
{
|
|
return null;
|
|
}
|
|
|
|
public function __isset(string $name): bool
|
|
{
|
|
return false;
|
|
}
|
|
}
|