Files

106 lines
2.7 KiB
PHP
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?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;
}
}