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 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 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 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']})");
             }
         }
     }
 }
<?php

require_once '../recurly/recurly.php';
require_once '../wp-blog-header.php';
require_once '../wp-config.php';
require_once '../wp-includes/pluggable.php';
require_once '../wp-includes/registration.php';
// Replace with your Recurly API user credentials
define('RECURLY_API_USERNAME', '*****@*****.**');
define('RECURLY_API_PASSWORD', 'c32fa911fddb4720b02edd04dd3b6635');
define('RECURLY_SUBDOMAIN', 'magicmight-test');
define('RECURLY_ENVIRONMENT', 'sandbox');
//or "production"
//RecurlyClient::SetAuth('*****@*****.**', 'c32fa911fddb4720b02edd04dd3b6635', 'magicmight-test', 'sandbox');
RecurlyClient::SetAuth(RECURLY_API_USERNAME, RECURLY_API_PASSWORD, RECURLY_SUBDOMAIN, RECURLY_ENVIRONMENT);
// Setting timezone for time() function.
date_default_timezone_set('America/New_York');
// Replace with the user's unique ID in your system
$account_id = '14';
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    //Recurly Account
    $account = new RecurlyAccount($account_id);
    $account->username = $_POST['account']['username'];
    $account->first_name = $_POST['account']['first_name'];
    $account->last_name = $_POST['account']['last_name'];
    $account->email = $_POST['account']['email'];
    //Wordpress Account
    $newWordpressUser = array('user_login' => $_POST['account']['username'], 'user_pass' => $_POST['account']['password'], 'user_nicename' => $_POST['account']['first_name'] . ' ' . $_POST['account']['last_name'], 'nickname' => $_POST['account']['first_name'] . ' ' . $_POST['account']['last_name'], 'first_name' => $_POST['account']['first_name'], 'last_name' => $_POST['account']['last_name'], 'display_name' => $_POST['account']['first_name'] . ' ' . $_POST['account']['last_name'], 'user_registered' => date("Y-m-d H:i:s"), 'user_email' => $_POST['account']['email']);
    //Recurly Subscription
    $subscription = new RecurlySubscription();
    $subscription->plan_code = $_POST['plan_type'];
 protected static function __parseXmlToObject($node, $node_class, $parse_attributes)
 {
     if ($node_class != null) {
         if ($node_class == 'array') {
             $obj = array();
         } else {
             $obj = new $node_class();
         }
     } else {
         $obj = new RecurlyObject();
     }
     while ($node) {
         if ($node->nodeType == XML_TEXT_NODE) {
             if ($node->wholeText != null) {
                 $text = trim($node->wholeText);
                 if (strlen($text) > 0) {
                     $obj->message = $text;
                 }
             }
         } else {
             if ($node->nodeType == XML_ELEMENT_NODE) {
                 $nodeName = str_replace("-", "_", $node->nodeName);
                 if (is_array($obj)) {
                     $child_node_class = RecurlyClient::$class_map[$nodeName];
                     $new_obj = RecurlyClient::__parseXmlToObject($node->childNodes->item(0), $child_node_class, $parse_attributes);
                     if ($parse_attributes) {
                         foreach ($node->attributes as $attrName => $attrNode) {
                             $nodeName = str_replace("-", "_", $attrName);
                             $nodeValue = $attrNode->nodeValue;
                             if (!is_numeric($nodeValue) && ($tmp = strtotime($nodeValue))) {
                                 $new_obj->{$nodeName} = $tmp;
                             } else {
                                 if ($nodeValue == "false") {
                                     $new_obj->{$nodeName} = false;
                                 } else {
                                     if ($nodeValue == "true") {
                                         $new_obj->{$nodeName} = true;
                                     } else {
                                         $new_obj->{$nodeName} = $nodeValue;
                                     }
                                 }
                             }
                         }
                     }
                     $obj[] = $new_obj;
                     $node = $node->nextSibling;
                     continue;
                 }
                 if ($node->getAttribute('nil')) {
                     $obj->{$nodeName} = null;
                 } else {
                     switch ($node->getAttribute('type')) {
                         case 'boolean':
                             $obj->{$nodeName} = $node->nodeValue == 'true';
                             break;
                         case 'date':
                             $obj->{$nodeName} = strtodate($node->nodeValue);
                             break;
                         case 'datetime':
                             $obj->{$nodeName} = strtotime($node->nodeValue);
                             break;
                         case 'float':
                             $obj->{$nodeName} = (double) $node->nodeValue;
                             break;
                         case 'integer':
                             $obj->{$nodeName} = (int) $node->nodeValue;
                             break;
                         default:
                             $obj->{$nodeName} = $node->nodeValue;
                     }
                 }
                 if ($node->childNodes->length > 1) {
                     $child_node_class = RecurlyClient::$class_map[$nodeName];
                     if ($child_node_class != '') {
                         $obj->{$nodeName} = RecurlyClient::__parseXmlToObject($node->childNodes->item(0), $child_node_class, $parse_attributes);
                     }
                 }
                 if ($parse_attributes) {
                     foreach ($node->attributes as $attrName => $attrNode) {
                         $nodeName = str_replace("-", "_", $attrName);
                         $nodeValue = $attrNode->nodeValue;
                         if (!is_numeric($nodeValue) && ($tmp = strtotime($nodeValue))) {
                             $obj->{$nodeName} = $tmp;
                         } else {
                             if ($nodeValue == "false") {
                                 $obj->{$nodeName} = false;
                             } else {
                                 if ($nodeValue == "true") {
                                     $obj->{$nodeName} = true;
                                 } else {
                                     $obj->{$nodeName} = $nodeValue;
                                 }
                             }
                         }
                     }
                 }
             }
         }
         $node = $node->nextSibling;
     }
     return $obj;
 }
 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})");
         }
     }
 }