Passed
Push — main ( f1b061...8b9c51 )
by Gabriel
03:30
created

AuthorizeRequest::runSoapRequest()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 10
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 7
c 0
b 0
f 0
nc 2
nop 4
dl 0
loc 10
rs 10
1
<?php
2
3
namespace ByTIC\Omnipay\PlatiOnline\Message;
4
5
use ByTIC\Omnipay\PlatiOnline\Utils\Urls;
6
use Omnipay\Common\Item;
7
use Omnipay\Common\ItemBag;
8
9
/**
10
 * Class AuthorizeRequest
11
 * @package ByTIC\Omnipay\PlatiOnline\Message
12
 *
13
 * @method AuthorizeResponse send
14
 */
15
class AuthorizeRequest extends AbstractRequest
16
{
17
    use Traits\HasSoapRequestTrait;
0 ignored issues
show
Bug introduced by
The trait ByTIC\Omnipay\PlatiOnlin...its\HasSoapRequestTrait requires the property $faultcode which is not provided by ByTIC\Omnipay\PlatiOnline\Message\AuthorizeRequest.
Loading history...
18
19
    /**
20
     * @return array
21
     * @throws \Omnipay\Common\Exception\InvalidRequestException
22
     */
23
    public function getData(): array
24
    {
25
        $this->validate('publicKey', 'loginId', 'website', 'amount', 'card');
26
        $this->validateCard(
27
            'BillingPhone',
28
            'FirstName',
29
            'LastName',
30
            'BillingCountry',
31
            'BillingCity',
32
            'ShippingPhone',
33
            'ShippingCountry',
34
            'ShippingCity'
35
        );
36
37
        $data = [];
38
39
40
        $data['f_website'] = $this->getWebsite();
41
42
        $data['f_order_number'] = $this->getTransactionId();
43
        $data['f_order_string'] = $this->getDescription();
44
        $data['f_amount'] = $this->getAmount();
45
        $data['f_currency'] = $this->getCurrency();
46
47
        // 0 - waiting forever, 20 - default (in minutes)
48
        $data['f_auth_minutes'] = 20;
49
        $data['f_language'] = $this->getLang(); // RO / EN / HU / IT / FR / DE / ES
50
51
        $data['customer_info'] = $this->generateCustomerInfo();
52
        $data['shipping_info'] = $this->generateShippingInfo();
53
        $data['transaction_relay_response'] = $this->generateRelayResponse();
54
55
        //$f_request['tracking_script'] = 'tracking script';
56
57
        $data['f_order_cart'] = $this->generateOrderCart();
58
59
60
        //shipping
61
//        $shipping = array();
62
//        $shipping['name'] = substr('Shipping 1', 0, 250);
63
//        $shipping['price'] = (float)15.5;
64
//        $shipping['pimg'] = 0;
65
//        $shipping['vat'] = (float)2.5;
66
//
67
//        $f_request['f_order_cart']['shipping'] = $shipping;
68
69
70
        return $data;
71
    }
72
73
    protected function generateCustomerInfo(): array
74
    {
75
        $card = $this->getCard();
76
77
        $customerInfo = [];
78
79
        // must not be empty. If empty don't send this tag, it will be filled in PO interface
80
        $customerInfo['contact']['f_email'] = $card->getEmail();
81
82
        // must not be empty, minimum 4 characters. If empty don't send this tag, it will be filled in PO interface
83
        $phone =  $card->getBillingPhone();
84
        $phone = $phone ? $phone : '----';
85
        $customerInfo['contact']['f_phone'] = $phone;
86
87
        $customerInfo['contact']['f_mobile_number'] = $phone;
88
89
        // 1 - sms client notification 0 - no notification
90
        $customerInfo['contact']['f_send_sms'] = 1;
91
92
        // must not be empty. If empty don't send this tag, it will be filled in PO interface
93
        $customerInfo['contact']['f_first_name'] = $card->getBillingFirstName();
94
        $customerInfo['contact']['f_last_name'] = $card->getBillingLastName();
95
        //$customer_info['contact']['f_middle_name'] 	 = '';
96
97
        //invoice
98
//        $customer_info['invoice']['f_company'] = 'Test company';        // optional
99
//        $customer_info['invoice']['f_cui'] = '111111';            // optional
100
//        $customer_info['invoice']['f_reg_com'] = 'J55/99/2000';        // optional
101
//        $customer_info['invoice']['f_cnp'] = '9999999999999';        // optional
102
//        $customer_info['invoice']['f_zip'] = '999999';            // optional
103
104
        // must not be empty. If empty don't send this tag, it will be filled in PO interface
105
        $customerInfo['invoice']['f_country'] = $card->getBillingCountry();
106
107
        // must not be empty. If empty don't send this tag, it will be filled in PO interface
108
        $state = $card->getBillingState();
109
        $state = $state ? $state : '-';
110
        $customerInfo['invoice']['f_state'] = $state;
111
112
        // must not be empty. If empty don't send this tag, it will be filled in PO interface
113
        $city = $card->getBillingCity();
114
        $city = $city ? $city : '-';
115
        $customerInfo['invoice']['f_city'] = $city;
116
117
        // must not be empty. If empty don't send this tag, it will be filled in PO interface
118
        $address = $card->getBillingAddress1();
119
        $address = $address ? $address : '-';
120
        $customerInfo['invoice']['f_address'] = $address;
121
122
        return $customerInfo;
123
    }
124
125
    protected function generateShippingInfo(): array
126
    {
127
        $card = $this->getCard();
128
129
        $shipping_info = [];
130
131
        // 0 - different info, 1- same info as customer_info
132
        $shipping_info['same_info_as'] = 0;
133
134
        //contact
135
        $shipping_info['contact']['f_email'] = $card->getEmail();
136
137
        $phone =  $card->getShippingPhone();
138
        $phone = $phone ? $phone : '----';
139
        $shipping_info['contact']['f_phone'] = $phone;
140
        $shipping_info['contact']['f_mobile_number'] = $phone;
141
142
        // 1 - sms client notification 0 - no notification
143
        $shipping_info['contact']['f_send_sms'] = 1;
144
        $shipping_info['contact']['f_first_name'] = $card->getShippingFirstName();
145
        $shipping_info['contact']['f_last_name'] = $card->getShippingLastName();
146
        //$shipping_info['contact']['f_middle_name'] 	 = '';
147
148
        //address
149
        $shipping_info['address']['f_company'] = $card->getShippingCompany();
150
        $shipping_info['address']['f_zip'] = $card->getShippingPostcode();
151
        $shipping_info['address']['f_country'] = $card->getShippingCountry();
152
153
        $state = $card->getShippingState();
154
        $state = $state ? $state : '-';
155
        $shipping_info['address']['f_state'] = $state;
156
157
        $city = $card->getShippingCity();
158
        $city = $city ? $city : '-';
159
        $shipping_info['address']['f_city'] = $city;
160
161
        $address = $card->getBillingAddress1();
162
        $address = $address ? $address : '-';
163
        $shipping_info['address']['f_address'] = substr($address, 0, 100);
164
165
        return $shipping_info;
166
    }
167
168
    protected function generateRelayResponse(): array
169
    {
170
        $relayResponse = [];
171
        $relayResponse['f_relay_response_url'] = $this->getReturnUrl();
172
173
        // INFO f_relay_method
174
        // PTOR, POST_S2S_PO_PAGE, POST_S2S_MT_PAGE, SOAP_PO_PAGE, SOAP_MT_PAGE
175
        $relayResponse['f_relay_method'] = 'POST_S2S_PO_PAGE';
176
        $relayResponse['f_relay_method'] = 'PTOR';
177
178
        // Valoarea = 1	(default value; sistemul PO trimite rezultatul la f_relay_response_url prin metoda f_relay_method)
179
        // Valoarea = 0	(systemul PO trimite rezultatul doar pentru tranzactiile "Autorizate" si "In curs de verificare" la <f_relay_response_url> prin metoda <f_relay_method>)
180
        $relayResponse['f_post_declined'] = 1;
181
182
        // default 1
183
        $relayResponse['f_relay_handshake'] = 1;
184
185
        return $relayResponse;
186
    }
187
188
    protected function generateOrderCart(): array
189
    {
190
        /** @var Item[]|ItemBag $items */
191
        $items = $this->getItems();
192
        $orderCart = [];
193
194
        if (!($items instanceof ItemBag)) {
195
            $itemData['prodid'] = 0;
0 ignored issues
show
Comprehensibility Best Practice introduced by
$itemData was never initialized. Although not strictly required by PHP, it is generally a good practice to add $itemData = array(); before regardless.
Loading history...
196
            $itemData['name'] = substr($this->getDescription(), 0, 250);
197
            $itemData['description'] = substr($this->getDescription(), 0, 250);
198
            $itemData['qty'] = 1;
199
200
            // price WITOUT VAT for 1 piece of the product
201
            $itemData['itemprice'] = (float)$this->getAmount();
202
203
            // VAT for 1 piece of the product * $item['qty']
204
            $itemData['vat'] = (float)0;
205
206
            $itemData['stamp'] = date('Y-m-d');
207
            $itemData['prodtype_id'] = 0;
208
209
            $orderCart[] = $itemData;
210
211
            return $orderCart;
212
        }
213
214
        foreach ($items as $item) {
215
            $itemData = [];
216
217
            $itemData['prodid'] = 0;
218
            $itemData['name'] = substr($item->getName(), 0, 250);
219
            $itemData['description'] = substr($item->getDescription(), 0, 250);
220
            $itemData['qty'] = $item->getQuantity();
221
222
            // price WITOUT VAT for 1 piece of the product
223
            $itemData['itemprice'] = (float)$item->getPrice();
224
225
            // VAT for 1 piece of the product * $item['qty']
226
            $itemData['vat'] = (float)0;
227
228
            $itemData['stamp'] = date('Y-m-d');
229
            $itemData['prodtype_id'] = 0;
230
231
            $orderCart[] = $itemData;
232
        }
233
        return $orderCart;
234
    }
235
236
    /**
237
     * @param \SoapClient $soapClient
238
     * @param array $data
239
     */
240
    protected function runTransaction($soapClient, $data)
241
    {
242
        $data['f_action'] = 2;
243
244
        return $this->runSoapRequest($soapClient, $data, 'po_auth_request');
245
    }
246
247
    protected function getSoapRequestValidationUrl(): string
248
    {
249
        return Urls::$authXml;
250
    }
251
252
    protected function getSoapResponseValidationUrl()
253
    {
254
        return Urls::$authUrlXml;
255
    }
256
}
257