feat: moneta 2.0, MONETA.Assistant payment module for PHPShop 6.7+
This commit is contained in:
@@ -0,0 +1,76 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace MonetaPhpShop\order;
|
||||
|
||||
use MonetaPhpShop\ModuleInfo;
|
||||
use MonetaPhpShop\protocol\AssistantProtocol;
|
||||
use MonetaPhpShop\Settings;
|
||||
|
||||
/**
|
||||
* Ìîæíî ëè ñåé÷àñ îïëàòèòü çàêàç ÷åðåç Ìîíåòó. Îäíî ïðàâèëî äëÿ êíîïêè îïëàòû
|
||||
* è äëÿ Check URL, ÷òîáû ôîðìà íå âûäàâàëàñü òàì, ãäå ïðîâåðî÷íûé çàïðîñ îòêàæåò.
|
||||
*
|
||||
* Çíà÷åíèÿ êîíñòàíò — êîäû ïðè÷èí äëÿ æóðíàëà ìîäóëÿ; íå ïåðåèìåíîâûâàòü.
|
||||
*/
|
||||
final class PaymentEligibility
|
||||
{
|
||||
public const PAYABLE = 'payable';
|
||||
public const NOT_CONFIGURED = 'not_configured';
|
||||
public const OTHER_PAYMENT_METHOD = 'other_payment_method';
|
||||
public const ALREADY_PAID = 'already_paid';
|
||||
public const CANCELLED = 'cancelled';
|
||||
public const AWAITING_STATUS = 'awaiting_status';
|
||||
public const UNSUPPORTED_CURRENCY = 'unsupported_currency';
|
||||
public const ZERO_AMOUNT = 'zero_amount';
|
||||
|
||||
/** Ñòàòóñ PHPShop «Àííóëèðîâàí» (`PHPShopOrderFunction::changeStatus()` âîçâðàùàåò òîâàð íà ñêëàä). */
|
||||
public const STATUS_CANCELLED = 1;
|
||||
|
||||
private function __construct() {}
|
||||
|
||||
/**
|
||||
* @param string $shopCurrency ISO-êîä âàëþòû çàêàçà èç PHPShop (`getDefaultValutaIso(true)`)
|
||||
*/
|
||||
public static function check(Settings $settings, Order $order, string $shopCurrency): string
|
||||
{
|
||||
if (!$settings->isConfigured()) {
|
||||
return self::NOT_CONFIGURED;
|
||||
}
|
||||
|
||||
if ($order->getPaymentMethodId() !== ModuleInfo::PAYMENT_METHOD_ID) {
|
||||
return self::OTHER_PAYMENT_METHOD;
|
||||
}
|
||||
|
||||
if (self::isPaid($settings, $order)) {
|
||||
return self::ALREADY_PAID;
|
||||
}
|
||||
|
||||
if ($order->getStatusId() === self::STATUS_CANCELLED) {
|
||||
return self::CANCELLED;
|
||||
}
|
||||
|
||||
if (!$settings->isPayableRightAfterCheckout() && $order->getStatusId() !== $settings->getPayableStatus()) {
|
||||
return self::AWAITING_STATUS;
|
||||
}
|
||||
|
||||
if (AssistantProtocol::normalizeCurrency($shopCurrency) === null) {
|
||||
return self::UNSUPPORTED_CURRENCY;
|
||||
}
|
||||
|
||||
if (!$order->getAmount()->isPositive()) {
|
||||
return self::ZERO_AMOUNT;
|
||||
}
|
||||
|
||||
return self::PAYABLE;
|
||||
}
|
||||
|
||||
/**
|
||||
* Îïëà÷åí: ôëàã `paid` ÿäðà èëè ñòàòóñ «ïîñëå îïëàòû» èç íàñòðîåê ìîäóëÿ.
|
||||
*/
|
||||
public static function isPaid(Settings $settings, Order $order): bool
|
||||
{
|
||||
return $order->isPaidFlag() || ($order->getStatusId() === $settings->getPaidStatus());
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user