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})"); } } }