feat: moneta 2.0, MONETA.Assistant payment module for PHPShop 6.7+
This commit is contained in:
@@ -0,0 +1,105 @@
|
||||
<?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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user