Skip to content

Commit

Permalink
Payement status AUTHORIZED must be considered as captured under certa…
Browse files Browse the repository at this point in the history
…in conditions.
  • Loading branch information
Léopold Baillard committed Nov 7, 2019
1 parent 1360df1 commit f843482
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 23 deletions.
2 changes: 1 addition & 1 deletion src/Action/StatusAction.php
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ public function execute($request)

$model = ArrayObject::ensureArrayObject($request->getModel());

$this->requestStatusApplier->apply($model[Api::FIELD_VADS_TRANS_STATUS], $request);
$this->requestStatusApplier->apply($model[Api::FIELD_VADS_TRANS_STATUS], $request, $model);
}

/**
Expand Down
4 changes: 2 additions & 2 deletions src/Api.php
Original file line number Diff line number Diff line change
Expand Up @@ -297,9 +297,9 @@ protected function getCertificate(): string
/**
* @return mixed
*/
protected function getOption(array $details, string $name)
public function getOption(array $details, string $name)
{
if (array_key_exists($name, $details)) {
if (array_key_exists($name, $details) && null !== $details[$name]) {
return $details[$name];
}

Expand Down
55 changes: 35 additions & 20 deletions src/Request/RequestStatusApplier.php
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?php

declare(strict_types=1);
declare( strict_types=1 );

namespace Yproximite\Payum\SystemPay\Request;

Expand All @@ -12,38 +12,53 @@ class RequestStatusApplier
/** @var array<string, callable<Request>> */
protected $appliers = [];

public function __construct()
/** @var \ArrayAccess|null */
protected $model;

public function __construct ()
{
$this->appliers[Api::STATUS_ABANDONED] = function (Request $request) { $request->markCanceled(); };
$this->appliers[Api::STATUS_AUTHORISED] = function (Request $request) { $request->markAuthorized(); };
$this->appliers[Api::STATUS_AUTHORISED_TO_VALIDATE] = function (Request $request) { $request->markPending(); };
$this->appliers[Api::STATUS_CANCELLED] = function (Request $request) { $request->markCanceled(); };
$this->appliers[Api::STATUS_CAPTURED] = function (Request $request) { $request->markCaptured(); };
$this->appliers[Api::STATUS_CAPTURE_FAILED] = function (Request $request) { $request->markFailed(); };
$this->appliers[Api::STATUS_EXPIRED] = function (Request $request) { $request->markExpired(); };
$this->appliers[Api::STATUS_INITIAL] = function (Request $request) { $request->markNew(); };
$this->appliers[Api::STATUS_NOT_CREATED] = function (Request $request) { $request->markUnknown(); };
$this->appliers[Api::STATUS_REFUSED] = function (Request $request) { $request->markCanceled(); };
$this->appliers[Api::STATUS_SUSPENDED] = function (Request $request) { $request->markSuspended(); };
$this->appliers[Api::STATUS_UNDER_VERIFICATION] = function (Request $request) { $request->markPending(); };
$this->appliers[Api::STATUS_WAITING_AUTHORISATION] = function (Request $request) { $request->markPending(); };
$this->appliers[Api::STATUS_WAITING_AUTHORISATION_TO_VALIDATE] = function (Request $request) { $request->markPending(); };
$this->appliers[Api::STATUS_ABANDONED] = function ( Request $request ) { $request->markCanceled(); };
$this->appliers[Api::STATUS_AUTHORISED] = function ( Request $request ) { $this->checkPaymentAuthorized( $request ); };
$this->appliers[Api::STATUS_AUTHORISED_TO_VALIDATE] = function ( Request $request ) { $request->markPending(); };
$this->appliers[Api::STATUS_CANCELLED] = function ( Request $request ) { $request->markCanceled(); };
$this->appliers[Api::STATUS_CAPTURED] = function ( Request $request ) { $request->markCaptured(); };
$this->appliers[Api::STATUS_CAPTURE_FAILED] = function ( Request $request ) { $request->markFailed(); };
$this->appliers[Api::STATUS_EXPIRED] = function ( Request $request ) { $request->markExpired(); };
$this->appliers[Api::STATUS_INITIAL] = function ( Request $request ) { $request->markNew(); };
$this->appliers[Api::STATUS_NOT_CREATED] = function ( Request $request ) { $request->markUnknown(); };
$this->appliers[Api::STATUS_REFUSED] = function ( Request $request ) { $request->markCanceled(); };
$this->appliers[Api::STATUS_SUSPENDED] = function ( Request $request ) { $request->markSuspended(); };
$this->appliers[Api::STATUS_UNDER_VERIFICATION] = function ( Request $request ) { $request->markPending(); };
$this->appliers[Api::STATUS_WAITING_AUTHORISATION] = function ( Request $request ) { $request->markPending(); };
$this->appliers[Api::STATUS_WAITING_AUTHORISATION_TO_VALIDATE] = function ( Request $request ) { $request->markPending(); };
}

public function apply(?string $status, Request $request): void
public function apply ( ?string $status, Request $request, ?\ArrayAccess $model )
: void
{
if (null === $status) {
if ( null === $status ) {
$request->markNew();

return;
}

if (!array_key_exists($status, $this->appliers)) {
if ( !array_key_exists( $status, $this->appliers ) ) {
$request->markUnknown();

return;
}

$this->appliers[$status]($request);
$this->model = $model;

$this->appliers[$status]( $request );
}

private function checkPaymentAuthorized ( Request $request )
{
if ( $this->model && $this->model[Api::FIELD_VADS_RESULT] === "00" ) {
$request->markCaptured();
} else {
$request->markAuthorized();
}
}
}

0 comments on commit f843482

Please sign in to comment.