protected static function _genericCreate($class, $params = null, $apiKey = null)
 {
     $logger = self::getLoggerHandler();
     $logger->info("Transaction START");
     self::_validateCall('create', $params, $apiKey);
     $requestor = new CitrusPay_ApiRequestor($apiKey);
     $url = self::classUrl($class);
     $hmackey = self::_generateHmacKey($params, $apiKey);
     $params['signature'] = $hmackey;
     list($response, $apiKey) = $requestor->request('post', $url, $params);
     $cpObj = CitrusPay_Util::convertToCitrusPayObject($response, $apiKey, $class);
     $retObj = self::genericConstruct($cpObj, $class);
     $logger->info("Transaction END for Moto Request" . $class);
     return $retObj;
 }
 public function refreshFrom($values, $apiKey, $class, $partial = false)
 {
     $this->_apiKey = $apiKey;
     // Wipe old state before setting new.  This is useful for e.g. updating a
     // customer, where there is no persistent card parameter.  Mark those values
     // which don't persist as transient
     if ($partial) {
         $removed = new CitrusPay_Util_Set();
     } else {
         $removed = array_diff(array_keys($this->_values), array_keys($values));
     }
     foreach ($removed as $k) {
         if (self::$_permanentAttributes->includes($k)) {
             continue;
         }
         unset($this->{$k});
     }
     foreach ($values as $k => $v) {
         if (self::$_permanentAttributes->includes($k)) {
             continue;
         }
         $this->_values[$k] = CitrusPay_Util::convertToCitrusPayObject($v, $apiKey, $class);
         $this->_transientValues->discard($k);
         $this->_unsavedValues->discard($k);
     }
 }