106 lines
2.7 KiB
PHP
106 lines
2.7 KiB
PHP
<?php
|
||
|
||
declare(strict_types=1);
|
||
|
||
namespace MonetaPhpShop\protocol;
|
||
|
||
/**
|
||
* Êîäû `MNT_RESULT_CODE` îòâåòîâ ìîäóëÿ (`MONETA.Assistant.ru.pdf`, ãë. 4–5;
|
||
* `cmsspecification.pdf`, «Ïàðàìåòðû îòâåòà»).
|
||
*
|
||
* Íà Check URL êîä îïèñûâàåò ñîñòîÿíèå çàêàçà; íà Pay URL ñåðâèñ ñ÷èòàåò
|
||
* óâåäîìëåíèå äîñòàâëåííûì òîëüêî ïðè 200, ïðè 100/302/402 ïîâòîðÿåò åãî,
|
||
* ïðè 500 ïðåêðàùàåò ïîïûòêè. Value-îáúåêò âìåñòî enum — ìîäóëü ðàáîòàåò íà PHP 7.4.
|
||
*/
|
||
final class ResultCode
|
||
{
|
||
/** Îòâåò ñîäåðæèò ñóììó çàêàçà — â ïðîâåðî÷íîì çàïðîñå `MNT_AMOUNT` íå áûëî. */
|
||
public const WITH_AMOUNT = 100;
|
||
|
||
/** Çàêàç îïëà÷åí, óâåäîìëåíèå äîñòàâëåíî. */
|
||
public const PAID = 200;
|
||
|
||
/** Çàêàç â îáðàáîòêå, òî÷íûé ñòàòóñ îïðåäåëèòü íåëüçÿ. */
|
||
public const IN_PROGRESS = 302;
|
||
|
||
/** Çàêàç ñîçäàí è ãîòîâ ê îïëàòå. */
|
||
public const AWAITING_PAYMENT = 402;
|
||
|
||
/** Çàêàç íåàêòóàëåí (îòìåí¸í, íå íàéäåí); ñåðâèñ ïðåêðàùàåò ïîâòîðû. */
|
||
public const REJECTED = 500;
|
||
|
||
/**
|
||
* Òåêñò äëÿ `MNT_DESCRIPTION` / `description`: áåç êàâû÷åê, `&`, `$`, `#`
|
||
* è ñëýøåé — òðåáîâàíèå `cmsspecification.pdf` ê çíà÷åíèÿì îòâåòà.
|
||
*/
|
||
private const DESCRIPTIONS = [
|
||
self::WITH_AMOUNT => 'Order amount',
|
||
self::PAID => 'Order is paid',
|
||
self::IN_PROGRESS => 'Order is being processed',
|
||
self::AWAITING_PAYMENT => 'Order created, but not paid',
|
||
self::REJECTED => 'Order is not available',
|
||
];
|
||
|
||
/** @var int */
|
||
private $value;
|
||
|
||
private function __construct(int $value)
|
||
{
|
||
$this->value = $value;
|
||
}
|
||
|
||
public static function fromValue(int $value): self
|
||
{
|
||
if (!array_key_exists($value, self::DESCRIPTIONS)) {
|
||
throw new \InvalidArgumentException('Íåèçâåñòíûé êîä MNT_RESULT_CODE.');
|
||
}
|
||
|
||
return new self($value);
|
||
}
|
||
|
||
public static function withAmount(): self
|
||
{
|
||
return new self(self::WITH_AMOUNT);
|
||
}
|
||
|
||
public static function paid(): self
|
||
{
|
||
return new self(self::PAID);
|
||
}
|
||
|
||
public static function inProgress(): self
|
||
{
|
||
return new self(self::IN_PROGRESS);
|
||
}
|
||
|
||
public static function awaitingPayment(): self
|
||
{
|
||
return new self(self::AWAITING_PAYMENT);
|
||
}
|
||
|
||
public static function rejected(): self
|
||
{
|
||
return new self(self::REJECTED);
|
||
}
|
||
|
||
public function getValue(): int
|
||
{
|
||
return $this->value;
|
||
}
|
||
|
||
public function description(): string
|
||
{
|
||
return self::DESCRIPTIONS[$this->value];
|
||
}
|
||
|
||
public function equals(self $other): bool
|
||
{
|
||
return ($this->value === $other->value);
|
||
}
|
||
|
||
public function __toString(): string
|
||
{
|
||
return (string) $this->value;
|
||
}
|
||
}
|