protected function massAssign($data = [])
    {
        if (is_array($data)) {
            /**
             * Check if the passed in array contains a sub customer array.
             * If a matching array is found, it is passed to the set customer method.
             * ['customer' => [ 'name'  => 'Victor Ariama', 'email' => 'contact@ovac4u.com', 'number'=> '0553577261']]
             */
            if (array_key_exists('customer', $data)) {
                $this->setCustomer($data['customer']);
            }
            /**
             * Check if the array contains an amount key and value.
             * If a matching key and value is found, assign the amount that was passed in
             * to the amount on the instance.
             *
             * ['amount' => 100.90]
             */
            if (array_key_exists('amount', $data)) {
                $this->setAmount($data['amount']);
            }
            /**
             * Check if the array contains a description key and value.
             * If a matching key and value is found, assign the description that was passed in
             * to the description on the instance.
             *
             *  ['description' => 'Some imformation about the payment']
             */
            if (array_key_exists('description', $data)) {
                $this->setDescription($data['description']);
            }
            /**
             * Check if the array contains a clientReference key and value.
             * If a matching key and value is found, assign the clientReference that was passed in
             * to the clientReference on the instance.
             *
             *  ['clientReference' => 'UserID: 121212']
             */
            if (array_key_exists('clientReference', $data)) {
                $this->setClientReference($data['clientReference']);
            }
            /**
             * Check if the array contains a channel key and value.
             * If a matching key and value is found, assign the channel that was passed in
             * to the token on the instance.
             *
             * ['channel' => 'mtn-gh']
             */
            if (array_key_exists('channel', $data)) {
                $this->setChannel($data['channel']);
            }
            /**
             * Check if the looks like or contains callback* (wildcard)
             * If a matching key and value is found, it is passed to the setCallback
             * method and is processed based on whatever data is provided.
             *
             * The keys are handled dynamically.
             *
             * ['callback*' => ***]
             */
            if (preg_grep('/^callback/i', array_keys($data))) {
                $this->setCallback($data);
            }

            $this->assignOnReceiveMoneyInstance($data);
            $this->assignOnSendMoneyInstance($data);
        }

        return $this;
    }