-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathAuthorizeNet.php
126 lines (115 loc) · 3.89 KB
/
AuthorizeNet.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
<?php
namespace gateways;
use Omnipay\AuthorizeNet\AIMGateway;
use Omnipay\AuthorizeNet\Message\AIMResponse;
use Omnipay\AuthorizeNet\Model\TransactionReference;
use Omnipay\Common\CreditCard;
use Omnipay\Common\Message\ResponseInterface;
use Omnipay\Omnipay;
class AuthorizeNet extends AbstractGateway
{
/** @var AIMGateway */
public $gateway;
/** @var array List of required credentials for Authorize.net */
public $requiredCredentials = ['GatewayUsername', 'BankNumber'];
/**
* AuthorizeNet constructor.
*
* This instantiates the gateway and stores it in the gateway property of this object. Notice that setApiLoginId and
* setTransactionKey are specific functions to the Authorize.net driver.
*
* @param $credentials
*/
public function __construct($credentials)
{
$this->gateway = Omnipay::create('AuthorizeNet_AIM');
$this->gateway->setApiLoginId($credentials->login);
$this->gateway->setTransactionKey($credentials->key);
}
/**
* Here is where we are grabbing transaction data differently because of the different way that the Auth.net driver
* returns the transaction reference.
*
* @param AIMResponse $response
*
* @return mixed
*/
public function getTransactionId(ResponseInterface $response)
{
$transactionReference = $response->getTransactionReference();
if(!empty($transactionReference)){
$transactionReference = json_decode($response->getTransactionReference());
return $transactionReference->transId;
}
return '';
}
/**
* Here is where we are grabbing transaction data differently because of the different way that the Auth.net driver
* returns the transaction reference.
*
* @param AIMResponse $response
*
* @return mixed
*/
public function getTransactionResultCode(ResponseInterface $response)
{
$transactionReference = $response->getTransactionReference();
if(!empty($transactionReference)) {
$transactionReference = json_decode($response->getTransactionReference());
return $transactionReference->approvalCode;
}
return '';
}
/**
* Get the formatted data needed for performing a refund to Authorize.net. Notice that the TransactionReference object
* is being recreated manually. This is because the data is not stored as a json in our system.
*
* @param array $paymentDetails
*
* @return array
*/
public function getRefundData($paymentDetails)
{
$transaction = $paymentDetails['transactions'][$transactionKey];
$referenceData = [
'transId'=>$transaction['transactionId'],
'card'=>[
'number'=>$transaction['number'],
'expiry'=>$transaction['expiryMonth'] . $transaction['expiryYear']
]
];
$transactionReference = new TransactionReference(json_encode($referenceData));
return [
'transactionReference'=>$transactionReference,
'amount'=>$transaction['amount'],
'voidIfRefundFails'=>true
];
}
/**
* Get the formatted data needed for performing a purchase to Authorize.net
*
* @param array $paymentDetails
*
* @return array
*/
public function getPurchaseData($paymentDetails)
{
return [
'card'=>$this->generateCardObj($paymentDetails),
'currency'=>$paymentDetails['currency'],
'amount'=>$paymentDetails['amount']
];
}
/**
* The data for a void should be the same as the data for a refund so this is simply calling that function and returning
* it.
*
* @param array $paymentDetails
*
* @return array
*/
public function getVoidData($paymentDetails)
{
return $this->getRefundData($paymentDetails);
}
}