Initial commit

This commit is contained in:
2020-01-27 08:56:08 +01:00
commit b7525048d6
27129 changed files with 3409855 additions and 0 deletions

View File

@@ -0,0 +1,340 @@
<?php
/*************************************************************************************/
/* */
/* Thelia 2 Paybox payment module */
/* */
/* Copyright (c) CQFDev */
/* email : thelia@cqfdev.fr */
/* web : http://www.cqfdev.fr */
/* */
/*************************************************************************************/
namespace Paybox;
use Propel\Runtime\Connection\ConnectionInterface;
use Thelia\Core\HttpFoundation\Response;
use Thelia\Core\Translation\Translator;
use Thelia\Log\Tlog;
use Thelia\Model\Message;
use Thelia\Model\MessageQuery;
use Thelia\Model\ModuleImageQuery;
use Thelia\Model\Order;
use Thelia\Module\AbstractPaymentModule;
/**
* Paybox payment module
*
* @author Franck Allimant <franck@cqfdev.fr>
*/
class Paybox extends AbstractPaymentModule
{
/** The module domain for internationalisation */
const MODULE_DOMAIN = "paybox";
/** The module domain for internationalisation */
const MODULE_CODE = "Paybox";
/** The confirmation message identifier */
const CONFIRMATION_MESSAGE_NAME = 'paybox_payment_confirmation';
// Liste des variables retournées par paybox
const PARAMETRES_RETOUR = 'montant:M;ref:R;auto:A;trans:T;erreur:E;sign:K';
/** The notification of payment confirmation */
const NOTIFICATION_MESSAGE_NAME = 'paybox_payment_status_notification';
/**
* @inheritdoc
*/
public function postActivation(ConnectionInterface $con = null)
{
// Create payment confirmation message from templates, if not already defined
$email_templates_dir = __DIR__ . DS . 'I18n' . DS . 'email-templates' . DS;
if (null === MessageQuery::create()->findOneByName(self::CONFIRMATION_MESSAGE_NAME)) {
$message = new Message();
$message
->setName(self::CONFIRMATION_MESSAGE_NAME)
->setLocale('en_US')
->setTitle('Paybox payment confirmation')
->setSubject('Payment of order {$order_ref}')
->setHtmlMessage(file_get_contents($email_templates_dir . 'en.html'))
->setTextMessage(file_get_contents($email_templates_dir . 'en.txt'))
->setLocale('fr_FR')
->setTitle('Confirmation de paiement par PayBox')
->setSubject('Confirmation du paiement de votre commande {$order_ref}')
->setHtmlMessage(file_get_contents($email_templates_dir . 'fr.html'))
->setTextMessage(file_get_contents($email_templates_dir . 'fr.txt'))
->save();
}
if (null === MessageQuery::create()->findOneByName(self::NOTIFICATION_MESSAGE_NAME)) {
$message = new Message();
$message
->setName(self::NOTIFICATION_MESSAGE_NAME)
->setLocale('en_US')
->setTitle('Paybox payment status notification')
->setSubject('Paybox payment status for order {$order_ref}: {$paybox_payment_status}')
->setHtmlMessage(file_get_contents($email_templates_dir . 'notification-en.html'))
->setTextMessage(file_get_contents($email_templates_dir . 'notification-en.txt'))
->setLocale('fr_FR')
->setTitle('Notification du résultat d\'un paiement par Paybox')
->setSubject('Résultats du paiement Paybox de la commande {$order_ref} : {$paybox_payment_status}')
->setHtmlMessage(file_get_contents($email_templates_dir . 'notification-fr.html'))
->setTextMessage(file_get_contents($email_templates_dir . 'notification-fr.txt'))
->save();
}
/* Deploy the module's image */
$module = $this->getModuleModel();
if (ModuleImageQuery::create()->filterByModule($module)->count() == 0) {
$this->deployImageFolder($module, sprintf('%s/images', __DIR__), $con);
}
}
/**
* @inheritdoc
*/
public function destroy(ConnectionInterface $con = null, $deleteModuleData = false)
{
// Delete config table and messages if required
if ($deleteModuleData) {
MessageQuery::create()->findOneByName(self::CONFIRMATION_MESSAGE_NAME)->delete($con);
MessageQuery::create()->findOneByName(self::NOTIFICATION_MESSAGE_NAME)->delete($con);
}
}
/**
* Method used by payment gateway.
*
* If this method return a \Thelia\Core\HttpFoundation\Response instance, this response is sent to the
* browser.
*
* In many cases, it's necessary to send a form to the payment gateway.
* On your response you can return this form already completed, ready to be sent
*
* @param Order $order processed order
* @return Response the HTTP response
*/
public function pay(Order $order)
{
return $this->doPay($order, 'SINGLE');
}
/**
* Payment gateway invocation
*
* @param Order $order processed order
* @return Response the HTTP response
*/
protected function doPay(Order $order)
{
if ('TEST' == Paybox::getConfigValue('mode', false)) {
$platformUrl = Paybox::getConfigValue('url_serveur_test', false);
} else {
$platformUrl = Paybox::getConfigValue('url_serveur', false);
}
// Be sure to have a valid platform URL, otherwise give up
if (false === $platformUrl) {
throw new \InvalidArgumentException(
Translator::getInstance()->trans(
"The platform URL is not defined, please check Paybox module configuration.",
[],
Paybox::MODULE_DOMAIN
)
);
}
$hashAlgo = $this->getHashAlgorithm();
$clefPrivee = Paybox::getConfigValue('clef_privee');
// Generate a transaction ID
$transactionId = sprintf("%010d", $order->getId());
$order->setTransactionRef($transactionId)->save();
$paybox_params = [
'PBX_SITE' => Paybox::getConfigValue('numero_site'),
'PBX_RANG' => Paybox::getConfigValue('rang_site'),
'PBX_IDENTIFIANT' => Paybox::getConfigValue('identifiant_interne'),
'PBX_RETOUR' => self::PARAMETRES_RETOUR,
'PBX_HASH' => $hashAlgo,
'PBX_SECRET' => $clefPrivee,
'PBX_ANNULE' => Paybox::getConfigValue('url_retour_abandon'),
'PBX_EFFECTUE' => Paybox::getConfigValue('url_retour_succes'),
'PBX_REFUSE' => Paybox::getConfigValue('url_retour_refus'),