getStatus(); switch ($status->getState()) { case AmazonAuthorizationStatus::STATE_CLOSED: switch ($status->getReasonCode()) { case AmazonAuthorizationStatus::REASON_MAX_CAPTURES_PROCESSED: return [ 'result' => true, 'reason' => AmazonAuthorizationStatus::REASON_MAX_CAPTURES_PROCESSED ]; } break; case AmazonAuthorizationStatus::STATE_OPEN: case AmazonAuthorizationStatus::STATE_PENDING: return ['result' => true, 'reason' => $status->getState()]; case AmazonAuthorizationStatus::STATE_DECLINED: return ['result' => false, 'reason' => $this->getReasonCode($status)]; } return ['result' => false, 'reason' => $status->getState()]; } /** * Need to ensure three specific reason codes come through during processing. * * @param AmazonAuthorizationStatus $status * @return null|string */ protected function getReasonCode(AmazonAuthorizationStatus $status) { switch ($status->getReasonCode()) { case AmazonAuthorizationStatus::REASON_TRANSACTION_TIMEOUT: return 'timeout'; case AmazonAuthorizationStatus::REASON_AMAZON_REJECTED: case AmazonAuthorizationStatus::REASON_PROCESSING_FAILURE: return 'hard_decline'; case AmazonAuthorizationStatus::REASON_INVALID_PAYMENT_METHOD: return 'soft_decline'; } return $status->getReasonCode(); } }