2 Commits

Author SHA1 Message Date
12f9d4fa18 Update src/mollie/callback.php 2025-06-21 16:30:35 +02:00
60b8d2b62c Update src/mollie/mollie.php 2025-06-21 16:26:28 +02:00
23 changed files with 95 additions and 458 deletions

View File

@@ -1,6 +1,6 @@
{ {
"require": { "require": {
"mollie/mollie-api-php": "^3.7" "mollie/mollie-api-php": "^2.0"
}, },
"config": { "config": {
"vendor-dir": "src/mollie/vendor" "vendor-dir": "src/mollie/vendor"

View File

@@ -1,97 +1,92 @@
<?php <?php
/** use Illuminate\Database\Capsule\Manager as Capsule;
* use Mollie\Api\MollieApiClient;
* Setting requirements and includes
*
*/
require_once __DIR__ . '/../../../init.php'; require_once __DIR__ . '/../../../init.php';
require_once __DIR__ . '/vendor/autoload.php'; require_once __DIR__ . '/vendor/autoload.php';
$whmcs->load_function('gateway'); $whmcs->load_function('gateway');
$whmcs->load_function('invoice'); $whmcs->load_function('invoice');
/** if ($_SERVER['REQUEST_METHOD'] !== 'POST' || empty($_POST['id'])) {
* logTransaction('mollieunknown', $_POST, 'Callback - Failure 0 (Arg mismatch)');
* Check parameters http_response_code(500);
* exit('Arg mismatch');
*/ }
if (isset($_POST['id'])) {
// Get transaction // Find transaction by Mollie payment ID
$transactionQuery = select_query('gateway_mollie', '', array('paymentid' => $_POST['id']), null, null, 1); $transaction = Capsule::table('gateway_mollie')
->where('paymentid', $_POST['id'])
->first();
if (mysql_num_rows($transactionQuery) != 1) { if (!$transaction) {
logTransaction('mollieunknown', $_POST, 'Callback - Failure 2 (Transaction not found)'); logTransaction('mollieunknown', $_POST, 'Callback - Failure 2 (Transaction not found)');
http_response_code(500);
exit('Transaction not found');
}
header('HTTP/1.1 500 Transaction not found'); $transaction = (array) $transaction;
exit(); $method = $transaction['method'] ?: 'checkout';
}
$transaction = mysql_fetch_assoc($transactionQuery); // Load gateway configuration
$_GATEWAY = getGatewayVariables('mollie' . $method . '_devapp');
$method = $transaction['method']; if ($transaction['status'] !== 'open') {
if (empty($method)) {
$method = 'checkout';
}
$_GATEWAY = getGatewayVariables('mollie' . $method . '_devapp');
if ($transaction['status'] != 'open') {
logTransaction($_GATEWAY['paymentmethod'], array_merge($transaction, $_POST), 'Callback - Failure 3 (Transaction not open)'); logTransaction($_GATEWAY['paymentmethod'], array_merge($transaction, $_POST), 'Callback - Failure 3 (Transaction not open)');
http_response_code(500);
exit('Transaction not open');
}
header('HTTP/1.1 500 Transaction not open'); // Load currencies
exit(); $userCurrency = getCurrency($transaction['userid']);
} $transactionCurrency = Capsule::table('tblcurrencies')
->where('id', $transaction['currencyid'])
->first();
// Get user and transaction currencies $transactionCurrency = (array) $transactionCurrency;
$userCurrency = getCurrency($transaction['userid']);
$transactionCurrency = select_query('tblcurrencies', '', array('id' => $transaction['currencyid']));
$transactionCurrency = mysql_fetch_assoc($transactionCurrency);
// Check payment // Init Mollie
$mollie = new \Mollie\Api\MollieApiClient(); $mollie = new MollieApiClient();
$mollie->setApiKey($_GATEWAY['key']); $mollie->setApiKey($_GATEWAY['key']);
try {
$payment = $mollie->payments->get($_POST['id']); $payment = $mollie->payments->get($_POST['id']);
} catch (Exception $e) {
logTransaction($_GATEWAY['paymentmethod'], $_POST, 'Callback - Failure 4 (API Error): ' . $e->getMessage());
http_response_code(500);
exit('Mollie API error');
}
if ($payment->isPaid()) { // Handle payment status
if ($payment->isPaid()) {
// Add conversion, when there is need to. WHMCS only supports currencies per user. WHY?! // Currency conversion if needed
if ($transactionCurrency['id'] != $userCurrency['id']) { if ($transactionCurrency['id'] != $userCurrency['id']) {
$transaction['amount'] = convertCurrency($transaction['amount'], $transaction['currencyid'], $userCurrency['id']); $transaction['amount'] = convertCurrency($transaction['amount'], $transaction['currencyid'], $userCurrency['id']);
} }
// Check invoice
$invoiceid = checkCbInvoiceID($transaction['invoiceid'], $_GATEWAY['paymentmethod']); $invoiceid = checkCbInvoiceID($transaction['invoiceid'], $_GATEWAY['paymentmethod']);
checkCbTransID($transaction['paymentid']); checkCbTransID($transaction['paymentid']);
// Add invoice
addInvoicePayment($invoiceid, $transaction['paymentid'], $transaction['amount'], '', $_GATEWAY['paymentmethod']); addInvoicePayment($invoiceid, $transaction['paymentid'], $transaction['amount'], '', $_GATEWAY['paymentmethod']);
update_query('gateway_mollie', array('status' => 'paid', 'updated' => date('Y-m-d H:i:s', time())), array('id' => $transaction['id'])); Capsule::table('gateway_mollie')
->where('id', $transaction['id'])
->update(['status' => 'paid', 'updated' => date('Y-m-d H:i:s')]);
logTransaction($_GATEWAY['paymentmethod'], array_merge($transaction, $_POST), 'Callback - Successful (Paid)'); logTransaction($_GATEWAY['paymentmethod'], array_merge($transaction, $_POST), 'Callback - Successful (Paid)');
http_response_code(200);
exit('OK');
header('HTTP/1.1 200 OK'); } elseif (!$payment->isOpen()) {
exit(); Capsule::table('gateway_mollie')
} else if ($payment->isOpen() == FALSE) { ->where('id', $transaction['id'])
update_query('gateway_mollie', array('status' => 'closed', 'updated' => date('Y-m-d H:i:s', time())), array('id' => $transaction['id'])); ->update(['status' => 'closed', 'updated' => date('Y-m-d H:i:s')]);
logTransaction($_GATEWAY['paymentmethod'], array_merge($transaction, $_POST), 'Callback - Successful (Closed)'); logTransaction($_GATEWAY['paymentmethod'], array_merge($transaction, $_POST), 'Callback - Successful (Closed)');
http_response_code(200);
exit('Closed');
header('HTTP/1.1 200 OK');
exit();
} else {
logTransaction($_GATEWAY['paymentmethod'], array_merge($transaction, $_POST), 'Callback - Failure 1 (Payment not open or paid)');
header('HTTP/1.1 500 Payment not open or paid');
exit();
}
} else { } else {
logTransaction('mollieunknown', $_POST, 'Callback - Failure 0 (Arg mismatch)'); logTransaction($_GATEWAY['paymentmethod'], array_merge($transaction, $_POST), 'Callback - Failure 1 (Payment not open or paid)');
http_response_code(500);
header('HTTP/1.1 500 Arg mismatch'); exit('Payment not open or paid');
exit();
} }

View File

@@ -41,13 +41,7 @@ function mollie_link($params, $method = Mollie_API_Object_Method::IDEAL)
$tableCheckQuery = full_query('SHOW TABLES LIKE \'gateway_mollie\''); $tableCheckQuery = full_query('SHOW TABLES LIKE \'gateway_mollie\'');
if (mysql_num_rows($tableCheckQuery) != 1) { if (mysql_num_rows($tableCheckQuery) != 1) {
full_query('CREATE TABLE IF NOT EXISTS `gateway_mollie` (`id` int(11) NOT NULL AUTO_INCREMENT, `paymentid` varchar(64), `amount` double NOT NULL, `currencyid` int(11) NOT NULL, `ip` varchar(50) NOT NULL, `userid` int(11) NOT NULL, `invoiceid` int(11) NOT NULL, `status` ENUM(\'open\',\'paid\',\'closed\') NOT NULL DEFAULT \'open\', `method` VARCHAR(25) NOT NULL, `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, `updated` timestamp NULL DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `paymentid` (`paymentid`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;'); full_query('CREATE TABLE IF NOT EXISTS `gateway_mollie` (`id` int(11) NOT NULL AUTO_INCREMENT, `paymentid` varchar(40), `amount` double NOT NULL, `currencyid` int(11) NOT NULL, `ip` varchar(50) NOT NULL, `userid` int(11) NOT NULL, `invoiceid` int(11) NOT NULL, `status` ENUM(\'open\',\'paid\',\'closed\') NOT NULL DEFAULT \'open\', `method` VARCHAR(25) NOT NULL, `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, `updated` timestamp NULL DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `paymentid` (`paymentid`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;');
}
$paymentIdQuery = full_query("SHOW COLUMNS FROM `gateway_mollie` WHERE `Field` = 'paymentid' AND `Type` LIKE '%64%'");
if (mysql_num_rows($paymentIdQuery) == 0) {
full_query("ALTER TABLE `gateway_mollie` CHANGE `paymentid` `paymentid` VARCHAR(64);");
} }
$mollie = new \Mollie\Api\MollieApiClient(); $mollie = new \Mollie\Api\MollieApiClient();

View File

@@ -1,22 +0,0 @@
<?php
require_once __DIR__ . '/mollie/mollie.php';
function molliebancomatpay_devapp_config()
{
$config = mollie_config();
$config = array_merge($config, array(
'FriendlyName' => array(
'Type' => 'System',
'Value' => 'Mollie BANCOMAT Pay'
)
));
return $config;
}
function molliebancomatpay_devapp_link($params)
{
return mollie_link($params, \Mollie\Api\Types\PaymentMethod::BANCOMATPAY);
}

View File

@@ -9,7 +9,7 @@ function molliebelfius_devapp_config()
$config = array_merge($config, array( $config = array_merge($config, array(
'FriendlyName' => array( 'FriendlyName' => array(
'Type' => 'System', 'Type' => 'System',
'Value' => 'Mollie Belfius Pay Button' 'Value' => 'Mollie Belfius'
) )
)); ));

View File

@@ -1,22 +0,0 @@
<?php
require_once __DIR__ . '/mollie/mollie.php';
function molliebillie_devapp_config()
{
$config = mollie_config();
$config = array_merge($config, array(
'FriendlyName' => array(
'Type' => 'System',
'Value' => 'Mollie Billie'
)
));
return $config;
}
function molliebillie_devapp_link($params)
{
return mollie_link($params, \Mollie\Api\Types\PaymentMethod::BILLIE);
}

View File

@@ -1,22 +0,0 @@
<?php
require_once __DIR__ . '/mollie/mollie.php';
function mollieblik_devapp_config()
{
$config = mollie_config();
$config = array_merge($config, array(
'FriendlyName' => array(
'Type' => 'System',
'Value' => 'Mollie BLIK'
)
));
return $config;
}
function mollieblik_devapp_link($params)
{
return mollie_link($params, \Mollie\Api\Types\PaymentMethod::BLIK);
}

View File

@@ -2,21 +2,21 @@
require_once __DIR__ . '/mollie/mollie.php'; require_once __DIR__ . '/mollie/mollie.php';
function molliealma_devapp_config() function molliegiropay_devapp_config()
{ {
$config = mollie_config(); $config = mollie_config();
$config = array_merge($config, array( $config = array_merge($config, array(
'FriendlyName' => array( 'FriendlyName' => array(
'Type' => 'System', 'Type' => 'System',
'Value' => 'Mollie Alma' 'Value' => 'Mollie Giropay'
) )
)); ));
return $config; return $config;
} }
function molliealma_devapp_link($params) function molliegiropay_devapp_link($params)
{ {
return mollie_link($params, \Mollie\Api\Types\PaymentMethod::ALMA); return mollie_link($params, \Mollie\Api\Types\PaymentMethod::GIROPAY);
} }

View File

@@ -9,7 +9,7 @@ function mollieideal_devapp_config()
$config = array_merge($config, array( $config = array_merge($config, array(
'FriendlyName' => array( 'FriendlyName' => array(
'Type' => 'System', 'Type' => 'System',
'Value' => 'Mollie iDEAL' 'Value' => 'Mollie iDeal'
) )
)); ));

View File

@@ -1,22 +0,0 @@
<?php
require_once __DIR__ . '/mollie/mollie.php';
function molliein3_devapp_config()
{
$config = mollie_config();
$config = array_merge($config, array(
'FriendlyName' => array(
'Type' => 'System',
'Value' => 'Mollie iDEAL in3'
)
));
return $config;
}
function molliein3_devapp_link($params)
{
return mollie_link($params, \Mollie\Api\Types\PaymentMethod::IN3);
}

View File

@@ -1,22 +0,0 @@
<?php
require_once __DIR__ . '/mollie/mollie.php';
function mollieklarna_devapp_config()
{
$config = mollie_config();
$config = array_merge($config, array(
'FriendlyName' => array(
'Type' => 'System',
'Value' => 'Mollie Klarna'
)
));
return $config;
}
function mollieklarna_devapp_link($params)
{
return mollie_link($params, \Mollie\Api\Types\PaymentMethod::KLARNA);
}

View File

@@ -1,22 +0,0 @@
<?php
require_once __DIR__ . '/mollie/mollie.php';
function mollieklarnapaylater_devapp_config()
{
$config = mollie_config();
$config = array_merge($config, array(
'FriendlyName' => array(
'Type' => 'System',
'Value' => 'Mollie Klarna Pay Later'
)
));
return $config;
}
function mollieklarnapaylater_devapp_link($params)
{
return mollie_link($params, \Mollie\Api\Types\PaymentMethod::KLARNA_PAY_LATER);
}

View File

@@ -1,22 +0,0 @@
<?php
require_once __DIR__ . '/mollie/mollie.php';
function mollieklarnapaynow_devapp_config()
{
$config = mollie_config();
$config = array_merge($config, array(
'FriendlyName' => array(
'Type' => 'System',
'Value' => 'Mollie Klarna Pay Now'
)
));
return $config;
}
function mollieklarnapaynow_devapp_link($params)
{
return mollie_link($params, \Mollie\Api\Types\PaymentMethod::KLARNA_PAY_NOW);
}

View File

@@ -1,22 +0,0 @@
<?php
require_once __DIR__ . '/mollie/mollie.php';
function mollieklarnasliceit_devapp_config()
{
$config = mollie_config();
$config = array_merge($config, array(
'FriendlyName' => array(
'Type' => 'System',
'Value' => 'Mollie Klarna Slice It'
)
));
return $config;
}
function mollieklarnasliceit_devapp_link($params)
{
return mollie_link($params, \Mollie\Api\Types\PaymentMethod::KLARNA_SLICE_IT);
}

View File

@@ -1,22 +0,0 @@
<?php
require_once __DIR__ . '/mollie/mollie.php';
function molliembway_devapp_config()
{
$config = mollie_config();
$config = array_merge($config, array(
'FriendlyName' => array(
'Type' => 'System',
'Value' => 'Mollie MB Way'
)
));
return $config;
}
function molliembway_devapp_link($params)
{
return mollie_link($params, \Mollie\Api\Types\PaymentMethod::MBWAY);
}

View File

@@ -1,22 +0,0 @@
<?php
require_once __DIR__ . '/mollie/mollie.php';
function molliemultibanco_devapp_config()
{
$config = mollie_config();
$config = array_merge($config, array(
'FriendlyName' => array(
'Type' => 'System',
'Value' => 'Mollie Multibanco'
)
));
return $config;
}
function molliemultibanco_devapp_link($params)
{
return mollie_link($params, \Mollie\Api\Types\PaymentMethod::MULTIBANCO);
}

View File

@@ -1,22 +0,0 @@
<?php
require_once __DIR__ . '/mollie/mollie.php';
function molliepaybybank_devapp_config()
{
$config = mollie_config();
$config = array_merge($config, array(
'FriendlyName' => array(
'Type' => 'System',
'Value' => 'Mollie Pay By Bank'
)
));
return $config;
}
function molliepaybybank_devapp_link($params)
{
return mollie_link($params, \Mollie\Api\Types\PaymentMethod::PAYBYBANK);
}

View File

@@ -1,22 +0,0 @@
<?php
require_once __DIR__ . '/mollie/mollie.php';
function mollieriverty_devapp_config()
{
$config = mollie_config();
$config = array_merge($config, array(
'FriendlyName' => array(
'Type' => 'System',
'Value' => 'Mollie Riverty'
)
));
return $config;
}
function mollieriverty_devapp_link($params)
{
return mollie_link($params, \Mollie\Api\Types\PaymentMethod::RIVERTY);
}

View File

@@ -1,22 +0,0 @@
<?php
require_once __DIR__ . '/mollie/mollie.php';
function molliesatispay_devapp_config()
{
$config = mollie_config();
$config = array_merge($config, array(
'FriendlyName' => array(
'Type' => 'System',
'Value' => 'Mollie Satispay'
)
));
return $config;
}
function molliesatispay_devapp_link($params)
{
return mollie_link($params, \Mollie\Api\Types\PaymentMethod::SATISPAY);
}

View File

@@ -2,21 +2,21 @@
require_once __DIR__ . '/mollie/mollie.php'; require_once __DIR__ . '/mollie/mollie.php';
function molliebacs_devapp_config() function molliesofort_devapp_config()
{ {
$config = mollie_config(); $config = mollie_config();
$config = array_merge($config, array( $config = array_merge($config, array(
'FriendlyName' => array( 'FriendlyName' => array(
'Type' => 'System', 'Type' => 'System',
'Value' => 'Mollie Bacs' 'Value' => 'Mollie Sofort Banking'
) )
)); ));
return $config; return $config;
} }
function molliebacs_devapp_link($params) function molliesofort_devapp_link($params)
{ {
return mollie_link($params, \Mollie\Api\Types\PaymentMethod::BACS); return mollie_link($params, \Mollie\Api\Types\PaymentMethod::SOFORT);
} }

View File

@@ -1,22 +0,0 @@
<?php
require_once __DIR__ . '/mollie/mollie.php';
function mollieswish_devapp_config()
{
$config = mollie_config();
$config = array_merge($config, array(
'FriendlyName' => array(
'Type' => 'System',
'Value' => 'Mollie Swish'
)
));
return $config;
}
function mollieswish_devapp_link($params)
{
return mollie_link($params, \Mollie\Api\Types\PaymentMethod::SWISH);
}

View File

@@ -1,22 +0,0 @@
<?php
require_once __DIR__ . '/mollie/mollie.php';
function mollietrustly_devapp_config()
{
$config = mollie_config();
$config = array_merge($config, array(
'FriendlyName' => array(
'Type' => 'System',
'Value' => 'Mollie Trustly'
)
));
return $config;
}
function mollietrustly_devapp_link($params)
{
return mollie_link($params, \Mollie\Api\Types\PaymentMethod::TRUSTLY);
}

View File

@@ -1,22 +0,0 @@
<?php
require_once __DIR__ . '/mollie/mollie.php';
function mollietwint_devapp_config()
{
$config = mollie_config();
$config = array_merge($config, array(
'FriendlyName' => array(
'Type' => 'System',
'Value' => 'Mollie TWINT'
)
));
return $config;
}
function mollietwint_devapp_link($params)
{
return mollie_link($params, \Mollie\Api\Types\PaymentMethod::TWINT);
}