Skip to content

Commit 6e7fc20

Browse files
committed
Add modifying an unsuccessful capture request to successful when all payments are captured
1 parent 87f9ba8 commit 6e7fc20

File tree

1 file changed

+33
-0
lines changed

1 file changed

+33
-0
lines changed

src/Message/CaptureRequest.php

+33
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ protected function runTransaction(SoapClient $soapClient, array $data): stdClass
5454
unset($data['paymentOrderKey']);
5555

5656
$captureResponse = $soapClient->__soapCall('capture', [$data]);
57+
$this->modifyCaptureResponseToSuccessfulWhenAlreadyCaptured($captureResponse, $statusResponse);
5758

5859
return $this->mergeResponses($statusResponse, $captureResponse);
5960
}
@@ -116,6 +117,38 @@ private function isPaymentCaptured(stdClass $payment): bool
116117
return isset($payment->authorization->capture);
117118
}
118119

120+
/**
121+
* Modifies a erroneous capture response to successful when the payments are already captured.
122+
*
123+
* This is required to facilitate the same workflow for both directly captured payment methods (like iDeal)
124+
* and delayed captured payment methods (like ELV).
125+
*
126+
* @param stdClass $captureResponse
127+
* @param stdClass $statusResponse
128+
*/
129+
private function modifyCaptureResponseToSuccessfulWhenAlreadyCaptured(
130+
stdClass $captureResponse,
131+
stdClass $statusResponse
132+
): void {
133+
if (isset($captureResponse->captureSuccess)) {
134+
return;
135+
}
136+
137+
if (isset($statusResponse->statusSuccess) === false) {
138+
return;
139+
}
140+
141+
$statusResponseApproximateTotals = $statusResponse->statusSuccess->report->approximateTotals;
142+
if ($statusResponseApproximateTotals->totalRegistered !== $statusResponseApproximateTotals->totalCaptured) {
143+
return;
144+
}
145+
146+
$captureResponse->captureSuccess = new stdClass();
147+
$captureResponse->captureSuccess->success = new stdClass();
148+
$captureResponse->captureSuccess->success->code = 'SUCCESS';
149+
$captureResponse->captureSuccess->success->_ = $captureResponse->captureErrors->error->_;
150+
}
151+
119152
/**
120153
* Returns an stdClass with the multiple responses.
121154
*

0 commit comments

Comments
 (0)