Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add support for Mollie #976

Open
wants to merge 3 commits into
base: develop
Choose a base branch
from
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.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
3 changes: 2 additions & 1 deletion app/Http/Controllers/EventAttendeesController.php
Expand Up @@ -367,7 +367,8 @@ public function postMessageAttendee(Request $request, $attendee_id)
'attendee' => $attendee,
'message_content' => $request->get('message'),
'subject' => $request->get('subject'),
'event' => $attendee->event
'event' => $attendee->event,
'email_logo' => $attendee->event->organiser->full_logo_path,
];

//@todo move this to the SendAttendeeMessage Job
Expand Down
28 changes: 14 additions & 14 deletions app/Http/Controllers/EventCheckoutController.php
Expand Up @@ -291,11 +291,11 @@ public function postValidateOrder(Request $request, $event_id)
}

$request_data = session()->get('ticket_order_' . $event_id . ".request_data");
$request_data = (!empty($request_data[0])) ? array_merge($request_data[0], $request->all())
$request_data = (!empty($request_data)) ? array_merge($request_data, $request->all())
: $request->all();

session()->remove('ticket_order_' . $event_id . '.request_data');
session()->push('ticket_order_' . $event_id . '.request_data', $request_data);
session()->put('ticket_order_' . $event_id . '.request_data', $request_data);

$event = Event::findOrFail($event_id);
$order = new Order();
Expand Down Expand Up @@ -388,10 +388,10 @@ public function showEventPayment(Request $request, $event_id)
public function postCreateOrder(Request $request, $event_id)
{
$request_data = $ticket_order = session()->get('ticket_order_' . $event_id . ".request_data",[0 => []]);
$request_data = array_merge($request_data[0], $request->except(['cardnumber', 'cvc']));
$request_data = array_merge($request_data, $request->except(['cardnumber', 'cvc']));

session()->remove('ticket_order_' . $event_id . '.request_data');
session()->push('ticket_order_' . $event_id . '.request_data', $request_data);
session()->put('ticket_order_' . $event_id . '.request_data', $request_data);

$ticket_order = session()->get('ticket_order_' . $event_id);

Expand Down Expand Up @@ -423,18 +423,18 @@ public function postCreateOrder(Request $request, $event_id)

//generic data that is needed for most orders
$order_total = $order_service->getGrandTotal();
$order_email = $ticket_order['request_data'][0]['order_email'];
$order_email = $ticket_order['request_data']['order_email'];

$response = $gateway->startTransaction($order_total, $order_email, $event);

if ($response->isSuccessful()) {

session()->push('ticket_order_' . $event_id . '.transaction_id',
session()->put('ticket_order_' . $event_id . '.transaction_id',
$response->getTransactionReference());

$additionalData = ($gateway->storeAdditionalData()) ? $gateway->getAdditionalData($response) : array();

session()->push('ticket_order_' . $event_id . '.transaction_data',
session()->put('ticket_order_' . $event_id . '.transaction_data',
$gateway->getTransactionData() + $additionalData);

$gateway->completeTransaction($additionalData);
Expand All @@ -445,7 +445,7 @@ public function postCreateOrder(Request $request, $event_id)

$additionalData = ($gateway->storeAdditionalData()) ? $gateway->getAdditionalData($response) : array();

session()->push('ticket_order_' . $event_id . '.transaction_data',
session()->put('ticket_order_' . $event_id . '.transaction_data',
$gateway->getTransactionData() + $additionalData);

Log::info("Redirect url: " . $response->getRedirectUrl());
Expand Down Expand Up @@ -503,11 +503,11 @@ public function showEventCheckoutPaymentReturn(Request $request, $event_id)
$payment_gateway_factory = new PaymentGatewayFactory();
$gateway = $payment_gateway_factory->create($ticket_order['payment_gateway']->name, $payment_gateway_config);
$gateway->extractRequestParameters($request);
$response = $gateway->completeTransaction($ticket_order['transaction_data'][0]);
$response = $gateway->completeTransaction($ticket_order['transaction_data']);


if ($response->isSuccessful()) {
session()->push('ticket_order_' . $event_id . '.transaction_id', $response->getTransactionReference());
session()->put('ticket_order_' . $event_id . '.transaction_id', $response->getTransactionReference());
return $this->completeOrder($event_id, false);
} else {
session()->flash('message', $response->getMessage());
Expand Down Expand Up @@ -535,7 +535,7 @@ public function completeOrder($event_id, $return_json = true)
$order = new Order();
$ticket_order = session()->get('ticket_order_' . $event_id);

$request_data = $ticket_order['request_data'][0];
$request_data = $ticket_order['request_data'];
$event = Event::findOrFail($ticket_order['event_id']);
$attendee_increment = 1;
$ticket_questions = isset($request_data['ticket_holder_questions']) ? $request_data['ticket_holder_questions'] : [];
Expand All @@ -544,11 +544,11 @@ public function completeOrder($event_id, $return_json = true)
* Create the order
*/
if (isset($ticket_order['transaction_id'])) {
$order->transaction_id = $ticket_order['transaction_id'][0];
$order->transaction_id = $ticket_order['transaction_id'];
}

if (isset($ticket_order['transaction_data'][0]['payment_intent'])) {
$order->payment_intent = $ticket_order['transaction_data'][0]['payment_intent'];
if (isset($ticket_order['transaction_data']['payment_intent'])) {
$order->payment_intent = $ticket_order['transaction_data']['payment_intent'];
}

if ($ticket_order['order_requires_payment'] && !isset($request_data['pay_offline'])) {
Expand Down
3 changes: 2 additions & 1 deletion app/Http/Controllers/EventOrdersController.php
Expand Up @@ -303,7 +303,8 @@ public function postMessageOrder(Request $request, $order_id)
'order' => $order,
'message_content' => $request->get('message'),
'subject' => $request->get('subject'),
'event' => $order->event
'event' => $order->event,
'email_logo' => $order->event->organiser->full_logo_path,
];

Mail::send(Lang::locale().'.Emails.messageReceived', $data, function ($message) use ($order, $data) {
Expand Down
1 change: 1 addition & 0 deletions app/Http/Controllers/EventViewController.php
Expand Up @@ -132,6 +132,7 @@ public function postContactOrganiser(Request $request, $event_id)
'sender_email' => $request->get('email'),
'message_content' => clean($request->get('message')),
'event' => $event,
'email_logo' => $event->organiser->full_logo_path,
];

Mail::send(Lang::locale().'.Emails.messageReceived', $data, function ($message) use ($event, $data) {
Expand Down
9 changes: 7 additions & 2 deletions app/Http/Controllers/ManageAccountController.php
Expand Up @@ -20,11 +20,13 @@
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Str;
use Services\PaymentGateway\Dummy;
use Services\PaymentGateway\Mollie;
use Services\PaymentGateway\Stripe;
use Services\PaymentGateway\StripeSCA;
use Utils;
use Illuminate\Support\Facades\Lang;


class ManageAccountController extends MyBaseController
{
/**
Expand Down Expand Up @@ -59,8 +61,8 @@ public function getVersionInfo()
$latestVersion = Utils::parse_version((string)$response->getBody());
$installedVersion = file_get_contents(base_path('VERSION'));
} catch (\Exception $exception) {
\Log::warn("Error retrieving the latest Attendize version. ManageAccountController.getVersionInf() try/catch");
\Log::warn($exception);
\Log::warning("Error retrieving the latest Attendize version. ManageAccountController.getVersionInf() try/catch");
\Log::warning($exception);
return false;
}

Expand Down Expand Up @@ -128,6 +130,9 @@ public function postEditAccountPayment(Request $request)
case StripeSCA::GATEWAY_NAME :
$config = $request->get('stripe_sca');
break;
case Mollie::GATEWAY_NAME :
$config = $request->get('mollie');
break;
case Dummy::GATEWAY_NAME :
break;

Expand Down
10 changes: 9 additions & 1 deletion app/Services/PaymentGateway/Factory.php
Expand Up @@ -18,7 +18,7 @@ class Factory
/**
* @param $name
* @param $paymentGatewayConfig
* @return Dummy|Stripe|StripeSCA
* @return Dummy|Mollie|Stripe|StripeSCA
* @throws \Exception
*/
public function create($name, $paymentGatewayConfig)
Expand Down Expand Up @@ -51,7 +51,15 @@ public function create($name, $paymentGatewayConfig)
$gateway->initialize($paymentGatewayConfig);

return new StripeSCA($gateway, $paymentGatewayConfig);
}

case Mollie::GATEWAY_NAME :
{

$gateway = Omnipay::create($name);
$gateway->initialize($paymentGatewayConfig);

return new Mollie($gateway, $paymentGatewayConfig);
}

default :
Expand Down
99 changes: 99 additions & 0 deletions app/Services/PaymentGateway/Mollie.php
@@ -0,0 +1,99 @@
<?php

namespace Services\PaymentGateway;

class Mollie
{

CONST GATEWAY_NAME = 'Mollie';

private $transaction_data;

/** @var \Omnipay\Mollie\Gateway */
private $gateway;

public function __construct($gateway)
{
$this->gateway = $gateway;
$this->options = [];
}

private function createTransactionData($order_total, $order_email, $event)
{

$returnUrl = route('showEventCheckoutPaymentReturn', [
'event_id' => $event->id,
'is_payment_successful' => 1,
]);

$this->transaction_data = [
'amount' => $order_total,
'currency' => $event->currency->code,
'description' => 'Order for customer: ' . $order_email,
'receipt_email' => $order_email,
'returnUrl' => $returnUrl,
'confirm' => true
];

return $this->transaction_data;
}

public function startTransaction($order_total, $order_email, $event)
{
$this->createTransactionData($order_total, $order_email, $event);
$transaction = $this->gateway->purchase($this->transaction_data);
$response = $transaction->send();

return $response;
}

public function getTransactionData()
{
return $this->transaction_data;
}

public function extractRequestParameters($request) {}

public function completeTransaction($data) {
$transaction = $this->gateway->completePurchase($data);
$response = $transaction->send();

return $response;
}

/** @param \Omnipay\Mollie\Message\Response\FetchTransactionResponse $response */
public function getAdditionalData($response)
{
$additionalData['transactionReference'] = $response->getTransactionReference();
return $additionalData;
}

public function storeAdditionalData()
{
return true;
}

/**
* @param \App\Models\Order $order
*/
public function refundTransaction($order, $refund_amount, $refund_application_fee)
{
$request = $this->gateway->refund([
'transactionReference' => $order->transaction_id,
'currency' => $order->event->currency->code,
'amount' => $refund_amount,
'refundApplicationFee' => $refund_application_fee
]);

$response = $request->send();

if ($response->isSuccessful()) {
$refundResponse['successful'] = true;
} else {
$refundResponse['successful'] = false;
$refundResponse['error_message'] = $response->getMessage();
}

return $refundResponse;
}
}
5 changes: 3 additions & 2 deletions composer.json
Expand Up @@ -35,6 +35,7 @@
"nitmedia/wkhtml2pdf": "dev-master",
"omnipay/common": "^3.0",
"omnipay/dummy": "^3.0",
"omnipay/mollie": "^5.3",
"omnipay/paypal": "^3.0",
"omnipay/stripe": "^3.1",
"php-http/curl-client": "^1.7",
Expand Down Expand Up @@ -79,7 +80,7 @@
"scripts": {
"post-install-cmd": [
"@php artisan clear-compiled",
"@php -r \"copy('.env.example', '.env');\"",
"@php -r \"file_exists('.env') || copy('.env.example', '.env');\"",
"@php artisan key:generate"
],
"post-update-cmd": [
Expand All @@ -96,7 +97,7 @@
"@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
],
"post-create-project-cmd": [
"@php -r \"copy('.env.example', '.env');\"",
"@php -r \"file_exists('.env') || copy('.env.example', '.env');\"",
"@php artisan key:generate"
]
},
Expand Down