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 function clear()
 {
     $uri = RecurlyClient::PATH_ACCOUNTS . urlencode($this->account_code) . RecurlyClient::PATH_BILLING_INFO;
     $result = RecurlyClient::__sendRequest($uri, 'DELETE');
     if (preg_match("/^2..\$/", $result->code)) {
         return true;
     } else {
         if (strpos($result->response, '<errors>') > 0 && $result->code == 422) {
             throw new RecurlyValidationException($result->code, $result->response);
         } else {
             throw new RecurlyException("Could not clear the billing info for {$this->accountCode}: {$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 void()
 {
     $uri = RecurlyClient::PATH_TRANSACTIONS . urlencode($this->id);
     $uri .= '?action=void';
     print $uri;
     $result = RecurlyClient::__sendRequest($uri, 'DELETE');
     if (preg_match("/^2..\$/", $result->code)) {
         return true;
     } else {
         if (strpos($result->response, '<errors>') > 0 && $result->code == 422) {
             throw new RecurlyValidationException($result->code, $result->response);
         } else {
             throw new RecurlyException("Could not void the transaction: {$result->response} ({$result->code})");
         }
     }
 }
 public function refund($amount_in_cents = null)
 {
     $uri = RecurlyClient::PATH_TRANSACTIONS . urlencode($this->id);
     if (!is_null($amount_in_cents)) {
         $uri .= '?amount_in_cents=' . $amount_in_cents;
     }
     $result = RecurlyClient::__sendRequest($uri, 'DELETE');
     if (preg_match("/^2..\$/", $result->code)) {
         return true;
     } else {
         if (strpos($result->response, '<errors>') > 0 && $result->code == 422) {
             throw new RecurlyValidationException($result->code, $result->response);
         } else {
             throw new RecurlyException("Could not refund the transaction: {$result->response} ({$result->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 static function changeSubscription($accountCode, $timeframe = 'now', $newPlanCode = null, $newQuantity = null, $newUnitAmount = null, $addOns = null)
 {
     error_log('<br>quant:' . $newQuantity);
     if (!($timeframe == 'now' || $timeframe == 'renewal')) {
         throw new RecurlyException("The timeframe must be 'now' or 'renewal'.");
     }
     $uri = RecurlyClient::PATH_ACCOUNTS . urlencode($accountCode) . RecurlyClient::PATH_ACCOUNT_SUBSCRIPTION;
     $data = RecurlySubscription::getChangeSubscriptionXml($timeframe, $newPlanCode, $newQuantity, $newUnitAmount, $addOns);
     $result = RecurlyClient::__sendRequest($uri, 'PUT', $data);
     if (preg_match("/^2..\$/", $result->code)) {
         return true;
     } else {
         if (strpos($result->response, '<errors>') > 0 && $result->code == 422) {
             throw new RecurlyValidationException($result->code, $result->response);
         } else {
             throw new RecurlyException("Could not change the subscription for {$accountCode}: {$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})");
         }
     }
 }