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( - "\nact123Verena
123 Main St.
falseI
\n", + "\nact123Verena
123 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-1111112015123
gold1USDtrueSome Terms and ConditionsSome Customer Notes
\n", + "\naccount_codeusernameVerenaExampleverena@example.comen-USVerenaExample192.168.0.14111-1111-1111-1111112015123
gold1USDtrueSome 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 @@ +