Skip to content

Commit

Permalink
Merge pull request #69 from paytrail/addReportBySettlementIdEndpoint
Browse files Browse the repository at this point in the history
Add settlements by id endpoint
  • Loading branch information
loueranta-paytrail authored Apr 11, 2023
2 parents 8870deb + 1e1847c commit 1f2f70f
Show file tree
Hide file tree
Showing 5 changed files with 120 additions and 6 deletions.
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,7 @@ List of `Client::class` methods
| getSettlements() [Deprecated] | Deprecated Request settlements |
| requestSettlements() | Request settlements |
| requestPaymentReport() | Request payment report |
| requestPaymentReportBySettlement() | Request payment report by settlement ID |


---
Expand Down
29 changes: 28 additions & 1 deletion src/Client.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
use Paytrail\SDK\Request\GetTokenRequest;
use Paytrail\SDK\Request\MitPaymentRequest;
use Paytrail\SDK\Request\PaymentRequest;
use Paytrail\SDK\Request\ReportBySettlementRequest;
use Paytrail\SDK\Request\ReportRequest;
use Paytrail\SDK\Request\SettlementRequest;
use Paytrail\SDK\Request\ShopInShopPaymentRequest;
Expand Down Expand Up @@ -705,7 +706,7 @@ function ($decoded) {
* @throws HmacException
* @throws ValidationException
*/
public function requestPaymentReport(ReportRequest $reportRequest)
public function requestPaymentReport(ReportRequest $reportRequest): ReportRequestResponse
{
$this->validateRequestItem($reportRequest);
$uri = '/payments/report';
Expand All @@ -728,6 +729,32 @@ function ($decoded) {
return $reportRequestResponse;
}

/**
* Request payment report by settlement ID.
*
* @param ReportBySettlementRequest $reportRequest
* @param int $settlementId
* @return ReportRequestResponse
* @throws HmacException
* @throws ValidationException
*/
public function requestPaymentReportBySettlement(
ReportBySettlementRequest $reportRequest,
int $settlementId
): ReportRequestResponse {
$this->validateRequestItem($reportRequest);
$uri = "/settlements/{$settlementId}/payments/report";

return $this->post(
$uri,
$reportRequest,
function ($decoded) {
return (new ReportRequestResponse())
->setRequestId($decoded->requestId ?? null);
},
);
}

/**
* Activate invoice created with manualInvoiceActivation set to true
*
Expand Down
2 changes: 0 additions & 2 deletions src/Request/AbstractPaymentRequest.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,7 @@
use Paytrail\SDK\Interfaces\CustomerInterface;
use Paytrail\SDK\Interfaces\ItemInterface;
use Paytrail\SDK\Interfaces\PaymentRequestInterface;
use Paytrail\SDK\Model\Address;
use Paytrail\SDK\Model\CallbackUrl;
use Paytrail\SDK\Model\Customer;
use Paytrail\SDK\Model\Item;
use Paytrail\SDK\Util\JsonSerializable;

Expand Down
91 changes: 91 additions & 0 deletions src/Request/ReportBySettlementRequest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
<?php

declare(strict_types=1);

namespace Paytrail\SDK\Request;

use Paytrail\SDK\Exception\ValidationException;

class ReportBySettlementRequest implements \JsonSerializable
{
protected $requestType;
protected $callbackUrl;
protected $reportFields;
protected $subMerchant;

public function validate()
{
$props = get_object_vars($this);

if (empty($props['requestType'])) {
throw new ValidationException('RequestType can not be empty');
}

if (!in_array($props['requestType'], ['json', 'csv'])) {
throw new ValidationException('RequestType must be either "json" or "csv"');
}

if (empty($props['callbackUrl'])) {
throw new ValidationException('CallbackUrl can not be empty');
}

if ($props['reportFields'] && !is_array($props['reportFields'])) {
throw new ValidationException('ReportFields must be type of array');
}

return true;
}
/**
* Set request type.
*
* @param string $requestType
* @return $this
*/
public function setRequestType(string $requestType): self
{
$this->requestType = $requestType;
return $this;
}

/**
* Set callback url.
*
* @param string $callbackUrl
* @return $this
*/
public function setCallbackUrl(string $callbackUrl): self
{
$this->callbackUrl = $callbackUrl;
return $this;
}

/**
* Set report fields.
*
* @param string[] $reportFields
* @return $this
*/
public function setReportFields(array $reportFields): self
{
$this->reportFields = $reportFields;
return $this;
}

/**
* Set submerchant.
*
* @param int $subMerchant
* @return $this
*/
public function setSubMerchant(int $subMerchant): self
{
$this->subMerchant = $subMerchant;
return $this;
}

public function jsonSerialize(): array
{
$dataArray = json_encode(get_object_vars($this));
return array_filter(json_decode($dataArray, true));
}
}
3 changes: 0 additions & 3 deletions src/Request/ReportRequest.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,9 @@
namespace Paytrail\SDK\Request;

use Paytrail\SDK\Exception\ValidationException;
use Paytrail\SDK\Util\ObjectPropertyConverter;

class ReportRequest implements \JsonSerializable
{
use ObjectPropertyConverter;

public const PAYMENT_STATUSES = [
'default',
'paid',
Expand Down

0 comments on commit 1f2f70f

Please sign in to comment.