public static function getPlan($planCode)
 {
     $uri = RecurlyClient::PATH_PLANS . urlencode($planCode);
     $result = RecurlyClient::__sendRequest($uri, 'GET');
     if (preg_match("/^2..\$/", $result->code)) {
         return RecurlyClient::__parse_xml($result->response, 'plan');
     } else {
         if ($result->code == '404') {
             return null;
         } else {
             throw new RecurlyException("Could not get subscription plan {$planCode}: {$result->response} -- ({$result->code})");
         }
     }
 }
 public static function getSubscription($accountCode)
 {
     $uri = RecurlyClient::PATH_ACCOUNTS . urlencode($accountCode) . RecurlyClient::PATH_ACCOUNT_SUBSCRIPTION;
     $result = RecurlyClient::__sendRequest($uri, 'GET');
     if (preg_match("/^2..\$/", $result->code)) {
         return RecurlyClient::__parse_xml($result->response, 'subscription');
     } else {
         if ($result->code == '404') {
             return null;
         } else {
             throw new RecurlyException("Could not get subscription for {$accountCode}: {$result->response} -- ({$result->code})");
         }
     }
 }
 public function update()
 {
     $uri = RecurlyClient::PATH_ACCOUNTS . urlencode($this->account_code) . RecurlyClient::PATH_BILLING_INFO;
     $data = $this->getXml();
     $result = RecurlyClient::__sendRequest($uri, 'PUT', $data);
     if (preg_match("/^2..\$/", $result->code)) {
         return RecurlyClient::__parse_xml($result->response, 'billing_info');
     } else {
         if (strpos($result->response, '<errors>') > 0 && $result->code == 422) {
             throw new RecurlyValidationException($result->code, $result->response);
         } else {
             throw new RecurlyException("Could not update the billing information for {$this->account_code}: {$result->response} ({$result->code})");
         }
     }
 }
 public static function createInvoice($accountCode)
 {
     $uri = RecurlyClient::PATH_ACCOUNTS . urlencode($accountCode) . RecurlyClient::PATH_INVOICES;
     $result = RecurlyClient::__sendRequest($uri, 'POST');
     if (preg_match("/^2..\$/", $result->code)) {
         return RecurlyClient::__parse_xml($result->response, 'invoice');
     } else {
         if ($result->code == 422) {
             return null;
             // No charges or credits to invoice.
         } else {
             throw new RecurlyException("Could not create a charge for {$account_code}: {$result->response} ({$result->code})");
         }
     }
 }
 public function create()
 {
     $uri = RecurlyClient::PATH_TRANSACTIONS;
     $data = $this->getXml();
     $result = RecurlyClient::__sendRequest($uri, 'POST', $data);
     if (preg_match("/^2..\$/", $result->code)) {
         return RecurlyClient::__parse_xml($result->response, 'transaction');
     } else {
         if (strpos($result->response, '<errors>') > 0 && $result->code == 422) {
             throw new RecurlyValidationException($result->code, $result->response);
         } else {
             throw new RecurlyException("Could not create a transaction for {$this->account->account_code}: {$result->response} -- ({$result->code})");
         }
     }
 }
 public function RecurlyValidationException($http_code, $xml, $model = null)
 {
     $errors = RecurlyClient::__parse_xml($xml, 'error', true);
     $this->errors = is_array($errors) ? $errors : array($errors);
     $this->xml = $xml;
     $this->model = $model;
     $messages = array();
     foreach ($this->errors as $err) {
         if ($err != null) {
             $msg = $err->message[strlen($err->message) - 1] != '.' ? $err->message : substr($err->message, 0, strlen($err->message) - 1);
             if ($err->field != null) {
                 $msg = $err->field . ' ' . $msg;
             }
             $messages[] = $msg;
         }
     }
     $message = implode('. ', $messages) . '.';
     parent::__construct($message, intval($http_code));
 }
 public static function getResults()
 {
     $model_type = $_GET['type'];
     self::_validateQueryString($_GET['confirm'], $model_type, $_GET['status'], $_GET['result']);
     $uri = RecurlyClient::PATH_TRANSPARENT . RecurlyClient::PATH_TRANSPARENT_RESULTS . $_GET['result'];
     $result = RecurlyClient::__sendRequest($uri);
     if (preg_match("/^2..\$/", $result->code)) {
         $model = RecurlyClient::__parse_xml($result->response, $model_type, true);
         return $model;
     } else {
         if (strpos($result->response, '<errors>') > 0 && $result->code == 422) {
             $model = RecurlyClient::__parse_xml($result->response, $model_type, true);
             throw new RecurlyValidationException($result->code, $result->response, $model);
         } else {
             if (strpos($result->response, '<errors>') > 0 && $result->code == 404) {
                 $model = RecurlyClient::__parse_xml($result->response, 'error', true);
                 throw new RecurlyValidationException($result->code, $result->response, $model);
             } else {
                 throw new RecurlyException("Could not retrieve results with result key: {$_GET['result']} (Status: {$_GET['status']})");
             }
         }
     }
 }
 private function _RecurlyRequest($type)
 {
     // because recurly doesn't expose through their api some of the functions
     // that we would like to utilize…like pending charges, we have simple wrapper here
     // to help us get that data out of securely.
     $user_id = $this->account->id;
     switch ($type) {
         case "transactions":
             $path = Recurly_Client::PATH_TRANSACTIONS;
             $object = 'transaction';
             $exception = "Could not list transactions for account {$user_id}:";
             break;
         case "pendingcharges":
             $path = RecurlyClient::PATH_ACCOUNT_CHARGES . "?show=pending";
             $object = 'charge';
             $exception = "Could not list charges for account {$user_id}:";
             break;
         case "invoices":
             $path = RecurlyClient::PATH_ACCOUNT_INVOICES;
             $object = 'invoice';
             $exception = "Could not list invoices for account {$user_id}:";
             break;
         case "charges":
             $path = RecurlyClient::PATH_ACCOUNT_CHARGES;
             $object = 'charge';
             $exception = "Could not list charges for account {$user_id}:";
             break;
         case "credits":
             $path = RecurlyClient::PATH_ACCOUNT_CREDITS;
             $object = 'credit';
             $exception = "Could not list charges for account {$user_id}:";
             break;
     }
     $uri = RecurlyClient::PATH_ACCOUNTS . urlencode($this->account->account_code) . $path;
     $result = RecurlyClient::__sendRequest($uri);
     if (preg_match("/^2..\$/", $result->code) || RECURLY_ENVIRONMENT == 'sandbox') {
         $results = RecurlyClient::__parse_xml($result->response, $object);
         return $results != null && !is_array($results) ? array($results) : $results;
     } else {
         if (strpos($result->response, '<errors>') > 0 && $result->code == 422) {
             throw new RecurlyValidationException($result->code, $result->response);
         } else {
             throw new RecurlyException($exception . " {$result->response} ({$result->code})");
         }
     }
 }
 public function listInvoices()
 {
     $uri = RecurlyClient::PATH_ACCOUNTS . urlencode($this->account_code) . RecurlyClient::PATH_ACCOUNT_INVOICES;
     $result = RecurlyClient::__sendRequest($uri);
     if (preg_match("/^2..\$/", $result->code)) {
         $invoices = RecurlyClient::__parse_xml($result->response, 'invoice');
         return $invoices != null && !is_array($invoices) ? array($invoices) : $invoices;
     } else {
         if (strpos($result->response, '<errors>') > 0 && $result->code == 422) {
             throw new RecurlyValidationException($result->code, $result->response);
         } else {
             throw new RecurlyException("Could not list invoices for account {$this->account_code}: {$result->response} ({$result->code})");
         }
     }
 }