diff --git a/services/web/app/coffee/Features/Subscription/RecurlyWrapper.coffee b/services/web/app/coffee/Features/Subscription/RecurlyWrapper.coffee
index 5f0c7877f4..e49cb12b39 100644
--- a/services/web/app/coffee/Features/Subscription/RecurlyWrapper.coffee
+++ b/services/web/app/coffee/Features/Subscription/RecurlyWrapper.coffee
@@ -9,6 +9,15 @@ Async = require('async')
module.exports = RecurlyWrapper =
apiUrl : "https://api.recurly.com/v2"
+ _addressToXml: (address) ->
+ allowedKeys = ['address1', 'address2', 'city', 'country', 'state', 'zip', 'postal_code']
+ resultString = "\n"
+ for k, v of address
+ if v and (k in allowedKeys)
+ resultString += "<#{k}#{if k == 'address2' then ' nil="nil"' else ''}>#{v || ''}#{k}>\n"
+ resultString += "\n"
+ return resultString
+
_createPaypalSubscription: (user, subscriptionDetails, recurly_token_id, callback) ->
logger.log {user_id: user._id, recurly_token_id}, "starting process of creating paypal subscription"
Async.waterfall([
@@ -108,16 +117,7 @@ module.exports = RecurlyWrapper =
address = subscriptionDetails.address
if !address
return next(new Error('no address in subscriptionDetails at setAddress stage'))
- requestBody = """
-
- #{address.address1}
- #{address.address2}
- #{address.city || ''}
- #{address.state || ''}
- #{address.zip || ''}
- #{address.country}
-
- """
+ requestBody = RecurlyWrapper._addressToXml(address)
RecurlyWrapper.apiRequest({
url: "accounts/#{accountCode}/billing_info"
method: "PUT"
diff --git a/services/web/public/coffee/main/new-subscription.coffee b/services/web/public/coffee/main/new-subscription.coffee
index 9547508337..0dc2d68e52 100644
--- a/services/web/public/coffee/main/new-subscription.coffee
+++ b/services/web/public/coffee/main/new-subscription.coffee
@@ -117,11 +117,12 @@ define [
coupon_code:pricing.items?.coupon?.code || ""
isPaypal: $scope.paymentMethod == 'paypal'
address:
- address1: $scope.data.address1
- address2: $scope.data.address2
- country: $scope.data.country
- state: $scope.data.state
- zip: $scope.data.zip
+ address1: $scope.data.address1
+ address2: $scope.data.address2
+ country: $scope.data.country
+ state: $scope.data.state
+ postal_code: $scope.date.postal_code
+ zip: $scope.data.zip
$http.post("/user/subscription/create", postData)
.success (data, status, headers)->
sixpack.convert "in-editor-free-trial-plan", pricing.items.plan.code, (err)->
diff --git a/services/web/test/UnitTests/coffee/Subscription/RecurlyWrapperTests.coffee b/services/web/test/UnitTests/coffee/Subscription/RecurlyWrapperTests.coffee
index e05040772d..143085b402 100644
--- a/services/web/test/UnitTests/coffee/Subscription/RecurlyWrapperTests.coffee
+++ b/services/web/test/UnitTests/coffee/Subscription/RecurlyWrapperTests.coffee
@@ -329,5 +329,31 @@ describe "RecurlyWrapper", ->
@apiRequest.called.should.equal true
+ describe "_addressToXml", ->
+
+ beforeEach ->
+ @address =
+ address1: "addr_one"
+ address2: "addr_two"
+ country: "some_country"
+ state: "some_state"
+ zip: "some_zip"
+ nonsenseKey: "rubbish"
+
+ it 'should generate the correct xml', () ->
+ result = RecurlyWrapper._addressToXml @address
+ should.equal(
+ result,
+ """
+
+ addr_one
+ addr_two
+ some_country
+ some_state
+ some_zip
+ \n
+ """
+ )
+