diff --git a/CHANGELOG.md b/CHANGELOG.md
index 0bf2e886..be5913e2 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -7,6 +7,7 @@
* Allow credit adjustments (`Recurly_Adjustment`) to specify an `origin` of `external_gift_card` [#263](https://github.com/recurly/recurly-client-php/pull/263)
* Added `Recurly_AccountAcquisition` [#259](https://github.com/recurly/recurly-client-php/pull/259)
* Added support for automated exports [#260](https://github.com/recurly/recurly-client-php/pull/260)
+* Added support for shipping addresses [#269](https://github.com/recurly/recurly-client-php/pull/269)
## Version 2.6.0 (August 9th, 2016)
diff --git a/Tests/Recurly/Account_Test.php b/Tests/Recurly/Account_Test.php
index ea2bd282..bc1f63d2 100644
--- a/Tests/Recurly/Account_Test.php
+++ b/Tests/Recurly/Account_Test.php
@@ -91,8 +91,37 @@ public function testXml() {
$account->tax_exempt = false;
$account->entity_use_code = 'I';
+ // work shipping address
+ $shad1 = new Recurly_ShippingAddress();
+ $shad1->nickname = "Work";
+ $shad1->first_name = "Verena";
+ $shad1->last_name = "Example";
+ $shad1->company = "Recurly Inc.";
+ $shad1->phone = "555-555-5555";
+ $shad1->email = "verena@example.com";
+ $shad1->address1 = "123 Main St.";
+ $shad1->city = "San Francisco";
+ $shad1->state = "CA";
+ $shad1->zip = "94110";
+ $shad1->country = "US";
+
+ // home shipping address
+ $shad2 = new Recurly_ShippingAddress();
+ $shad2->nickname = "Home";
+ $shad2->first_name = "Verena";
+ $shad2->last_name = "Example";
+ $shad2->phone = "555-555-5555";
+ $shad2->email = "verena@example.com";
+ $shad2->address1 = "123 Dolores St.";
+ $shad2->city = "San Francisco";
+ $shad2->state = "CA";
+ $shad2->zip = "94110";
+ $shad2->country = "US";
+
+ $account->shipping_addresses = array($shad1, $shad2);
+
$this->assertEquals(
- "\nact123Verena123 Main St.falseI\n",
+ "\nact123Verena123 Main St.falseI123 Main St.San FranciscoCA94110US555-555-5555verena@example.comWorkVerenaExampleRecurly Inc.123 Dolores St.San FranciscoCA94110US555-555-5555verena@example.comHomeVerenaExample\n",
$account->xml()
);
}
diff --git a/Tests/Recurly/Subscription_Test.php b/Tests/Recurly/Subscription_Test.php
index 710a33ff..e3421802 100644
--- a/Tests/Recurly/Subscription_Test.php
+++ b/Tests/Recurly/Subscription_Test.php
@@ -78,11 +78,37 @@ public function testCreateSubscriptionXml() {
$billing_info->year = 2015;
$billing_info->ip_address = '192.168.0.1';
+ $shad = new Recurly_ShippingAddress();
+ $shad->nickname = "Work";
+ $shad->first_name = "Verena";
+ $shad->last_name = "Example";
+ $shad->company = "Recurly Inc.";
+ $shad->phone = "555-555-5555";
+ $shad->email = "verena@example.com";
+ $shad->address1 = "123 Main St.";
+ $shad->city = "San Francisco";
+ $shad->state = "CA";
+ $shad->zip = "94110";
+ $shad->country = "US";
+
+ $subscription->shipping_address = $shad;
$subscription->account = $account;
$account->billing_info = $billing_info;
$this->assertEquals(
- "\naccount_codeusernameVerenaExampleverena@example.comen-USVerenaExample192.168.0.14111-1111-1111-1111112015123gold1USDtrueSome Terms and ConditionsSome Customer Notes\n",
+ "\naccount_codeusernameVerenaExampleverena@example.comen-USVerenaExample192.168.0.14111-1111-1111-1111112015123gold1USDtrueSome Terms and ConditionsSome Customer Notes123 Main St.San FranciscoCA94110US555-555-5555verena@example.comWorkVerenaExampleRecurly Inc.\n",
+ $subscription->xml()
+ );
+ }
+
+ public function testUpdateShippingAddressXml() {
+ $this->client->addResponse('GET', '/subscriptions/012345678901234567890123456789ab', 'subscriptions/show-200.xml');
+ $subscription = Recurly_Subscription::get('012345678901234567890123456789ab', $this->client);
+
+ $subscription->shipping_address_id = 1234567890;
+
+ $this->assertEquals(
+ "\nmarketing_emails511234567890\n",
$subscription->xml()
);
}
diff --git a/Tests/fixtures/accounts/create-201.xml b/Tests/fixtures/accounts/create-201.xml
index 17260092..6de5a80e 100644
--- a/Tests/fixtures/accounts/create-201.xml
+++ b/Tests/fixtures/accounts/create-201.xml
@@ -7,6 +7,7 @@ Location: https://api.recurly.com/v2/accounts/abcdef1234567890.xml
+
abcdef1234567890
diff --git a/lib/recurly.php b/lib/recurly.php
index f2d6272e..bf0c87d7 100644
--- a/lib/recurly.php
+++ b/lib/recurly.php
@@ -37,6 +37,8 @@
require_once(dirname(__FILE__) . '/recurly/plan_list.php');
require_once(dirname(__FILE__) . '/recurly/redemption.php');
require_once(dirname(__FILE__) . '/recurly/redemption_list.php');
+require_once(dirname(__FILE__) . '/recurly/shipping_address.php');
+require_once(dirname(__FILE__) . '/recurly/shipping_address_list.php');
require_once(dirname(__FILE__) . '/recurly/subscription.php');
require_once(dirname(__FILE__) . '/recurly/subscription_list.php');
require_once(dirname(__FILE__) . '/recurly/subscription_addon.php');
diff --git a/lib/recurly/account.php b/lib/recurly/account.php
index 706b9dc4..7865537a 100644
--- a/lib/recurly/account.php
+++ b/lib/recurly/account.php
@@ -62,7 +62,7 @@ protected function getWriteableAttributes() {
return array(
'account_code', 'username', 'first_name', 'last_name', 'vat_number',
'email', 'company_name', 'accept_language', 'billing_info', 'address',
- 'tax_exempt', 'entity_use_code', 'cc_emails'
+ 'tax_exempt', 'entity_use_code', 'cc_emails', 'shipping_addresses'
);
}
protected function getRequiredAttributes() {
diff --git a/lib/recurly/base.php b/lib/recurly/base.php
index 1ba982b0..5ea8f604 100644
--- a/lib/recurly/base.php
+++ b/lib/recurly/base.php
@@ -206,6 +206,8 @@ public function getLinks() {
'redemption' => 'Recurly_CouponRedemption',
'redemptions' => 'Recurly_CouponRedemptionList',
'setup_fee_in_cents' => 'Recurly_CurrencyList',
+ 'shipping_address' => 'Recurly_ShippingAddress',
+ 'shipping_addresses' => 'Recurly_ShippingAddressList',
'subscription' => 'Recurly_Subscription',
'subscriptions' => 'Recurly_SubscriptionList',
'subscription_add_ons' => 'array',
diff --git a/lib/recurly/resource.php b/lib/recurly/resource.php
index b39eae5f..f7d5fe0c 100644
--- a/lib/recurly/resource.php
+++ b/lib/recurly/resource.php
@@ -93,7 +93,6 @@ protected function _save($method, $uri, $data = null)
$response->assertSuccessResponse($this);
}
-
public function xml()
{
$doc = $this->createDocument();
diff --git a/lib/recurly/shipping_address.php b/lib/recurly/shipping_address.php
new file mode 100644
index 00000000..4307967d
--- /dev/null
+++ b/lib/recurly/shipping_address.php
@@ -0,0 +1,19 @@
+appendChild($doc->createElement($this->getNodeName()));
+ parent::populateXmlDoc($doc, $shippingAddressNode, $obj);
+ }
+}
diff --git a/lib/recurly/shipping_address_list.php b/lib/recurly/shipping_address_list.php
new file mode 100644
index 00000000..7c7d76ef
--- /dev/null
+++ b/lib/recurly/shipping_address_list.php
@@ -0,0 +1,13 @@
+