Skip to content

Commit 529c9fe

Browse files
committed
Don't pass state to Sage Pay unless country is US
1 parent ab87626 commit 529c9fe

File tree

3 files changed

+72
-19
lines changed

3 files changed

+72
-19
lines changed

src/Omnipay/SagePay/Message/DirectAuthorizeRequest.php

Lines changed: 20 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ class DirectAuthorizeRequest extends AbstractRequest
2525
protected function getBaseAuthorizeData()
2626
{
2727
$this->validate('amount', 'card', 'transactionId');
28+
$card = $this->getCard();
2829

2930
$data = $this->getBaseData();
3031
$data['Description'] = $this->getDescription();
@@ -36,27 +37,27 @@ protected function getBaseAuthorizeData()
3637
$data['Apply3DSecure'] = 0; // use account setting
3738

3839
// billing details
39-
$data['BillingFirstnames'] = $this->getCard()->getFirstName();
40-
$data['BillingSurname'] = $this->getCard()->getLastName();
41-
$data['BillingAddress1'] = $this->getCard()->getBillingAddress1();
42-
$data['BillingAddress2'] = $this->getCard()->getBillingAddress2();
43-
$data['BillingCity'] = $this->getCard()->getBillingCity();
44-
$data['BillingPostCode'] = $this->getCard()->getBillingPostcode();
45-
$data['BillingState'] = $this->getCard()->getBillingState();
46-
$data['BillingCountry'] = $this->getCard()->getBillingCountry();
47-
$data['BillingPhone'] = $this->getCard()->getBillingPhone();
40+
$data['BillingFirstnames'] = $card->getFirstName();
41+
$data['BillingSurname'] = $card->getLastName();
42+
$data['BillingAddress1'] = $card->getBillingAddress1();
43+
$data['BillingAddress2'] = $card->getBillingAddress2();
44+
$data['BillingCity'] = $card->getBillingCity();
45+
$data['BillingPostCode'] = $card->getBillingPostcode();
46+
$data['BillingState'] = $card->getBillingCountry() === 'US' ? $card->getBillingState() : null;
47+
$data['BillingCountry'] = $card->getBillingCountry();
48+
$data['BillingPhone'] = $card->getBillingPhone();
4849

4950
// shipping details
50-
$data['DeliveryFirstnames'] = $this->getCard()->getFirstName();
51-
$data['DeliverySurname'] = $this->getCard()->getLastName();
52-
$data['DeliveryAddress1'] = $this->getCard()->getShippingAddress1();
53-
$data['DeliveryAddress2'] = $this->getCard()->getShippingAddress2();
54-
$data['DeliveryCity'] = $this->getCard()->getShippingCity();
55-
$data['DeliveryPostCode'] = $this->getCard()->getShippingPostcode();
56-
$data['DeliveryState'] = $this->getCard()->getShippingState();
57-
$data['DeliveryCountry'] = $this->getCard()->getShippingCountry();
58-
$data['DeliveryPhone'] = $this->getCard()->getShippingPhone();
59-
$data['CustomerEMail'] = $this->getCard()->getEmail();
51+
$data['DeliveryFirstnames'] = $card->getFirstName();
52+
$data['DeliverySurname'] = $card->getLastName();
53+
$data['DeliveryAddress1'] = $card->getShippingAddress1();
54+
$data['DeliveryAddress2'] = $card->getShippingAddress2();
55+
$data['DeliveryCity'] = $card->getShippingCity();
56+
$data['DeliveryPostCode'] = $card->getShippingPostcode();
57+
$data['DeliveryState'] = $card->getShippingCountry() === 'US' ? $card->getShippingState() : null;
58+
$data['DeliveryCountry'] = $card->getShippingCountry();
59+
$data['DeliveryPhone'] = $card->getShippingPhone();
60+
$data['CustomerEMail'] = $card->getEmail();
6061

6162
return $data;
6263
}

tests/Omnipay/SagePay/Message/DirectAuthorizeRequestTest.php

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,44 @@ public function setUp()
2929
);
3030
}
3131

32+
public function testGetDataCustomerDetails()
33+
{
34+
$card = $this->request->getCard();
35+
$data = $this->request->getData();
36+
37+
$this->assertSame($card->getFirstName(), $data['BillingFirstnames']);
38+
$this->assertSame($card->getLastName(), $data['BillingSurname']);
39+
$this->assertSame($card->getBillingAddress1(), $data['BillingAddress1']);
40+
$this->assertSame($card->getBillingAddress2(), $data['BillingAddress2']);
41+
$this->assertSame($card->getBillingCity(), $data['BillingCity']);
42+
$this->assertSame($card->getBillingPostcode(), $data['BillingPostCode']);
43+
$this->assertSame($card->getBillingState(), $data['BillingState']);
44+
$this->assertSame($card->getBillingCountry(), $data['BillingCountry']);
45+
$this->assertSame($card->getBillingPhone(), $data['BillingPhone']);
46+
47+
$this->assertSame($card->getFirstName(), $data['DeliveryFirstnames']);
48+
$this->assertSame($card->getLastName(), $data['DeliverySurname']);
49+
$this->assertSame($card->getShippingAddress1(), $data['DeliveryAddress1']);
50+
$this->assertSame($card->getShippingAddress2(), $data['DeliveryAddress2']);
51+
$this->assertSame($card->getShippingCity(), $data['DeliveryCity']);
52+
$this->assertSame($card->getShippingPostcode(), $data['DeliveryPostCode']);
53+
$this->assertSame($card->getShippingState(), $data['DeliveryState']);
54+
$this->assertSame($card->getShippingCountry(), $data['DeliveryCountry']);
55+
$this->assertSame($card->getShippingPhone(), $data['DeliveryPhone']);
56+
}
57+
58+
public function testGetDataCustomerDetailsIgnoresStateOutsideUS()
59+
{
60+
$card = $this->request->getCard();
61+
$card->setBillingCountry('UK');
62+
$card->setShippingCountry('NZ');
63+
64+
$data = $this->request->getData();
65+
66+
$this->assertNull($data['BillingState']);
67+
$this->assertNull($data['DeliveryState']);
68+
}
69+
3270
public function testGetDataVisa()
3371
{
3472
$this->request->getCard()->setNumber('4929000000006');

tests/Omnipay/TestCase.php

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,20 @@ public function getValidCard()
123123
'expiryMonth' => rand(1, 12),
124124
'expiryYear' => date('Y') + rand(1, 5),
125125
'cvv' => rand(100, 999),
126+
'billingAddress1' => '123 Billing St',
127+
'billingAddress2' => 'Billsville',
128+
'billingCity' => 'Billstown',
129+
'billingPostcode' => '12345',
130+
'billingState' => 'CA',
131+
'billingCountry' => 'US',
132+
'billingPhone' => '(555) 123-4567',
133+
'shippingAddress1' => '123 Shipping St',
134+
'shippingAddress2' => 'Shipsville',
135+
'shippingCity' => 'Shipstown',
136+
'shippingPostcode' => '54321',
137+
'shippingState' => 'NY',
138+
'shippingCountry' => 'US',
139+
'shippingPhone' => '(555) 987-6543',
126140
);
127141
}
128142

0 commit comments

Comments
 (0)