Skip to content

Commit

Permalink
Merge pull request #1 from LesVikings/master
Browse files Browse the repository at this point in the history
Notify URL_CHECK change & precisions test to AUTHORIZED status
  • Loading branch information
jacbac authored Sep 18, 2020
2 parents a2f0d2f + f843482 commit d6b290f
Show file tree
Hide file tree
Showing 5 changed files with 46 additions and 24 deletions.
7 changes: 6 additions & 1 deletion src/Action/CaptureAction.php
Original file line number Diff line number Diff line change
Expand Up @@ -36,12 +36,17 @@ public function execute($request)
return;
}

if (null === $details[Api::FIELD_VADS_URL_CHECK] && $request->getToken() instanceof TokenInterface) {
if ($request->getToken() instanceof TokenInterface) {
$notifyToken = $this->tokenFactory->createNotifyToken(
$request->getToken()->getGatewayName(),
$request->getToken()->getDetails()
);
}

if ($this->api && null !== $this->api->getOption($details->toUnsafeArray(), Api::FIELD_VADS_URL_CHECK)) {
$details[Api::FIELD_VADS_URL_CHECK] = $this->api->getOption($details->toUnsafeArray(), Api::FIELD_VADS_URL_CHECK) . $notifyToken->getHash();
}
elseif (null === $details[Api::FIELD_VADS_URL_CHECK]) {
$details[Api::FIELD_VADS_URL_CHECK] = $notifyToken->getTargetUrl();
}

Expand Down
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
5 changes: 3 additions & 2 deletions src/Api.php
Original file line number Diff line number Diff line change
Expand Up @@ -269,6 +269,7 @@ public function doPayment(array $details): void
$details[self::FIELD_VADS_PAGE_ACTION] = $this->getOption($details, self::FIELD_VADS_PAGE_ACTION);
$details[self::FIELD_VADS_PAYMENT_CONFIG] = $this->getOption($details, self::FIELD_VADS_PAYMENT_CONFIG);
$details[self::FIELD_VADS_VERSION] = $this->getOption($details, self::FIELD_VADS_VERSION);
$details[self::FIELD_VADS_URL_CHECK] = $this->getOption($details, self::FIELD_VADS_URL_CHECK);

$details['signature'] = $this->signatureGenerator->generate($details, $this->getCertificate(), $this->getHashAlgorithm());

Expand Down Expand Up @@ -302,9 +303,9 @@ protected function getHashAlgorithm(): 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();
}
}
}
1 change: 1 addition & 0 deletions src/SystemPayGatewayFactory.php
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ protected function populateConfig(ArrayObject $config): void
Api::FIELD_VADS_PAGE_ACTION => Api::PAGE_ACTION_PAYMENT,
Api::FIELD_VADS_PAYMENT_CONFIG => Api::PAYMENT_CONFIG_SINGLE,
Api::FIELD_VADS_VERSION => Api::V2,
Api::FIELD_VADS_URL_CHECK => null,
'sandbox' => true,
'certif_prod' => null,
'certif_test' => null,
Expand Down

0 comments on commit d6b290f

Please sign in to comment.