Skip to content

Commit

Permalink
Merge pull request #13 from acornforth/master
Browse files Browse the repository at this point in the history
Multiple Fixes
  • Loading branch information
sbarbat authored Jan 11, 2022
2 parents 6ff7435 + 6c0bf5b commit 9d116dd
Show file tree
Hide file tree
Showing 43 changed files with 794 additions and 791 deletions.
9 changes: 9 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# Package Control
/composer.lock

# Vendor Files
/vendor

# IDE/Workspace settings
/.idea

34 changes: 34 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,40 @@ public function registerBundles()
}
```

### Optional Installation steps

#### Money Amount Conversion

By default sylius stores prices as integer values representing the amount in cents/pence or smallest unit.

If you have modified sylius to store money amounts in a different format, or with a different precision, then you will need to override.

Example, if your copy of sylius stores 4 decimals instead of 2, then you will need to override the class like this:

```php
<?php declare(strict_types = 1);

namespace App\Provider\Sagepay;

use Sbarbat\SyliusSagepayPlugin\Provider\AmountProvider as BaseAmountProvider;
use Sylius\Component\Core\Model\PaymentInterface;


class AmountProvider extends BaseAmountProvider
{
public function getAmount(PaymentInterface $payment): string
{
return (string) ($payment->getAmount() / 10000);
}
}
```

and add an entry to your service config to point to it:
```yaml
Sbarbat\SyliusSagepayPlugin\Provider\AmountProvider:
class: App\Provider\Sagepay\AmountProvider

```

### Test Cards

Expand Down
29 changes: 10 additions & 19 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,27 +13,18 @@
],
"require": {
"php": "^7.1",

"sylius/sylius": "^1.1"
"sylius/sylius": "^1.1",
"ext-curl": "*",
"ext-json": "*"
},
"require-dev": {
"php-http/guzzle6-adapter": "^1.0",
"phpspec/phpspec": "^3.2",
"phpunit/phpunit": "^7",
"behat/behat": "^3.3",
"behat/mink": "^1.7",
"behat/mink-browserkit-driver": "^1.3",
"behat/mink-extension": "^2.2",
"behat/mink-selenium2-driver": "^1.3",
"friends-of-behat/context-service-extension": "^1.0",
"friends-of-behat/cross-container-extension": "^1.0",
"friends-of-behat/service-container-extension": "^1.0",
"friends-of-behat/symfony-extension": "^1.0",
"friends-of-behat/variadic-extension": "^1.0",
"lakion/mink-debug-extension": "^1.2.3",
"se/selenium-server-standalone": "^2.52",
"symplify/easy-coding-standard": "^2.4",
"sylius-labs/coding-standard": "^1.0"
"phpunit/phpunit": "^9.5",
"phpspec/phpspec": "^7.1",
"php-http/guzzle6-adapter": "^2.0",
"behat/behat": "^3.8",
"symplify/easy-coding-standard": "^9.4",
"sylius-labs/coding-standard": "^4.1",
"phpstan/phpstan": "^0.12.94"
},
"autoload": {
"psr-4": {
Expand Down
35 changes: 35 additions & 0 deletions ecs.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
<?php

declare(strict_types=1);

use PhpCsFixer\Fixer\ArrayNotation\ArraySyntaxFixer;
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
use Symplify\EasyCodingStandard\ValueObject\Option;
use Symplify\EasyCodingStandard\ValueObject\Set\SetList;

return static function (ContainerConfigurator $containerConfigurator): void {
$parameters = $containerConfigurator->parameters();
$parameters->set(Option::PATHS, [
__DIR__ . '/src',
__DIR__ . '/tests',
]);

$services = $containerConfigurator->services();
$services->set(ArraySyntaxFixer::class)
->call('configure', [[
'syntax' => 'short',
]]);

// run and fix, one by one
$containerConfigurator->import(SetList::SPACES);
$containerConfigurator->import(SetList::ARRAY);
$containerConfigurator->import(SetList::SYMFONY);
$containerConfigurator->import(SetList::PSR_12);
$containerConfigurator->import(SetList::STRICT);
$containerConfigurator->import(SetList::NAMESPACES);
$containerConfigurator->import(SetList::CONTROL_STRUCTURES);
$containerConfigurator->import(SetList::PHP_CS_FIXER);
$containerConfigurator->import(SetList::DOCBLOCK);
$containerConfigurator->import(SetList::CLEAN_CODE);
$containerConfigurator->import(SetList::SYMPLIFY);
};
4 changes: 2 additions & 2 deletions src/Action/Api/DirectApiAwareAction.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,12 @@
use Payum\Core\ApiAwareTrait;
use Payum\Core\GatewayAwareInterface;
use Payum\Core\GatewayAwareTrait;

use Sbarbat\SyliusSagepayPlugin\SagepayDirectApi;

abstract class DirectApiAwareAction implements GatewayAwareInterface, ApiAwareInterface
abstract class DirectApiAwareAction implements ActionInterface, GatewayAwareInterface, ApiAwareInterface
{
use GatewayAwareTrait;

use ApiAwareTrait;

public function __construct()
Expand Down
2 changes: 1 addition & 1 deletion src/Action/Api/FormApiAwareAction.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,12 @@
use Payum\Core\ApiAwareTrait;
use Payum\Core\GatewayAwareInterface;
use Payum\Core\GatewayAwareTrait;

use Sbarbat\SyliusSagepayPlugin\SagepayFormApi;

abstract class FormApiAwareAction implements ActionInterface, GatewayAwareInterface, ApiAwareInterface
{
use GatewayAwareTrait;

use ApiAwareTrait;

public function __construct()
Expand Down
43 changes: 13 additions & 30 deletions src/Action/Integrations/Direct/CaptureAction.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,36 +4,22 @@

namespace Sbarbat\SyliusSagepayPlugin\Action\Integrations\Direct;

use Payum\Core\Action\ActionInterface;
use Payum\Core\ApiAwareInterface;
use Payum\Core\ApiAwareTrait;
use Payum\Core\Bridge\Spl\ArrayObject;
use Payum\Core\Exception\RequestNotSupportedException;
use Payum\Core\GatewayAwareInterface;
use Payum\Core\GatewayAwareTrait;
use Payum\Core\Request\Convert;
use Payum\Core\Reply\HttpResponse;
use Payum\Core\Request\Capture;
use Payum\Core\Request\GetHttpRequest;
use Payum\Core\Request\RenderTemplate;
use Payum\Core\Reply\HttpResponse;
use Payum\Core\Security\GenericTokenFactoryAwareInterface;
use Payum\Core\Security\GenericTokenFactoryAwareTrait;

use Sylius\Component\Core\Model\PaymentInterface;

use Sbarbat\SyliusSagepayPlugin\SagepayFormApi;
use Sbarbat\SyliusSagepayPlugin\Action\Api\DirectApiAwareAction;
use Sbarbat\SyliusSagepayPlugin\Request\Api\ExecutePayment;
use Sbarbat\SyliusSagepayPlugin\Action\Integrations\Direct\ExecutePaymentAction;
use Sylius\Component\Core\Model\PaymentInterface;

class CaptureAction extends DirectApiAwareAction implements ActionInterface, ApiAwareInterface, GatewayAwareInterface, GenericTokenFactoryAwareInterface
class CaptureAction extends DirectApiAwareAction implements GenericTokenFactoryAwareInterface
{
use GatewayAwareTrait;
use GenericTokenFactoryAwareTrait;

/**
* {@inheritDoc}
*
* @param Capture $request
*/
public function execute($request)
Expand All @@ -42,44 +28,41 @@ public function execute($request)

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

$getHttpRequest = new GetHttpRequest();
$this->gateway->execute($getHttpRequest);

if ('POST' === $getHttpRequest->method) {
if (isset($getHttpRequest->request['get_merchant_session']) && (
"true" === $getHttpRequest->request['get_merchant_session']
'true' === $getHttpRequest->request['get_merchant_session']
|| true === $getHttpRequest->request['get_merchant_session']
)) {
throw new HttpResponse($this->api->getMerchantSessionKey());
}

$model['card-identifier'] = $getHttpRequest->request['card-identifier'];
$model['merchant-session-key'] = $getHttpRequest->request['merchant-session-key'];

return;
}

$template = $this->api->getOption('payum.sagepay.template.layout');
$this->gateway->execute($renderTemplate = new RenderTemplate($template, array(
$this->gateway->execute($renderTemplate = new RenderTemplate($template, [
'model' => $model,
'payment' => $payment,
'sagepayJs' => $this->api->getApiEndpoint() . 'js/sagepay.js',
'sagepayJs' => $this->api->getApiEndpoint().'js/sagepay.js',
'merchantSessionRoute' => $this->api->getOption('payum.sagepay.merchant_session_route_name'),
'token' => $request->getToken(),
'actionUrl' => $request->getToken() ? $request->getToken()->getTargetUrl() : null,
)));
'actionUrl' => $request->getToken() ? $request->getToken()
->getTargetUrl() : null,
]));

throw new HttpResponse($renderTemplate->getResult());
}

/**
* {@inheritDoc}
*/
public function supports($request)
{
return
$request instanceof Capture &&
return $request instanceof Capture &&
$request->getModel() instanceof \ArrayAccess &&
$request->getFirstModel() instanceof PaymentInterface
;
Expand Down
32 changes: 5 additions & 27 deletions src/Action/Integrations/Direct/ConvertPaymentAction.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,38 +4,20 @@

namespace Sbarbat\SyliusSagepayPlugin\Action\Integrations\Direct;

use Payum\Core\Action\ActionInterface;
use Payum\Core\ApiAwareInterface;
use Payum\Core\ApiAwareTrait;
use Payum\Core\Bridge\Spl\ArrayObject;
use Payum\Core\Exception\RequestNotSupportedException;
use Payum\Core\GatewayAwareInterface;
use Payum\Core\GatewayAwareTrait;
use Payum\Core\Request\Convert;
use Payum\Core\Request\Capture;
use Payum\Core\Request\GetHttpRequest;
use Payum\Core\Reply\HttpPostRedirect;
use Payum\Core\Reply\HttpRedirect;
use Payum\Core\Security\GenericTokenFactoryAwareInterface;
use Payum\Core\Security\GenericTokenFactoryAwareTrait;
use Sbarbat\SyliusSagepayPlugin\Action\Api\DirectApiAwareAction;
use Sylius\Component\Core\Model\OrderInterface;
use Sylius\Component\Core\Model\PaymentInterface;

use Sbarbat\SyliusSagepayPlugin\SagepayDirectApi;
use Sbarbat\SyliusSagepayPlugin\Action\Api\DirectApiAwareAction;

class ConvertPaymentAction extends DirectApiAwareAction implements ActionInterface, ApiAwareInterface, GatewayAwareInterface, GenericTokenFactoryAwareInterface
class ConvertPaymentAction extends DirectApiAwareAction implements GenericTokenFactoryAwareInterface
{
use GatewayAwareTrait;
use GenericTokenFactoryAwareTrait;

public function __construct()
{
$this->apiClass = SagepayDirectApi::class;
}
/**
* {@inheritDoc}
*
* @param Convert $request
*/
public function execute($request)
Expand All @@ -57,19 +39,15 @@ public function execute($request)
$details['customerLocale'] = $order->getLocaleCode();
$details['countryCode'] = null !== $order->getShippingAddress() ? $order->getShippingAddress()->getCountryCode() : null;
$details['currencyCode'] = $payment->getCurrencyCode();

$request->setResult((array) $details);
}

/**
* {@inheritDoc}
*/
public function supports($request)
{
return
$request instanceof Convert &&
return $request instanceof Convert &&
$request->getSource() instanceof PaymentInterface &&
$request->getTo() == 'array'
'array' === $request->getTo()
;
}
}
Loading

0 comments on commit 9d116dd

Please sign in to comment.