クラス
State
Refund object stateソース ソース
ファイル: src/Models/Refund/State.php
class State extends ErrorStore implements JsonSerializable, TransactionState
{
const REFUND_INITIATED = 'RefundInitiated';
const REFUNDED = 'Refunded';
const DECLINED = 'Declined';
const STATE_TO_LOG_ACTION = [
self::REFUND_INITIATED => Log::ACTION_ASYNC_REFUND,
self::REFUNDED => Log::ACTION_REFUND,
];
/**
* Map of constant names and their corresponding values
*
* @var string[]
*/
public static $stateMap = [
'REFUND_INITIATED' => self::REFUND_INITIATED,
'REFUNDED' => self::REFUNDED,
'DECLINED' => self::DECLINED,
];
/**
* State to CSS class map
*
* @var string[]
*/
private $cssClassMap = [
self::REFUND_INITIATED => 'card-refund-init',
self::REFUNDED => 'card-refunded',
self::DECLINED => 'card-refund-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 Refund `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;
$this->populate();
}
/**
* 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::REFUND_INITIATED:
$text = __('Refund Initiated', 'wcexaap');
break;
case self::REFUNDED:
$text = __('Refunded', 'wcexaap');
break;
case self::DECLINED:
$text = __('Refund 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 `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 'RefundInitiated', `false` otherwise
*
* @author Evan D Shaw <evandanielshaw@gmail.com>
* @return bool
*/
public function isRefundInitiated() {
return $this->state === self::REFUND_INITIATED;
}
/**
* Returns `true` if state is 'Refunded', `false` otherwise
*
* @author Evan D Shaw <evandanielshaw@gmail.com>
* @return bool
*/
public function isRefunded() {
return $this->state === self::REFUNDED;
}
/**
* 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::REFUND_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,
];
}
/**
* `Refund` specific errors for a `Declined` state
*
* From the docs:
*
* **AmazonRejected** - Amazon rejected the refund. You should issue a refund to the buyer
* in an alternate manner (for example, a gift card or store credit)
*
* **ProcessingFailure** - Amazon could not process the transaction because of an internal
* processing error, or because the buyer has already received a refund from an A-to-z
* claim, or a chargeback. You should only retry the refund if the Capture object is in
* the Completed state. Otherwise, you should refund the buyer in an alternative way (for
* example, a store credit or a check)
*
* @author Evan D Shaw <evandanielshaw@gmail.com>
* @return void
* @throws InvalidArgumentException Thrown if the `errorcode` is already added.
*/
public function populate() {
// Declined
$this->addError(new GenericError(
DeclinedReasonCodes::AMAZON_REJECTED,
'AMAZON_REJECTED',
403,
function ($message) {
return $message;
},
__('Amazon rejected the refund. You should issue a refund to the buyer in an alternate manner (for example, a gift card or store credit)', 'wcexaap')
));
$this->addError(new GenericError(
DeclinedReasonCodes::PROCESSING_FAILURE,
'PROCESSING_FAILURE',
500,
function ($message) {
return $message;
},
__('Amazon could not process the transaction because of an internal processing error, or because the buyer has already received a refund from an A-to-z claim, or a chargeback', 'wcexaap')
));
}
}
- __construct — Initializes a Refund `State` object
- getCssClass — Returns CSS class for the current state
- getCssClassMap — Getter for `cssClassMap`
- getDisplayText — Returns human-readable text representation of current 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`
- isDeclined — Returns `true` if state is 'Declined', `false` otherwise
- isRefunded — Returns `true` if state is 'Refunded', `false` otherwise
- isRefundInitiated — Returns `true` if state is 'RefundInitiated', `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 — `Refund` specific errors for a `Declined` state
- setChargePermissionId — Setter for `chargePermissionId`