feat: moneta 2.0, MONETA.Assistant payment module for PHPShop 6.7+

This commit is contained in:
2026-10-27 11:45:22 +03:00
parent 78b7405637
commit f8c12ce44a
82 changed files with 7387 additions and 58 deletions
+105
View File
@@ -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;
}
}