Skip to content

Commit f5e3349

Browse files
Add tracing details support (#46)
Add support for transaction tracing details
1 parent 2d188ce commit f5e3349

14 files changed

+357
-4
lines changed

src/Callback/Result.php

+25
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
use Ixopay\Client\Data\CustomerProfileData;
99
use Ixopay\Client\Data\Result\ResultData;
1010
use Ixopay\Client\Data\Result\ScheduleResultData;
11+
use Ixopay\Client\Data\TracingData\TracingData;
1112
use Ixopay\Client\Transaction\Error;
1213

1314
/**
@@ -199,6 +200,11 @@ class Result {
199200
*/
200201
protected $customer = null;
201202

203+
/**
204+
* @var null|TracingData
205+
*/
206+
protected $tracingData = null;
207+
202208
/**
203209
* @param Error[] $errors
204210
*
@@ -658,6 +664,25 @@ public function setCustomer($customer) {
658664
return $this;
659665
}
660666

667+
/**
668+
* @return null|TracingData
669+
*/
670+
public function getTracingData()
671+
{
672+
return $this->tracingData;
673+
}
674+
675+
/**
676+
* @param null|TracingData $tracingData
677+
*
678+
* @return $this
679+
*/
680+
public function setTracingData($tracingData)
681+
{
682+
$this->tracingData = $tracingData;
683+
return $this;
684+
}
685+
661686
/**
662687
* @return string
663688
*/

src/Client.php

+5
Original file line numberDiff line numberDiff line change
@@ -463,6 +463,11 @@ public function sendStatusRequest(StatusRequestData $statusRequestData) {
463463
throw new TypeException('Either transactionUuid or merchantTransactionId is required!');
464464
}
465465

466+
$includeTracing = $statusRequestData->getIncludeTracing();
467+
if ($includeTracing) {
468+
$endpoint .= '?includeTracing=' . $includeTracing;
469+
}
470+
466471
$httpResponse = $this->sendJsonApiRequest($endpoint, [], true);
467472

468473
return $this->getParser()->parseStatusResult($httpResponse->getBody());

src/Data/TracingData/TracingData.php

+29
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
<?php
2+
3+
namespace Ixopay\Client\Data\TracingData;
4+
5+
use Ixopay\Client\Json\DataObject;
6+
7+
/**
8+
* Class TracingData
9+
*
10+
* @package Ixopay\Client\Data\TracingData
11+
*/
12+
class TracingData extends DataObject
13+
{
14+
/** @var TracingDataTransaction[] */
15+
protected $transactions;
16+
17+
/** @return TracingDataTransaction[] */
18+
public function getTransactions()
19+
{
20+
return $this->transactions;
21+
}
22+
23+
/** @param TracingDataTransaction[] $transactions */
24+
public function setTransactions($transactions)
25+
{
26+
$this->transactions = $transactions;
27+
return $this;
28+
}
29+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
<?php
2+
3+
namespace Ixopay\Client\Data\TracingData;
4+
5+
use Ixopay\Client\Json\DataObject;
6+
7+
/**
8+
* Class TracingData
9+
*
10+
* @package Ixopay\Client\Data\TracingData
11+
*/
12+
class TracingDataConnector extends DataObject
13+
{
14+
/** @var string */
15+
protected $guid;
16+
17+
/** @return string */
18+
public function getGuid()
19+
{
20+
return $this->guid;
21+
}
22+
23+
/** @param string $guid */
24+
public function setGuid($guid)
25+
{
26+
$this->guid = $guid;
27+
return $this;
28+
}
29+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
<?php
2+
3+
namespace Ixopay\Client\Data\TracingData;
4+
5+
use Ixopay\Client\Json\DataObject;
6+
7+
/**
8+
* Class TracingDataTransaction
9+
*
10+
* @package Ixopay\Client\Data\TracingData
11+
*/
12+
class TracingDataTransaction extends DataObject
13+
{
14+
/** @var string */
15+
protected $uuid;
16+
17+
/** @var int */
18+
protected $sequenceNumber;
19+
20+
/** @var string */
21+
protected $status;
22+
23+
/** @var TracingDataConnector */
24+
protected $connector;
25+
26+
/** @return string */
27+
public function getUuid()
28+
{
29+
return $this->uuid;
30+
}
31+
32+
/** @param string $uuid */
33+
public function setUuid($uuid)
34+
{
35+
$this->uuid = $uuid;
36+
return $this;
37+
}
38+
39+
/** @return int */
40+
public function getSequenceNumber()
41+
{
42+
return $this->sequenceNumber;
43+
}
44+
45+
/** @param int $sequenceNumber */
46+
public function setSequenceNumber($sequenceNumber)
47+
{
48+
$this->sequenceNumber = $sequenceNumber;
49+
return $this;
50+
}
51+
52+
/** @return string */
53+
public function getStatus()
54+
{
55+
return $this->status;
56+
}
57+
58+
/** @param string $status */
59+
public function setStatus($status)
60+
{
61+
$this->status = $status;
62+
return $this;
63+
}
64+
65+
/** @return TracingDataConnector */
66+
public function getConnector()
67+
{
68+
return $this->connector;
69+
}
70+
71+
/** @param TracingDataConnector $connector */
72+
public function setConnector($connector)
73+
{
74+
$this->connector = $connector;
75+
return $this;
76+
}
77+
}

src/Json/JsonGenerator.php

+15
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,7 @@ protected function createDebit($transaction, $language){
179179
$data['l2l3Data'] = $this->stringifyL2L3Data($l2l3Data);
180180
}
181181

182+
$this->addTracingRules($transaction, $data);
182183
$this->updateData($transaction, $data);
183184

184185
return $this->addRequestDcc($data, $transaction);
@@ -385,6 +386,7 @@ protected function createPayout($transaction, $language){
385386
$data['l2l3Data'] = $this->stringifyL2L3Data($l2l3Data);
386387
}
387388

389+
$this->addTracingRules($transaction, $data);
388390
$this->updateData($transaction, $data);
389391

390392
return $data;
@@ -833,4 +835,17 @@ private function addRequestDcc(array $data, DccDataInterface $transaction)
833835

834836
return $data;
835837
}
838+
839+
/**
840+
* @param Payout|Debit|Preauthorize $transaction
841+
* @param array $data
842+
*
843+
* @return void
844+
*/
845+
public function addTracingRules($transaction, &$data)
846+
{
847+
if ($transaction->getIncludeTracing()) {
848+
$data['includeTracing'] = $transaction->getIncludeTracing();
849+
}
850+
}
836851
}

src/Json/JsonParser.php

+73
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@
1414
use Ixopay\Client\Data\Result\ScheduleResultData;
1515
use Ixopay\Client\Data\Result\WalletData as ReturnWalletData;
1616
use Ixopay\Client\Data\RiskCheckData;
17+
use Ixopay\Client\Data\TracingData\TracingData;
18+
use Ixopay\Client\Data\TracingData\TracingDataConnector;
19+
use Ixopay\Client\Data\TracingData\TracingDataTransaction;
1720
use Ixopay\Client\Data\TransactionSplit;
1821
use Ixopay\Client\Dispute\DisputeResult;
1922
use Ixopay\Client\Options\OptionsResult;
@@ -183,6 +186,8 @@ public function parseStatusResult($jsonString) {
183186
$result->setTransactionSubType($json['transactionSubType']);
184187
}
185188

189+
$this->setTracingData($json, $result);
190+
186191
return $result;
187192
}
188193

@@ -304,6 +309,8 @@ public function parseCallback($jsonString){
304309
$result->setTransactionSubType($json['transactionSubType']);
305310
}
306311

312+
$this->setTracingData($json, $result);
313+
307314
return $result;
308315
}
309316

@@ -544,6 +551,72 @@ protected function parseCustomerProfileData($data){
544551
return $customerProfileData;
545552
}
546553

554+
/**
555+
* @param $data
556+
*
557+
* @return TracingData
558+
*/
559+
protected function parseTracingData($data)
560+
{
561+
$transactions = $this->arrGet($data, 'transactions');
562+
$transactions = array_map(
563+
fn(array $transactionData) => $this->parseTracingDataTransaction($transactionData),
564+
$transactions
565+
);
566+
567+
$tracingData = new TracingData();
568+
$tracingData->setTransactions($transactions);
569+
570+
return $tracingData;
571+
}
572+
573+
/**
574+
* @param $json
575+
* @param StatusResult|CallbackResult $result
576+
*
577+
* @return void
578+
*/
579+
public function setTracingData($json, $result)
580+
{
581+
if (!isset($json['tracingData'])) {
582+
return;
583+
}
584+
585+
$tracingData = $this->parseTracingData($json['tracingData']);
586+
$result->setTracingData($tracingData);
587+
}
588+
589+
/**
590+
* @param $data
591+
*
592+
* @return TracingDataTransaction
593+
*/
594+
protected function parseTracingDataTransaction($data)
595+
{
596+
$tracingDataTransaction = new TracingDataTransaction();
597+
$tracingDataTransaction->setUuid($this->arrGet($data, 'uuid'));
598+
$tracingDataTransaction->setSequenceNumber($this->arrGet($data, 'sequence_number'));
599+
$tracingDataTransaction->setStatus($this->arrGet($data, 'status'));
600+
601+
$connector = $this->parseTracingDataConnector($this->arrGet($data, 'connector'));
602+
$tracingDataTransaction->setConnector($connector);
603+
604+
return $tracingDataTransaction;
605+
}
606+
607+
/**
608+
* @param $data
609+
*
610+
* @return TracingDataConnector
611+
*/
612+
protected function parseTracingDataConnector($data)
613+
{
614+
$tracingDataConnector = new TracingDataConnector();
615+
$tracingDataConnector->setGuid($this->arrGet($data, 'guid'));
616+
617+
return $tracingDataConnector;
618+
}
619+
547620
/**
548621
* helper function: array get
549622
* -> returns value at given key if exists

src/StatusApi/StatusRequestData.php

+26
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,13 @@ class StatusRequestData {
3434
*/
3535
protected $merchantTransactionId;
3636

37+
/**
38+
* Enable transaction routing and cascading details in the response
39+
*
40+
* @var bool
41+
*/
42+
protected $includeTracing = false;
43+
3744
/**
3845
* StatusRequestData constructor.
3946
*
@@ -102,6 +109,25 @@ public function setMerchantTransactionId($merchantTransactionId) {
102109
return $this;
103110
}
104111

112+
/**
113+
* @return bool
114+
*/
115+
public function getIncludeTracing()
116+
{
117+
return $this->includeTracing;
118+
}
119+
120+
/**
121+
* @param bool $includeTracing
122+
*
123+
* @return StatusRequestData
124+
*/
125+
public function setIncludeTracing($includeTracing)
126+
{
127+
$this->includeTracing = $includeTracing;
128+
return $this;
129+
}
130+
105131
/**
106132
* @throws TypeException
107133
*/

0 commit comments

Comments
 (0)