Skip to content

Commit 6e12fb9

Browse files
committed
Merge pull request #3 from bryglen/master
add support to use payment method token aside from nonce
2 parents 70f10e6 + 723f884 commit 6e12fb9

File tree

3 files changed

+74
-2
lines changed

3 files changed

+74
-2
lines changed

src/Message/AbstractRequest.php

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -269,6 +269,26 @@ public function setTaxExempt($value)
269269
return $this->setParameter('taxExempt', (bool) $value);
270270
}
271271

272+
public function getPaymentMethodToken()
273+
{
274+
return $this->getParameter('paymentMethodToken');
275+
}
276+
277+
public function setPaymentMethodToken($value)
278+
{
279+
return $this->setParameter('paymentMethodToken', $value);
280+
}
281+
282+
public function getPaymentMethodNonce()
283+
{
284+
return $this->getToken();
285+
}
286+
287+
public function setPaymentMethodNonce($value)
288+
{
289+
return $this->setToken($value);
290+
}
291+
272292
/**
273293
* @return array
274294
*/

src/Message/AuthorizeRequest.php

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
<?php
22
namespace Omnipay\Braintree\Message;
33

4+
use Omnipay\Common\Exception\InvalidRequestException;
45
use Omnipay\Common\Message\ResponseInterface;
56

67
/**
@@ -12,7 +13,7 @@ class AuthorizeRequest extends AbstractRequest
1213
{
1314
public function getData()
1415
{
15-
$this->validate('amount', 'token');
16+
$this->validate('amount');
1617

1718
$data = [
1819
'amount' => $this->getAmount(),
@@ -33,14 +34,22 @@ public function getData()
3334
'submitForSettlement' => false,
3435
],
3536
'orderId' => $this->getTransactionId(),
36-
'paymentMethodNonce' => $this->getToken(),
3737
'purchaseOrderNumber' => $this->getPurchaseOrderNumber(),
3838
'recurring' => $this->getRecurring(),
3939
'shippingAddressId' => $this->getShippingAddressId(),
4040
'taxAmount' => $this->getTaxAmount(),
4141
'taxExempt' => $this->getTaxExempt(),
4242
];
4343

44+
// special validation
45+
if ($this->getPaymentMethodToken()) {
46+
$data['paymentMethodToken'] = $this->getPaymentMethodToken();
47+
} elseif($this->getToken()) {
48+
$data['paymentMethodNonce'] = $this->getToken();
49+
} else {
50+
throw new InvalidRequestException("The token (payment nonce) or paymentMethodToken field should be set.");
51+
}
52+
4453
// Remove null values
4554
$data = array_filter($data, function($value){
4655
return ! is_null($value);

tests/Message/AuthorizeRequestTest.php

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ public function testGetData()
3535
{
3636
$data = $this->request->getData();
3737

38+
$this->assertArrayNotHasKey('paymentMethodToken', $data);
3839
$this->assertSame('abc123', $data['paymentMethodNonce']);
3940
$this->assertSame('10.00', $data['amount']);
4041
$this->assertSame('684', $data['orderId']);
@@ -50,6 +51,48 @@ public function testGetData()
5051
$this->assertSame('production', \Braintree_Configuration::environment());
5152
}
5253

54+
public function testPaymentMethodToken()
55+
{
56+
$this->request->initialize(
57+
array(
58+
'amount' => '10.00',
59+
'transactionId' => '684',
60+
'testMode' => false,
61+
'taxExempt' => false,
62+
'card' => [
63+
'firstName' => 'Kayla',
64+
'shippingCompany' => 'League',
65+
],
66+
'paymentMethodToken' => 'fake-token-123'
67+
)
68+
);
69+
70+
$data = $this->request->getData();
71+
$this->assertSame('fake-token-123', $data['paymentMethodToken']);
72+
$this->assertArrayNotHasKey('paymentMethodNonce', $data);
73+
}
74+
75+
public function testPaymentMethodNonce()
76+
{
77+
$this->request->initialize(
78+
array(
79+
'amount' => '10.00',
80+
'transactionId' => '684',
81+
'testMode' => false,
82+
'taxExempt' => false,
83+
'card' => [
84+
'firstName' => 'Kayla',
85+
'shippingCompany' => 'League',
86+
],
87+
'paymentMethodNonce' => 'abc123'
88+
)
89+
);
90+
91+
$data = $this->request->getData();
92+
$this->assertSame('abc123', $data['paymentMethodNonce']);
93+
$this->assertArrayNotHasKey('paymentMethodToken', $data);
94+
}
95+
5396
public function testSandboxEnvironment()
5497
{
5598
$this->request->setTestMode(true);

0 commit comments

Comments
 (0)