· 7 years ago · Jul 02, 2018, 02:30 PM
1<?php
2/*
3 *
4 */
5namespace Anonymous\CoreBundle\Util;
6
7use Anonymous\CoreBundle\Entity\LogPaymentTransaction;
8use Anonymous\CoreBundle\Entity\Payment;
9use Doctrine\ORM\EntityManager;
10use Symfony\Component\HttpFoundation\Response;
11
12class FpayPack {
13
14 const URL_SANDBOX = 'https://payment.fpay-worldwide.com/sandbox/fpay-frontend/fpayreq';
15 const URL_LIVE = '';
16 private $accountId;
17 private $secretKey;
18 private $live;
19 private $end_point;
20
21 public function __construct($accountId, $secretKey, $live = false)
22 {
23 $this->accountId = $accountId;
24 $this->secretKey = $secretKey;
25 ($live) ? $this->setLive() : $this->setSandbox();
26 }
27
28 private function setLive(){
29 $this->live = true;
30 $this->end_point = self::URL_LIVE;
31
32 }
33
34 private function setSandbox(){
35 $this->live = false;
36 $this->end_point = self::URL_SANDBOX;
37
38 }
39
40 public function getEndPoint()
41 {
42 return $this->end_point;
43 }
44
45
46 //function to encrypt data.
47 function signData($data, $SECRETKEY) {
48 return hash_hmac('sha256', $data, $SECRETKEY, true);
49 }
50
51 //function to add logs
52 function addLog($url,$txt) {
53 $fileName=$url.'\log\fpay'.date("Y-m-d").'.log';
54 if(strpos($url,'/') !== false){
55 $fileName=$url.'/log/fpay'.date("Y-m-d").'.log';
56 }
57 if (!file_exists($fileName))
58 file_put_contents($fileName, "");
59
60 file_put_contents($fileName,file_get_contents($fileName)." \r\n ".date("[j/m/y H:i:s]")." - $txt ");
61 }
62
63 //function to send data
64 function sendData($BASE,$URL,$DATA) {
65 $this->addLog($BASE,'<<<<==== Start sendData() ====>>>>');
66 $response_code=0;
67 $FPAY_MESSAGE_VERSION="4";
68 $TRANSACTION_TYPE='AUTH';
69 $TRANSACTION_MODE='MODE';
70
71 $capture = $DATA['TRANSACTION_CAPTURE'];
72
73 $id_marchant = $DATA['MERCHANT_ID'];
74 if (!$id_marchant || empty($id_marchant)) {
75 $this->addLog($BASE,'MERCHANT_ID is null');
76 die('MERCHANT_ID');
77 return -1;
78 } else {
79 $MERCHANT_ID=(string)($id_marchant);
80 }
81
82 $hmac=$DATA['MERCHANT_KEY'];
83 if(!$hmac || empty($hmac)){
84 $this->addLog($BASE,'MERCHANT_KEY is null or empty');
85 die('MERCHANT_KEY');
86 return -1;
87 }
88
89 $url_fpay=$DATA['FPAY_URL'];
90 if(!$url_fpay || empty($url_fpay)){
91 $this->addLog($BASE,'FPAY_URL is null or empty');
92 die('FPAY_URL');
93 return -1;
94 }
95
96// $amount_convertion=$DATA['AMOUNT_CONVERSION'];
97// if ($amount_convertion=='true') {
98// $converted_amount=$DATA['CONVERTED_AMOUNT'];
99// if (!$converted_amount || empty($converted_amount)) {
100// $this->addLog($BASE,'CONVERTED_AMOUNT is null or empty');
101// die('CONVERTED_AMOUNT');
102// return -1;
103// }
104//
105// if (strlen($converted_amount)>12){
106// $this->addLog($BASE,'CONVERTED_AMOUNT is too large');
107// die('CONVERTED_AMOUNT is too large');
108// return -1;
109// }
110//
111// $conversion_currency=$DATA['CONVERSION_CURRENCY'];
112// if (!$conversion_currency || empty($conversion_currency)){
113// $this->addLog($BASE,'CONVERSION_CURRENCY is null or empty');
114// die('CONVERSION_CURRENCY is null or empty');
115// return -1;
116// }
117//
118// if (strlen($conversion_currency > 3)) {
119// $this->addLog($BASE,'CONVERSION_CURRENCY is too large');
120// die('CONVERSION_CURRENCY is too large');
121// return -1;
122// }
123// } else {
124// $this->addLog($BASE,'AMOUNT_CONVERSION is null. default value will be set to false');
125// $amount_convertion='false';
126// }
127//
128// $customer_message=$DATA['CUSTOMER_MESSAGE'];
129// if(!empty($customer_message)) {
130// if(strlen($customer_message)>512){
131// $this->addLog($BASE,'CUSTOMER_MESSAGE is large. will be tranked');
132// $customer_message = substr($customer_message, 0, 512);
133// }
134// } else {
135// $this->addLog($BASE,'CUSTOMER_MESSAGE is not present');
136// }
137
138 $id_order = $DATA['ORDER_ID'];
139 if(!$id_order || empty($id_order)){
140 $this->addLog($BASE,'ORDER_ID is null or empty');
141 die('ORDER_ID');
142 return -1;
143 }
144
145 $amount =$DATA['AMOUNT'];
146 if(!$amount || empty($amount)){
147 $this->addLog($BASE,'AMOUNT is null or empty');
148 die('AMOUNT');
149 return -1;
150 } else {
151 if(!is_int((int)$amount)){
152 $this->addLog($BASE,'AMOUT is not int');
153 return -2;
154 }
155 }
156
157 $currency=$DATA['CURRENCY_CODE'];
158 if(!$currency || empty($currency)){
159 $this->addLog($BASE,'CURRENCY_CODE is null or empty');
160 die('CURRENCY_CODE');
161 return -1;
162 } else {
163 if(!is_numeric($currency)){
164 $this->addLog($BASE,'CURRENCY_CODE is not numeric');
165 return -2;
166 }
167 }
168
169 $url_marchant=$DATA['MERCHANT_URL'];
170 $description = $DATA['ORDER_DETAILS'];
171 //$firstname = $DATA['CUSTOMER_FIRSTNAME'];
172 //$lastname = $DATA['CUSTOMER_LASTNAME'];
173 //$address = $DATA['CUSTOMER_ADDRESS'];
174 //$zipcode = $DATA['CUSTOMER_ZIPCODE'];
175 //$city = $DATA['CUSTOMER_CITY'];
176 //$state = $DATA['CUSTOMER_STATE'];
177 //$country = $DATA['CUSTOMER_COUNTRY'];
178 $phone = $DATA['CUSTOMER_PHONE'];
179 $lang = $DATA['LANGUAGE'];
180
181 $email = $DATA['CUSTOMER_EMAIL'];
182 if(!$email || empty($email)){
183 $this->addLog($BASE,'CUSTOMER_EMAIL is null or empty');
184 return -1;
185 }
186
187 $url_reponse=$DATA['FPAY_URLREPAUTO'];
188 if (!$url_reponse || empty($url_reponse)) {
189 $this->addLog($BASE,'FPAY_URLREPAUTO is null or empty');
190 return -1;
191 }
192
193 $AMOUNT=(string)($amount);
194 //$AMOUNT_CONVERSION=(string)$amount_convertion;
195 //$CONVERTED_AMOUNT=(string)$converted_amount;
196 //$CONVERSION_CURRENCY=(string)$conversion_currency;
197 //$CUSTOMER_MESSAGE=(string)$customer_message;
198 $CURRENCY_CODE=$currency;
199 $TRANSACTION_CAPTURE = $capture;
200 $CUSTOM_DATA='DATA';
201
202 if (!$id_order || empty($id_order)) {
203 $this->addLog($BASE,'Order ID is null or empty');
204 return -1;
205 } else {
206 if(strlen($id_order) > 45) {
207 $ORDER_ID=substr((string)($id_order), 0, 45);
208 } else {
209 $ORDER_ID=(string)($id_order);
210 }
211 }
212
213 if (strlen($description) > 125) {
214 $ORDER_DETAILS=substr((string)($description), 0, 125);
215 } else {
216 $ORDER_DETAILS=(string)($description);
217 }
218
219 $MERCHANT_URL=substr($url_marchant, 0, 255);
220
221// if($lastname){
222// if(strlen($lastname)>45)
223// $CUSTOMER_LASTNAME=substr((string)($lastname), 0, 45);
224// else
225// $CUSTOMER_LASTNAME=(string)($lastname);
226// } else {
227// $CUSTOMER_LASTNAME=' ';
228// }
229//
230// if($firstname){
231// if(strlen($firstname)>45)
232// $CUSTOMER_FIRSTNAME=substr((string)($firstname), 0, 45);
233// else
234// $CUSTOMER_FIRSTNAME=(string)($firstname);
235// }
236// else
237// $CUSTOMER_FIRSTNAME=' ';
238//
239// if($address){
240// if(strlen($address)>255)
241// $CUSTOMER_ADDRESS=substr((string)($address), 0, 255);
242// else
243// $CUSTOMER_ADDRESS=(string)($address);
244// }
245// else
246// $CUSTOMER_ADDRESS=' ';
247//
248// if($zipcode){
249// if(strlen($zipcode)>12)
250// $CUSTOMER_ZIPCODE=substr((string)($zipcode), 0, 12);
251// else
252// $CUSTOMER_ZIPCODE=(string)($zipcode);
253// }
254// else
255// $CUSTOMER_ZIPCODE=' ';
256//
257// if($city){
258// if(strlen($city)>45)
259// $CUSTOMER_CITY=substr((string)($city), 0, 45);
260// else
261// $CUSTOMER_CITY=(string)($city);
262// }
263// else
264// $CUSTOMER_CITY=' ';
265//
266// if($state){
267// if(strlen($state)>45)
268// $CUSTOMER_STATE=substr((string)($state), 0, 45);
269// else
270// $CUSTOMER_STATE=(string)($state);
271// }
272// else
273// $CUSTOMER_STATE=' ';
274//
275// if($country){
276// if(strlen($country)>45)
277// $CUSTOMER_COUNTRY=substr((string)($country), 0, 45);
278// else
279// $CUSTOMER_COUNTRY=(string)($country);
280// }
281// else
282// $CUSTOMER_COUNTRY=' ';
283
284 /* CUSTOMER_PHONE */
285 if($phone){
286 if(strlen($phone)>15)
287 $CUSTOMER_PHONE=substr((string)($phone), 0, 15);
288 else
289 $CUSTOMER_PHONE=(string)($phone);
290 } else
291 $CUSTOMER_PHONE=' ';
292
293 /* CUSTOMER_EMAIL */
294 if($email){
295 if(strlen($email)>45)
296 $CUSTOMER_EMAIL=substr((string)($email), 0, 45);
297 else
298 $CUSTOMER_EMAIL=(string)($email);
299 } else
300 $CUSTOMER_EMAIL=' ';
301
302 /* LANGUAGE */
303 if($lang){
304 if(strlen($lang)>2)
305 $LANGUAGE=substr((string)($lang), 0, 2);
306 else
307 $LANGUAGE=(string)($lang);
308 } else
309 $LANGUAGE=' ';
310
311 /* FPAY_URLREPAUTO */
312 if($url_reponse){
313 if(strlen($url_reponse)>125)
314 $FPAY_URLREPAUTO=substr((string)($url_reponse), 0, 125);
315 else
316 $FPAY_URLREPAUTO=(string)($url_reponse);
317 } else
318 $FPAY_URLREPAUTO=' ';
319
320 $message='';
321
322 // converte $TRANSACTION_CAPTURE to String for MESSAGE_SIGNATURE
323 $TRANSACTION_CAPTURE = ($TRANSACTION_CAPTURE) ? 'true' : 'false';
324 //$message=$FPAY_MESSAGE_VERSION.$MERCHANT_ID.$AMOUNT.$CURRENCY_CODE.$TRANSACTION_CAPTURE.$TRANSACTION_TYPE.$TRANSACTION_MODE.$CUSTOM_DATA.$ORDER_ID.$ORDER_DETAILS.$MERCHANT_URL.$CUSTOMER_LASTNAME.$CUSTOMER_FIRSTNAME.$CUSTOMER_ADDRESS.$CUSTOMER_ZIPCODE.$CUSTOMER_CITY.$CUSTOMER_STATE.$CUSTOMER_COUNTRY.$CUSTOMER_PHONE.$CUSTOMER_EMAIL.$LANGUAGE.$FPAY_URLREPAUTO;
325 $message=$FPAY_MESSAGE_VERSION.$MERCHANT_ID.$AMOUNT.$CURRENCY_CODE.$TRANSACTION_CAPTURE.$TRANSACTION_TYPE.$TRANSACTION_MODE.$CUSTOM_DATA.$ORDER_ID.$ORDER_DETAILS.$MERCHANT_URL.$CUSTOMER_PHONE.$CUSTOMER_EMAIL.$LANGUAGE.$FPAY_URLREPAUTO;
326 $FPAY_MERCHANT_KEY = $hmac;
327 $MESSAGE_SIGNATURE = hash_hmac('sha256',$message,$FPAY_MERCHANT_KEY);
328 $hexdigest = bin2hex($MESSAGE_SIGNATURE);
329 $MESSAGE_SIGNATURE= strtoupper($MESSAGE_SIGNATURE);
330
331 //Construction of JSON Object
332 $this->addLog($BASE,"==> FPAY_MESSAGE_VERSION : $FPAY_MESSAGE_VERSION");
333 $this->addLog($BASE,"==> MERCHANT_ID : $MERCHANT_ID");
334 $this->addLog($BASE,"==> AMOUNT : $AMOUNT");
335 $this->addLog($BASE,"==> CURRENCY_CODE : $CURRENCY_CODE");
336 $this->addLog($BASE,"==> TRANSACTION_CAPTURE : $TRANSACTION_CAPTURE");
337 $this->addLog($BASE,"==> TRANSACTION_TYPE : $TRANSACTION_TYPE");
338 $this->addLog($BASE,"==> TRANSACTION_MODE : $TRANSACTION_MODE");
339// $this->addLog($BASE,"==> CUSTOM_DATA : $CUSTOM_DATA");
340 $this->addLog($BASE,"==> ORDER_ID : $ORDER_ID");
341 $this->addLog($BASE,"==> ORDER_DETAILS : $ORDER_DETAILS");
342 $this->addLog($BASE,"==> MERCHANT_URL : $MERCHANT_URL");
343// $this->addLog($BASE,"==> CUSTOMER_LASTNAME : $CUSTOMER_LASTNAME");
344// $this->addLog($BASE,"==> CUSTOMER_FIRSTNAME : $CUSTOMER_FIRSTNAME");
345// $this->addLog($BASE,"==> CUSTOMER_ADDRESS : $CUSTOMER_ADDRESS");
346// $this->addLog($BASE,"==> CUSTOMER_ZIPCODE : $CUSTOMER_ZIPCODE");
347// $this->addLog($BASE,"==> CUSTOMER_CITY : $CUSTOMER_CITY");
348// $this->addLog($BASE,"==> CUSTOMER_STATE : $CUSTOMER_STATE");
349// $this->addLog($BASE,"==> CUSTOMER_COUNTRY : $CUSTOMER_COUNTRY");
350 $this->addLog($BASE,"==> CUSTOMER_PHONE : $CUSTOMER_PHONE");
351 $this->addLog($BASE,"==> CUSTOMER_EMAIL : $CUSTOMER_EMAIL");
352 $this->addLog($BASE,"==> LANGUAGE : $LANGUAGE");
353 $this->addLog($BASE,"==> FPAY_URLREPAUTO : $FPAY_URLREPAUTO");
354// $this->addLog($BASE,"==> AMOUNT_CONVERSION : $AMOUNT_CONVERSION");
355// $this->addLog($BASE,"==> CONVERTED_AMOUNT : $CONVERTED_AMOUNT");
356// $this->addLog($BASE,"==> CONVERSION_CURRENCY : $CONVERSION_CURRENCY");
357// $this->addLog($BASE,"==> CUSTOMER_MESSAGE : $CUSTOMER_MESSAGE");
358 $this->addLog($BASE,"==> MESSAGE_SIGNATURE : $MESSAGE_SIGNATURE");
359
360 $retour = array(
361 'FPAY_MESSAGE_VERSION'=>$FPAY_MESSAGE_VERSION,
362 'MERCHANT_ID'=>$MERCHANT_ID,
363 'AMOUNT' => $AMOUNT,
364 'CURRENCY_CODE' =>$CURRENCY_CODE,
365 'TRANSACTION_CAPTURE' =>$capture,
366 'TRANSACTION_TYPE'=>$TRANSACTION_TYPE,
367 'TRANSACTION_MODE'=>$TRANSACTION_MODE,
368 'CUSTOM_DATA'=> $CUSTOM_DATA,
369 'ORDER_ID'=>$ORDER_ID,
370 'ORDER_DETAILS'=>$ORDER_DETAILS,
371 'MERCHANT_URL'=>$MERCHANT_URL,
372// 'AMOUNT_CONVERSION'=>$AMOUNT_CONVERSION,
373// 'CONVERTED_AMOUNT'=>$CONVERTED_AMOUNT,
374// 'CONVERSION_CURRENCY'=>$CONVERSION_CURRENCY,
375// 'CUSTOMER_MESSAGE'=>$CUSTOMER_MESSAGE,
376// 'CUSTOMER_LASTNAME'=>$CUSTOMER_LASTNAME,
377// 'CUSTOMER_FIRSTNAME'=>$CUSTOMER_FIRSTNAME,
378// 'CUSTOMER_ADDRESS'=>$CUSTOMER_ADDRESS,
379// 'CUSTOMER_ZIPCODE'=>$CUSTOMER_ZIPCODE,
380// 'CUSTOMER_CITY'=>$CUSTOMER_CITY,
381// 'CUSTOMER_STATE'=>$CUSTOMER_STATE,
382// 'CUSTOMER_COUNTRY'=>$CUSTOMER_COUNTRY,
383 'CUSTOMER_PHONE'=>$CUSTOMER_PHONE,
384 'CUSTOMER_EMAIL'=>$CUSTOMER_EMAIL,
385 'LANGUAGE'=>$LANGUAGE,
386 'FPAY_URLREPAUTO'=>$FPAY_URLREPAUTO,
387 'MESSAGE_SIGNATURE' => $MESSAGE_SIGNATURE
388 );
389
390 // script to send JSON Data to FrontEnd.
391 $content = json_encode($retour);
392 $curl = curl_init($url_fpay);
393 curl_setopt($curl, CURLOPT_HEADER, false);
394 curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
395 curl_setopt($curl, CURLOPT_HTTPHEADER,
396 array("Content-type: application/json"));
397 curl_setopt($curl, CURLOPT_POST, true);
398 curl_setopt($curl, CURLOPT_POSTFIELDS, $content);
399 curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
400
401 // For Production Server
402 //curl_setopt($curl, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1);
403
404 // For Test Server
405 curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
406 curl_setopt($curl, CURLOPT_SSLVERSION,1);
407
408 $json_response = curl_exec($curl);
409 $status = curl_getinfo($curl, CURLINFO_HTTP_CODE);
410 if ( $status != 201 && $status != 200) {
411 //die("Error: call to URL $url_fpay failed with status $status, response $json_response, curl_error " . curl_error($curl) . ", curl_errno " . curl_errno($curl));
412 $this->addLog($BASE,'== !! erreur retournee par le front curl error : ');
413 $this->addLog($BASE,"<== ERREUR : Error: call to URL $url_fpay failed with status $status, response $json_response, curl_error " . curl_error($curl) . ", curl_errno " . curl_errno($curl));
414 $this->addLog($BASE,'==> revoie vers page erreur : error.php ');
415
416 return 101;
417 }
418
419 $this->addLog($BASE,"== send JSON Data to Front ... ==>");
420 curl_close($curl);
421 //Response in JSON Format
422 $response = json_decode($json_response, true);
423 $RESPONSE_CODE=$response['RESPONSE_CODE'];
424 $REASON_CODE=$response['REASON_CODE'];
425
426 $this->addLog($BASE,"<== RESPONSE_CODE : $RESPONSE_CODE ");
427 $this->addLog($BASE,"<== REASON_CODE : $REASON_CODE ");
428 $REP=(int)$RESPONSE_CODE;
429 // If Errors
430
431 if ($REP!=0) {
432 // Errors .
433 $this->addLog($BASE,'== !! erreur retournee par le front : ');
434 $this->addLog($BASE,"<== RESPONSE_CODE : $RESPONSE_CODE ");
435 $this->addLog($BASE,"<== REASON_CODE : $REASON_CODE ");
436
437 return 102;
438 } else {
439 $ORDER_ID=$response['ORDER_ID'];
440 $FPAY_MESSAGE_VERSION=$response['FPAY_MESSAGE_VERSION'];
441 $MERCHANT_ID=$response['MERCHANT_ID'];
442 $RESPONSE_CODE=$response['RESPONSE_CODE'];
443 $REASON_CODE=$response['REASON_CODE'];
444 $REFERENCE_ID=$response['REFERENCE_ID'];
445 $TRACK_ID=$response['TRACK_ID'];
446 $FPAY_URL=$response['FPAY_URL'];
447 $MESSAGE_SIGNATURE=$response['MESSAGE_SIGNATURE'];
448
449 $this->addLog($BASE,"<== FPAY_MESSAGE_VERSION : $FPAY_MESSAGE_VERSION ");
450 $this->addLog($BASE,"<== MERCHANT_ID : $MERCHANT_ID ");
451 $this->addLog($BASE,"<== RESPONSE_CODE : $RESPONSE_CODE ");
452 $this->addLog($BASE,"<== REASON_CODE : $REASON_CODE ");
453 $this->addLog($BASE,"<== ORDER_ID : $ORDER_ID ");
454 $this->addLog($BASE,"<== REFERENCE_ID : $REFERENCE_ID ");
455 $this->addLog($BASE,"<== TRACK_ID : $TRACK_ID ");
456 $this->addLog($BASE,"<== FPAY_URL : $FPAY_URL ");
457 $this->addLog($BASE,"<== MESSAGE_SIGNATURE : $MESSAGE_SIGNATURE ");
458
459 $dt=$FPAY_MESSAGE_VERSION.$MERCHANT_ID.$RESPONSE_CODE.$REASON_CODE.$ORDER_ID.$REFERENCE_ID.$TRACK_ID.$FPAY_URL;
460
461 //send data by POST to fpay
462 //$home_url = $URL . '/forward_Data.php?FPAY_URL='.$FPAY_URL.'&ORDER_ID='.$ORDER_ID.'&REFERENCE_ID='.$REFERENCE_ID.'&TRACK_ID='.$TRACK_ID;
463 //$home_url = $this->forwardData($FPAY_URL, $ORDER_ID, $REFERENCE_ID, $TRACK_ID);
464// $this->addLog($BASE,'==> send Data to URL :==> '.$home_url);
465// $this->addLog($BASE,'<<<<==== Fin sendData() ====>>>>');
466
467 //header('Location: ' . $home_url);
468 return $data = [
469 'FPAY_URL' => $FPAY_URL,
470 'ORDER_ID' => $ORDER_ID,
471 'REFERENCE_ID' => $REFERENCE_ID,
472 'TRACK_ID' => $TRACK_ID,
473 ];
474 //exit();
475 }
476 }
477
478 function receiveData($package_Folder,$secretKey) {
479 header('Content-type: application/json');
480 header('Cache-Control: no-cache, must-revalidate');
481 $this->addLog($package_Folder," >>==== Début receiveData() =====<< ");
482
483 $RESPONSE="ACKNOWLEDGE=OK";
484 // Verifie if receive data.
485 if( $data = file_get_contents("php://input"))
486 {
487 // Read data
488 $buff = file_get_contents("php://input");
489 $data = json_decode($buff, true);
490
491 $FPAY_MESSAGE_VERSION=$data['FPAY_MESSAGE_VERSION'];
492 $MERCHANT_ID=$data['MERCHANT_ID'];
493 $REFERENCE_ID=$data['REFERENCE_ID'];
494 $TRACK_ID=$data['TRACK_ID'];
495 $RESPONSE_CODE=$data['RESPONSE_CODE'];
496 $REASON_CODE=$data['REASON_CODE'];
497 $ORDER_ID=$data['ORDER_ID'];
498 $TRANSACTION_ID=$data['TRANSACTION_ID'];
499 $TRANSACTION_DATE=$data['TRANSACTION_DATE'];
500 $AMOUNT=$data['AMOUNT'];
501 $CURRENCY_CODE=$data['CURRENCY_CODE'];
502 $TRANSACTION_STATE=$data['TRANSACTION_STATE'];
503
504 $MESSAGE_SIGNATURE=$data['MESSAGE_SIGNATURE'];
505
506 // Build the string to hache
507 $dt=$FPAY_MESSAGE_VERSION.$MERCHANT_ID.$REFERENCE_ID.$TRACK_ID.$RESPONSE_CODE.$REASON_CODE.$ORDER_ID.$TRANSACTION_ID.$TRANSACTION_DATE.$AMOUNT.$CURRENCY_CODE.$TRANSACTION_STATE;
508
509 $digest = $this->signData($dt,$secretKey);
510 $hexdigest = bin2hex($digest);
511
512 $this->addLog($package_Folder," ==== Received Data =====");
513 $this->addLog($package_Folder,"FPAY_MESSAGE_VERSION =".$FPAY_MESSAGE_VERSION);
514 $this->addLog($package_Folder,"MERCHANT_ID =".$MERCHANT_ID);
515 $this->addLog($package_Folder,"REFERENCE_ID =".$REFERENCE_ID);
516 $this->addLog($package_Folder,"RESPONSE_CODE =".$RESPONSE_CODE);
517 $this->addLog($package_Folder,"REASON_CODE =".$REASON_CODE);
518 $this->addLog($package_Folder,"ORDER_ID =".$ORDER_ID);
519 $this->addLog($package_Folder,"TRANSACTION_ID =".$TRANSACTION_ID);
520 $this->addLog($package_Folder,"TRANSACTION_DATE =".$TRANSACTION_DATE);
521 $this->addLog($package_Folder,"AMOUNT =".$AMOUNT);
522 $this->addLog($package_Folder,"CURRENCY_CODE =".$CURRENCY_CODE);
523 $this->addLog($package_Folder,"TRANSACTION_STATE =".$TRANSACTION_STATE);
524
525
526
527 $this->addLog($package_Folder,"signature brute =".$dt);
528 $this->addLog($package_Folder,"Received signature =".strtoupper($MESSAGE_SIGNATURE));
529 $this->addLog($package_Folder,"Calculated signature =".strtoupper($hexdigest));
530
531 $AMOUNT=number_format(($AMOUNT/100), 2, '.', '');
532
533 //Verifying Hash
534 if(strtoupper($hexdigest)==strtoupper($MESSAGE_SIGNATURE))
535 {
536 $MERCHANT_GO="true";
537 $this->addLog($package_Folder,"MERCHANT_GO = true");
538 }
539 else{
540 $MERCHANT_GO="false";
541 $RESPONSE="SIGNATURE INVALIDE";
542 $this->addLog($package_Folder,"SIGNATURE INVALIDE == MERCHANT_GO=false ");
543 }
544
545 $retour = array(
546 'FPAY_MESSAGE_VERSION'=>($FPAY_MESSAGE_VERSION),
547 'MERCHANT_ID'=>strtoupper($MERCHANT_ID),
548 'ORDER_ID' => ($ORDER_ID),
549 'REFERENCE_ID' =>($REFERENCE_ID),
550 'TRACK_ID'=>($TRACK_ID),
551 'MERCHANT_GO'=>($MERCHANT_GO),
552 'MESSAGE_SIGNATURE' => ($MESSAGE_SIGNATURE)
553 );
554
555 $receive = array(
556 'MERCHANT_ID'=>$MERCHANT_ID,
557 'REFERENCE_ID' => $REFERENCE_ID,
558 'TRACK_ID' =>$TRACK_ID,
559 'RESPONSE_CODE' =>$RESPONSE_CODE,
560 'REASON_CODE'=>$REASON_CODE,
561 'ORDER_ID' => $ORDER_ID,
562 'TRANSACTION_ID' =>$TRANSACTION_ID,
563 'TRANSACTION_DATE' =>$TRANSACTION_DATE,
564 'AMOUNT'=>$AMOUNT,
565 'CURRENCY_CODE' =>$CURRENCY_CODE,
566 'TRANSACTION_STATE'=>$TRANSACTION_STATE,
567 'MERCHANT_GO'=>$MERCHANT_GO,
568 'FPAY_RETURN'=>json_encode($retour)
569 );
570
571
572
573 $this->addLog($package_Folder," ==> data to send : ".json_encode($retour));
574 $this->addLog($package_Folder," >>==== End receiveData() =====<<");
575
576 return $receive;
577 }
578 else {
579 $this->addLog($package_Folder," >>==== receiveData : input = null =====<<");
580 $this->addLog($package_Folder," >>==== End receiveData() =====<<");
581 return null;
582 }
583 }
584}