for testing and deploying your application
for finding and fixing issues
for empowering human code reviews
<?php declare(strict_types = 1);
namespace SlevomatCsobGateway\Call;
use DateTimeImmutable;
use SlevomatCsobGateway\Api\ApiClient;
use SlevomatCsobGateway\Crypto\SignatureDataFormatter;
use SlevomatCsobGateway\Validator;
class RefundPaymentRequest
{
/** @var string */
private $merchantId;
private $payId;
/** @var int|null */
private $amount;
public function __construct(
string $merchantId,
string $payId,
?int $amount = null
)
Validator::checkPayId($payId);
$this->merchantId = $merchantId;
$this->payId = $payId;
$this->amount = $amount;
}
public function send(ApiClient $apiClient): PaymentResponse
$requestData = [
'merchantId' => $this->merchantId,
'payId' => $this->payId,
];
if ($this->amount !== null) {
$requestData['amount'] = $this->amount;
$response = $apiClient->put(
'payment/refund',
$requestData,
new SignatureDataFormatter([
'merchantId' => null,
'payId' => null,
'dttm' => null,
'amount' => null,
]),
'resultCode' => null,
'resultMessage' => null,
'paymentStatus' => null,
'authCode' => null,
])
);
$data = $response->getData();
return new PaymentResponse(
$data['payId'],
DateTimeImmutable::createFromFormat('YmdHis', $data['dttm']),
ResultCode::get($data['resultCode']),
$data['resultMessage'],
isset($data['paymentStatus']) ? PaymentStatus::get($data['paymentStatus']) : null,
$data['authCode'] ?? null