Skip to content
This repository was archived by the owner on Sep 13, 2023. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 9 additions & 6 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -1,19 +1,22 @@
language: php

php:
- 5.4
- 5.5
- 5.6
- 7.0
- 7.1
- 7.2

env:
- SYMFONY_VERSION=2.6.*
- SYMFONY_VERSION=2.7.*
- SYMFONY_VERSION=2.8.*
- SYMFONY_VERSION=3.0.*
- SYMFONY_VERSION=3.1.*
- SYMFONY_VERSION=3.2.*
- SYMFONY_VERSION=3.3.*
- SYMFONY_VERSION=3.4.*

before_script:
- composer self-update
- if [ "$SYMFONY_VERSION" != "" ]; then composer require "symfony/validator:${SYMFONY_VERSION}" --no-update; fi;
- composer install --dev --no-interaction

script:
- phpunit -c .
- bin/phpunit
1 change: 1 addition & 0 deletions CardinityClientBundle.php
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
<?php

namespace Cardinity\ClientBundle;

use Symfony\Component\HttpKernel\Bundle\Bundle;
Expand Down
27 changes: 21 additions & 6 deletions Controller/PaymentController.php
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
<?php

namespace Cardinity\ClientBundle\Controller;

use Cardinity\Client;
Expand All @@ -13,6 +14,7 @@
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Symfony\Component\Routing\RouterInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;

class PaymentController
{
Expand All @@ -31,25 +33,32 @@ class PaymentController
/** @var Client */
private $payment;

/** @var ContainerInterface */
private $container;

/**
* @param EngineInterface $templating
* @param RouterInterface $router
* @param FormFactoryInterface $formFactory
* @param SessionInterface $session
* @param Client $payment
* @param ContainerInterface $container
*/
public function __construct(
EngineInterface $templating,
RouterInterface $router,
FormFactoryInterface $formFactory,
SessionInterface $session,
Client $payment
) {
Client $payment,
ContainerInterface $container
)
{
$this->templating = $templating;
$this->router = $router;
$this->formFactory = $formFactory;
$this->session = $session;
$this->payment = $payment;
$this->container = $container;
}

/**
Expand Down Expand Up @@ -90,6 +99,7 @@ public function processAction(Request $request)
$params['payment_instrument'] = $form->getData();

$method = new Payment\Create($params);

try {
/** @var Cardinity\Method\Payment\Payment */
$payment = $this->payment->call($method);
Expand All @@ -102,10 +112,12 @@ public function processAction(Request $request)
} elseif ($payment->isApproved()) {
return $this->successResponse($payment);
}
} catch (Exception\ValidationFailed $e) {
return $this->errorResponse('Payment validation failed: ' . print_r($e->getErrors(), true));
} catch (Exception\Declined $e) {
return $this->errorResponse('Payment declined: ' . print_r($e->getErrors(), true));
} catch (Exception\Runtime $e) {
return $this->errorResponse('Unexpected error occurred: ' . print_r($e, true));
return $this->errorResponse('Unexpected error occurred: ' . print_r($e->getMessage(), true));
};
}

Expand Down Expand Up @@ -157,15 +169,18 @@ public function processAuthorizationAction(Request $request)
$payment->getId(),
$pares
);

/** @var Cardinity\Method\Payment\Payment */
$payment = $this->payment->call($method);
}

if ($payment->isApproved()) {
return new RedirectResponse($this->router->generate('cardinity_client.payment_success'));
}
} catch (Exception\Declined $e) {
return $this->errorResponse('Payment declined: ' . print_r($e->getErrors(), true));
} catch (Exception\Runtime $e) {
return $this->errorResponse('Unexpected error occurred. ' . $e->getMessage() . ': ' . print_r($e->getErrors(), true));
return $this->errorResponse('Unexpected error occurred. ' . $e->getMessage());
};

return $this->errorResponse('Unexpected response while finalizing payment');
Expand Down Expand Up @@ -198,7 +213,7 @@ private function renderForm(Form $form)

private function createForm()
{
return $this->formFactory->create(new CreditCardType(), null, [
return $this->formFactory->create(CreditCardType::class, null, [
'action' => $this->router->generate('cardinity_client.payment_process'),
]);
}
Expand Down
2 changes: 1 addition & 1 deletion DependencyInjection/CardinityClientExtension.php
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ public function load(array $configs, ContainerBuilder $container)
$container->setParameter('cardinity_client.consumer_key', $config['consumer_key']);
$container->setParameter('cardinity_client.consumer_secret', $config['consumer_secret']);

$loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
$loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__ . '/../Resources/config'));
$loader->load('services.yml');
}
}
12 changes: 7 additions & 5 deletions Form/CreditCardType.php
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
<?php

namespace Cardinity\ClientBundle\Form;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Validator\Constraints\Luhn;

class CreditCardType extends AbstractType
Expand All @@ -14,15 +17,14 @@ public function buildForm(FormBuilderInterface $builder, array $options)
->add('pan', null, [
'constraints' => new Luhn(),
])
->add('exp_year', 'choice', [
->add('exp_year', ChoiceType::class, [
'choices' => $this->years()
])
->add('exp_month', 'choice', [
->add('exp_month', ChoiceType::class, [
'choices' => $this->months()
])
->add('cvc')
->add('save', 'submit')
;
->add('save', SubmitType::class);
}

public function getName()
Expand All @@ -33,7 +35,7 @@ public function getName()
private function years()
{
$return = [];
for ($i = date('Y'); $i <= date('Y')+7; $i++) {
for ($i = date('Y'); $i <= date('Y') + 7; $i++) {
$return[$i] = $i;
}
return $return;
Expand Down
9 changes: 4 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

[![Build Status](https://travis-ci.org/cardinity/client-bundle.svg?branch=master)](https://travis-ci.org/cardinity/client-bundle)
[![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/cardinity/client-bundle/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/cardinity/client-bundle/?branch=master)
[![SensioLabsInsight](https://insight.sensiolabs.com/projects/2706efcc-de8b-4848-89cc-c1c38f92536d/mini.png)](https://insight.sensiolabs.com/projects/2706efcc-de8b-4848-89cc-c1c38f92536d)


## Installation
Expand Down Expand Up @@ -94,9 +93,9 @@ Cardinity\Settlement\GetAll($paymentId)

#### Void
```php
Cardinity\Void\Create($paymentId, $description = null)
Cardinity\Void\Get($paymentId, $voidId)
Cardinity\Void\GetAll($paymentId)
Cardinity\VoidPayment\Create($paymentId, $description = null)
Cardinity\VoidPayment\Get($paymentId, $voidId)
Cardinity\VoidPayment\GetAll($paymentId)
```

#### Refund
Expand Down Expand Up @@ -124,7 +123,7 @@ try {
'payment_method' => Cardinity\Payment\Create::CARD,
'payment_instrument' => [
'pan' => '4111111111111111',
'exp_year' => 2018,
'exp_year' => 2021,
'exp_month' => 12,
'cvc' => '456',
'holder' => 'Mike Dough'
Expand Down
78 changes: 39 additions & 39 deletions Resources/config/services.yml
Original file line number Diff line number Diff line change
@@ -1,73 +1,73 @@
parameters:
cardinity_client.controller.payment.class: Cardinity\ClientBundle\Controller\PaymentController
cardinity_client.service.oauth_subscriber.class: GuzzleHttp\Subscriber\Oauth\Oauth1
cardinity_client.service.log_subscriber.class: GuzzleHttp\Subscriber\Log
cardinity_client.service.emitter.class: GuzzleHttp\Event\Emitter
cardinity_client.service.stack.class: GuzzleHttp\HandlerStack
cardinity_client.service.http_client.class: GuzzleHttp\Client
cardinity_client.service.result_object_mapper.class: Cardinity\Method\ResultObjectMapper
cardinity_client.service.exception_mapper.class: Cardinity\Http\Guzzle\ExceptionMapper
cardinity_client.service.client_adapter.class: Cardinity\Http\Guzzle\ClientAdapter
cardinity_client.service.client.class: Cardinity\Client
cardinity_client.service.validator.class: Cardinity\Method\Validator
cardinity_client.parameters.url: 'https://api.cardinity.com/v1/'
cardinity_client.parameters.defaults:
auth: 'oauth'
cardinity_client.parameters.auth: 'oauth'
cardinity_client.parameters.verify: false

services:
cardinity_client.controller.payment:
class: %cardinity_client.controller.payment.class%
class: '%cardinity_client.controller.payment.class%'
arguments:
- '@templating'
- '@router'
- '@form.factory'
- '@session'
- '@cardinity_client.service.client'
- '@service_container'

cardinity_client.service.oauth_subscriber:
class: %cardinity_client.service.oauth_subscriber.class%
arguments:
config:
consumer_key: '%cardinity_client.consumer_key%'
consumer_secret: '%cardinity_client.consumer_secret%'

cardinity_client.service.log_subscriber:
class: %cardinity_client.service.log_subscriber.class%
class: '%cardinity_client.service.oauth_subscriber.class%'
arguments:
$config:
token_secret: ''
consumer_key: '%cardinity_client.consumer_key%'
consumer_secret: '%cardinity_client.consumer_secret%'

cardinity_client.service.emitter:
class: %cardinity_client.service.emitter.class%
calls:
- [attach, ['@cardinity_client.service.oauth_subscriber']]
cardinity_client.service.stack:
class: '%cardinity_client.service.stack.class%'
factory: ['%cardinity_client.service.stack.class%', create]
calls:
- [push, ['@cardinity_client.service.oauth_subscriber']]

cardinity_client.service.http_client:
class: %cardinity_client.service.http_client.class%
arguments:
config:
base_url: %cardinity_client.parameters.url%
defaults: %cardinity_client.parameters.defaults%
emitter: '@cardinity_client.service.emitter'
class: '%cardinity_client.service.http_client.class%'
arguments:
$config:
base_uri: '%cardinity_client.parameters.url%'
handler: '@cardinity_client.service.stack'
auth: '%cardinity_client.parameters.auth%'
verify: '%cardinity_client.parameters.verify%'

cardinity_client.service.result_object_mapper:
class: %cardinity_client.service.result_object_mapper.class%
class: '%cardinity_client.service.result_object_mapper.class%'

cardinity_client.service.exception_mapper:
class: %cardinity_client.service.exception_mapper.class%
arguments:
client: '@cardinity_client.service.result_object_mapper'
class: '%cardinity_client.service.exception_mapper.class%'
arguments:
$resultMapper: '@cardinity_client.service.result_object_mapper'

cardinity_client.service.client_adapter:
class: %cardinity_client.service.client_adapter.class%
arguments:
client: '@cardinity_client.service.http_client'
mapper: '@cardinity_client.service.exception_mapper'
class: '%cardinity_client.service.client_adapter.class%'
arguments:
$client: '@cardinity_client.service.http_client'
$mapper: '@cardinity_client.service.exception_mapper'

cardinity_client.service.validator:
class: %cardinity_client.service.validator.class%
arguments:
validator: '@validator'
class: '%cardinity_client.service.validator.class%'
arguments:
$validator: '@validator'

cardinity_client.service.client:
class: %cardinity_client.service.client.class%
arguments:
client: '@cardinity_client.service.client_adapter'
validator: '@cardinity_client.service.validator'
mapper: '@cardinity_client.service.result_object_mapper'
class: '%cardinity_client.service.client.class%'
arguments:
$client: '@cardinity_client.service.client_adapter'
$validator: '@cardinity_client.service.validator'
$mapper: '@cardinity_client.service.result_object_mapper'
34 changes: 17 additions & 17 deletions Resources/views/Payment/begin_authorization.html.twig
Original file line number Diff line number Diff line change
@@ -1,21 +1,21 @@
{% extends 'CardinityClientBundle::layout.html.twig' %}

{% block body %}
<h2>Redirecting to credit card validation page</h2>
<p>
If your browser does not start loading the page,
press the button below.
You will be sent back to this site after you
authorize the transaction.
</p>
<form name="ThreeDForm" method="POST" action="{{ auth.url }}">
<button type=submit>Click Here</button>
<input type="hidden" name="PaReq" value="{{ auth.data }}" />
<input type="hidden" name="TermUrl" value="{{ callbackUrl }}" />
<input type="hidden" name="MD" value="{{ identifier }}" />
</form>
<script type="text/javascript">
// Make the form post as soon as it has been loaded.
document.ThreeDForm.submit();
</script>
<h2>Redirecting to credit card validation page</h2>
<p>
If your browser does not start loading the page,
press the button below.
You will be sent back to this site after you
authorize the transaction.
</p>
<form name="ThreeDForm" method="POST" action="{{ auth.url }}">
<button type=submit>Click Here</button>
<input type="hidden" name="PaReq" value="{{ auth.data }}"/>
<input type="hidden" name="TermUrl" value="{{ callbackUrl }}"/>
<input type="hidden" name="MD" value="{{ identifier }}"/>
</form>
<script type="text/javascript">
// Make the form post as soon as it has been loaded.
document.ThreeDForm.submit();
</script>
{% endblock %}
8 changes: 4 additions & 4 deletions Resources/views/Payment/details.html.twig
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
{% extends 'CardinityClientBundle::layout.html.twig' %}

{% block body %}
<h2>Enter credit card details</h2>
<h2>Enter credit card details</h2>

{{ form_start(form) }}
{{ form_widget(form) }}
{{ form_end(form) }}
{{ form_start(form) }}
{{ form_widget(form) }}
{{ form_end(form) }}
{% endblock %}
4 changes: 2 additions & 2 deletions Resources/views/Payment/error.html.twig
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{% extends 'CardinityClientBundle::layout.html.twig' %}

{% block body %}
<h2>Ooops! Something went wrong.</h2>
<p>{{ message }}</p>
<h2>Ooops! Something went wrong.</h2>
<p>{{ message }}</p>
{% endblock %}
4 changes: 2 additions & 2 deletions Resources/views/Payment/index.html.twig
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{% extends 'CardinityClientBundle::layout.html.twig' %}

{% block body %}
<h2>Press 'continue' to proceed checkout process</h2>
<p><a href="{{ path('cardinity_client.payment_details') }}">Continue</a></p>
<h2>Press 'continue' to proceed checkout process</h2>
<p><a href="{{ path('cardinity_client.payment_details') }}">Continue</a></p>
{% endblock %}
Loading