クラス
State
Model representing an Amazon Charge
object state
ソース ソース
ファイル: src/Models/Charge/State.php
class State extends ErrorStore implements JsonSerializable, TransactionState { const AUTHORIZATION_INITIATED = 'AuthorizationInitiated'; const AUTHORIZED = 'Authorized'; const CAPTURE_INITIATED = 'CaptureInitiated'; const CAPTURED = 'Captured'; const CANCELED = 'Canceled'; const DECLINED = 'Declined'; const STATE_TO_LOG_ACTION = [ self::AUTHORIZATION_INITIATED => Log::ACTION_ASYNC_AUTHORIZE, self::AUTHORIZED => Log::ACTION_AUTHORIZE, self::CAPTURE_INITIATED => Log::ACTION_ASYNC_CAPTURE_PAYMENTS, self::CAPTURED => Log::ACTION_CAPTURE_PAYMENTS, ]; /** * Map of constant names and their corresponding values * * @var string[] */ public static $stateMap = [ 'AUTHORIZATION_INITIATED' => self::AUTHORIZATION_INITIATED, 'AUTHORIZED' => self::AUTHORIZED, 'CAPTURE_INITIATED' => self::CAPTURE_INITIATED, 'CAPTURED' => self::CAPTURED, 'CANCELED' => self::CANCELED, 'DECLINED' => self::DECLINED, ]; /** * State to CSS class map * * @var string[] */ private $cssClassMap = [ self::AUTHORIZATION_INITIATED => 'card-auth-init', self::AUTHORIZED => 'card-auth', self::CAPTURE_INITIATED => 'card-gathering-init', self::CAPTURED => 'card-gathering', self::CANCELED => 'card-delete', self::DECLINED => 'card-declined', ]; /** * `statusDetails`'s `state` key value * * @var string */ private $state; /** * `statusDetails`'s `reasonCode` key value * * @var string|null */ private $reasonCode; /** * `statusDetails`'s `reasonDescription` key value * * @var string|null */ private $reasonDescription; /** * Charge Permission ID * * @var string|null */ private $chargePermissionId; /** * Initializes a Charge `State` object * * @author Evan D Shaw <evandanielshaw@gmail.com> * @param string $state * @param string|null $reasonCode * @param string|null $reasonDescription * @return void */ public function __construct($state, $reasonCode = null, $reasonDescription = null) { $this->state = $state; $this->reasonCode = $reasonCode; $this->reasonDescription = $reasonDescription; parent::__construct(); $this->populate(); if ($this->reasonCode !== null) { if (isset($this->getErrorCodeMap()[$reasonCode])) { $error = $this->getErrorCodeMap()[$reasonCode]; $this->reasonDescription = is_callable($error->message) ? $this->reasonDescription : $error->message; } } } /** * Setter for `chargePermissionId` * * @author Evan D Shaw <evandanielshaw@gmail.com> * @param string $chargePermissionId * @return void */ public function setChargePermissionId($chargePermissionId) { $this->chargePermissionId = $chargePermissionId; } /** * Getter for `chargePermissionId` * * @author Evan D Shaw <evandanielshaw@gmail.com> * @return string|null */ public function getTransactionId() { return $this->chargePermissionId; } /** * Returns human-readable text representation of current state * * @author Evan D Shaw <evandanielshaw@gmail.com> * @return string */ public function getDisplayText() { $text = ''; switch ($this->state) { case self::AUTHORIZATION_INITIATED: $text = __('Authorization Initiated', 'wcexaap'); break; case self::AUTHORIZED: $text = __('Authorized', 'wcexaap'); break; case self::CAPTURE_INITIATED: $text = __('Capture Initiated', 'wcexaap'); break; case self::CAPTURED: $text = __('Captured', 'wcexaap'); break; case self::CANCELED: $text = __('Canceled', 'wcexaap'); break; case self::DECLINED: $text = __('Declined', 'wcexaap'); break; } return $text; } /** * Returns CSS class for the current state * * @author Evan D Shaw <evandanielshaw@gmail.com> * @return string */ public function getCssClass() { return isset($this->cssClassMap[$this->state]) ? $this->cssClassMap[$this->state] : ''; } /** * Returns `GenericError` instance created from a `Canceled` state. * * This method returns an `UNKNOWN_ERROR` `GenericError` instance if the state * is not canceled. * * @author Evan D Shaw <evandanielshaw@gmail.com> * @return GenericError */ public function getErrorResponseFromCanceledState() { $error = $this->getErrorResponse(self::UNKNOWN_ERROR); if ($this->state !== self::CANCELED) { return $error; } return $this->getErrorResponse($this->reasonCode, [$this->reasonDescription]); } /** * Returns `GenericError` instance created from a `Declined` state. * * This method returns an `UNKNOWN_ERROR` `GenericError` instance if the state * is not declined. * * @author Evan D Shaw <evandanielshaw@gmail.com> * @return GenericError */ public function getErrorResponseFromDeclinedState() { $error = $this->getErrorResponse(self::UNKNOWN_ERROR); if ($this->state !== self::DECLINED) { return $error; } return $this->getErrorResponse($this->reasonCode, [$this->reasonDescription]); } /** * Returns `true` if state is 'AuthorizationInitiated', `false` otherwise * * @author Evan D Shaw <evandanielshaw@gmail.com> * @return bool */ public function isAuthorizationInitiated() { return $this->state === self::AUTHORIZATION_INITIATED; } /** * Returns `true` if state is 'Authorized', `false` otherwise * * @author Evan D Shaw <evandanielshaw@gmail.com> * @return bool */ public function isAuthorized() { return $this->state === self::AUTHORIZED; } /** * Returns `true` if state is 'CaptureInitiated', `false` otherwise * * @author Evan D Shaw <evandanielshaw@gmail.com> * @return bool */ public function isCaptureInitiated() { return $this->state === self::CAPTURE_INITIATED; } /** * Returns `true` if state is 'Captured', `false` otherwise * * @author Evan D Shaw <evandanielshaw@gmail.com> * @return bool */ public function isCaptured() { return $this->state === self::CAPTURED; } /** * Returns `true` if state is 'Canceled', `false` otherwise * * @author Evan D Shaw <evandanielshaw@gmail.com> * @return bool */ public function isCanceled() { return $this->state === self::CANCELED; } /** * Returns `true` if state is 'Declined', `false` otherwise * * @author Evan D Shaw <evandanielshaw@gmail.com> * @return bool */ public function isDeclined() { return $this->state === self::DECLINED; } /** * Returns `true` if the state cannot be modified, `false` otherwise * * @author Evan D Shaw <evandanielshaw@gmail.com> * @return bool */ public function isUnmodifiable() { return $this->state === self::CANCELED || $this->state === self::AUTHORIZATION_INITIATED; } /** * Getter for `state` * * @author Evan D Shaw <evandanielshaw@gmail.com> * @return string */ public function getState() { return $this->state; } /** * Getter for `reasonCode` * * @author Evan D Shaw <evandanielshaw@gmail.com> * @return string|null */ public function getReasonCode() { return $this->reasonCode; } /** * Getter for `reasonDescription` * * @author Evan D Shaw <evandanielshaw@gmail.com> * @return string|null */ public function getReasonDescription() { return $this->reasonDescription; } /** * Getter for `cssClassMap` * * @author Evan D Shaw <evandanielshaw@gmail.com> * @return string[] */ public function getCssClassMap() { return $this->cssClassMap; } /** * Returns JSON object when `json_encode` is invoked on an instance of this class * * @author Evan D Shaw <evandanielshaw@gmail.com> * @return array */ public function jsonSerialize() { return [ 'state' => $this->state, 'reasonCode' => $this->reasonCode, 'reasonDescription' => $this->reasonDescription, ]; } /** * `Charge` specific errors for a `Canceled` or `Declined` state * * Note that there are certain `reasonCodes` that do not necessarily indicate that * an error occured (ie. `MerchantCanceled`, `ChargePermissionCanceled`, etc.). * * @author Evan D Shaw <evandanielshaw@gmail.com> * @return void * @throws InvalidArgumentException Thrown if the `errorcode` is already added. */ public function populate() { // Canceled $this->addError(new GenericError( CanceledReasonCodes::EXPIRED_UNUSED, 'EXPIRED_UNUSED', 400, function ($message) { return $message; }, __('Funds have not been captured within 30 days. The charge has expired.', 'wcexaap') )); $this->addError(new GenericError( CanceledReasonCodes::AMAZON_CANCELED, 'AMAZON_CANCELED', 503, function ($message) { return $message; }, __('Amazon canceled the charge.', 'wcexaap') )); $this->addError(new GenericError( CanceledReasonCodes::MERCHANT_CANCELED, 'MERCHANT_CANCELED', 400, function ($message) { return $message; }, __('The charge has been canceled.', 'wcexaap') )); $this->addError(new GenericError( CanceledReasonCodes::CHARGE_PERMISSION_CANCELED, 'CHARGE_PERMISSION_CANCELED', 400, function ($message) { return $message; }, __('The charge has been canceled.', 'wcexaap') )); $this->addError(new GenericError( CanceledReasonCodes::BUYER_CANCELED, 'BUYER_CANCELED', 400, function ($message) { return $message; }, __('The charge was canceled', 'wcexaap') )); // Declined $this->addError(new GenericError( DeclinedReasonCodes::SOFT_DECLINED, 'SOFT_DECLINED', 403, function ($message) { return $message; }, __('The charge has been declined.', 'wcexaap') )); $this->addError(new GenericError( DeclinedReasonCodes::HARD_DECLINED, 'HARD_DECLINED', 403, function ($message) { return $message; }, __('The charge has been declined.', 'wcexaap') )); $this->addError(new GenericError( DeclinedReasonCodes::AMAZON_REJECTED, 'AMAZON_REJECTED', 403, function ($message) { return $message; }, __('The charge was declined by Amazon.', 'wcexaap') )); $this->addError(new GenericError( DeclinedReasonCodes::PROCESSING_FAILURE, 'PROCESSING_FAILURE', 500, function ($message) { return $message; }, __('Amazon was unable to process the charge due to an internal error.', 'wcexaap') )); $this->addError(new GenericError( DeclinedReasonCodes::TRANSACTION_TIMED_OUT, 'TRANSACTION_TIMED_OUT', 503, function ($message) { return $message; }, __('The transaction timed out.', 'wcexaap') )); } }
- __construct — Initializes a Charge State object
- getCssClass — Returns CSS class for the current state
- getCssClassMap — Getter for cssClassMap
- getDisplayText — Returns human-readable text representation of current state
- getErrorResponseFromCanceledState — Returns GenericError instance created from a Canceled state.
- getErrorResponseFromDeclinedState — Returns GenericError instance created from a Declined state.
- getReasonCode — Getter for reasonCode
- getReasonDescription — Getter for reasonDescription
- getState — Getter for state
- getTransactionId — Getter for chargePermissionId
- isAuthorizationInitiated — Returns true if state is 'AuthorizationInitiated', false otherwise
- isAuthorized — Returns true if state is 'Authorized', false otherwise
- isCanceled — Returns true if state is 'Canceled', false otherwise
- isCaptured — Returns true if state is 'Captured', false otherwise
- isCaptureInitiated — Returns true if state is 'CaptureInitiated', false otherwise
- isDeclined — Returns true if state is 'Declined', false otherwise
- isUnmodifiable — Returns true if the state cannot be modified, false otherwise
- jsonSerialize — Returns JSON object when json_encode is invoked on an instance of this class
- populate — Charge specific errors for a Canceled or Declined state
- setChargePermissionId — Setter for chargePermissionId