Skip to content

Commit

Permalink
Merge pull request #526 from fatchip-Stefan/SW-454
Browse files Browse the repository at this point in the history
SW-454:  added paypal v2 and paypal v2 express
  • Loading branch information
jvarelmann authored Dec 18, 2024
2 parents 2b22d98 + b5f222e commit 9390e81
Show file tree
Hide file tree
Showing 27 changed files with 1,156 additions and 24 deletions.
8 changes: 8 additions & 0 deletions Frontend/MoptPaymentPayone/Bootstrap.php
Original file line number Diff line number Diff line change
Expand Up @@ -853,6 +853,14 @@ protected function createDatabase()

$this->getInstallHelper()->moptCreateCreditcardPaymentDataTable();

$this->getInstallHelper()->checkAndAddPaypalV2ShowButton();

$this->getInstallHelper()->checkAndAddPaypalV2MerchantId();

$this->getInstallHelper()->checkAndAddPaypalV2ButtonColor();

$this->getInstallHelper()->checkAndAddPaypalV2ButtonShape();

}

/**
Expand Down
11 changes: 9 additions & 2 deletions Frontend/MoptPaymentPayone/Components/Classes/PayoneConfig.php
Original file line number Diff line number Diff line change
Expand Up @@ -63,14 +63,18 @@ class Mopt_PayoneConfig
'mopt_payone__ewallet_wechatpay',
'mopt_payone__fin_payone_secured_invoice',
'mopt_payone__fin_payone_secured_installment',
'mopt_payone__fin_payone_secured_directdebit'
'mopt_payone__fin_payone_secured_directdebit',
'mopt_payone__ewallet_paypalv2',
'mopt_payone__ewallet_paypal_expressv2',
];

const PAYMENTS_ADDRESSCHECK_EXCLUDED = [
'mopt_payone__ewallet_amazon_pay',
'mopt_payone__ewallet_paypal',
'mopt_payone__ewallet_paypal_express',
'mopt_payone__ewallet_applepay'
'mopt_payone__ewallet_applepay',
'mopt_payone__ewallet_paypalv2',
'mopt_payone__ewallet_paypal_expressv2',
];

const PAYMENTS_ADDRESSCHECK_INCLUDED = [
Expand Down Expand Up @@ -122,12 +126,14 @@ class Mopt_PayoneConfig
'mopt_payone__fin_kdd_klarna_direct_debit',
'mopt_payone_klarna',
'mopt_payone__ewallet_paypal_express',
'mopt_payone__ewallet_paypal_expressv2',
'mopt_payone__ewallet_applepay',
];

const PAYMENTS_EXCLUDED_FROM_SHIPPINGPAYMENTPAGE = [
'mopt_payone__ewallet_amazon_pay',
'mopt_payone__ewallet_paypal_express',
'mopt_payone__ewallet_paypal_expressv2',
// 'mopt_payone__ewallet_applepay', applepay is handled seperately
];

Expand All @@ -149,6 +155,7 @@ class Mopt_PayoneConfig
// for these payments basket AND address changes are not allowed
const PAYMENTS_EXPRESS = [
'mopt_payone__ewallet_paypal_express',
'mopt_payone__ewallet_paypal_expressv2',
];

// for these payments basket changes are not allowed after accepting installment conditions
Expand Down
131 changes: 130 additions & 1 deletion Frontend/MoptPaymentPayone/Components/Classes/PayoneInstallHelper.php
Original file line number Diff line number Diff line change
Expand Up @@ -601,6 +601,16 @@ public function mopt_payone__getPaymentMethods()
'description' => 'PAYONE Gesicherte Lastschrift',
'template' => 'mopt_paymentmean_payone_secured_directdebit.tpl',
'position' => 42,],
[
'name' => 'mopt_payone__ewallet_paypalv2',
'description' => 'PAYONE PayPal v2',
'template' => null,
'position' => 43,],
[
'name' => 'mopt_payone__ewallet_paypal_expressv2',
'description' => 'PAYONE PayPal Express v2',
'template' => null,
'position' => 44,],
];
}

Expand Down Expand Up @@ -2243,7 +2253,126 @@ public function checkAndAddPaydirektPreauthorizationValidity()

if ($result->rowCount() === 0) {
$sql = "ALTER TABLE `s_plugin_mopt_payone_config`
ADD COLUMN `$column` TINYINT(2) NOT NULL DEFAULT 0;";
ADD COLUMN `$column` TINYINT(2) NULL DEFAULT 0;";
$db->exec($sql);
}
}
}

/**
* Checks if paypalExressUseDefaultShipping columns are present and creates
* columns if not present.
*
* @return void
* @throws Zend_Db_Adapter_Exception
* @throws Zend_Db_Statement_Exception
*/
public function checkAndAddPaypalV2ShowButton()
{
$textColumns = ['paypal_v2_show_button'];
$db = Shopware()->Db();
$dbConfig = $db->getConfig();

foreach ($textColumns AS $column) {
$sql = "SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='s_plugin_mopt_payone_config'
AND TABLE_SCHEMA = '{$dbConfig['dbname']}'
AND COLUMN_NAME = '$column'";

$result = $db->query($sql);

if ($result->rowCount() === 0) {
$sql = "ALTER TABLE `s_plugin_mopt_payone_config`
ADD COLUMN `$column` TINYINT(1) NOT NULL DEFAULT 0;";
$db->exec($sql);
}
}
}

/**
* Checks if applepay columns are present and creates
* columns if not present.
*
* @return void
* @throws Zend_Db_Adapter_Exception
* @throws Zend_Db_Statement_Exception
*/
public function checkAndAddPaypalV2MerchantId()
{
$textColumns = ['paypal_v2_merchant_id'];
$db = Shopware()->Db();
$dbConfig = $db->getConfig();

foreach ($textColumns AS $column) {
$sql = "SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='s_plugin_mopt_payone_config'
AND TABLE_SCHEMA = '{$dbConfig['dbname']}'
AND COLUMN_NAME = '$column'";

$result = $db->query($sql);

if ($result->rowCount() === 0) {
$sql = "ALTER TABLE `s_plugin_mopt_payone_config`
ADD COLUMN `$column` VARCHAR(255) NULL DEFAULT '';";

$db->exec($sql);
}
}
}

/**
* Checks if applepay columns are present and creates
* columns if not present.
*
* @return void
* @throws Zend_Db_Adapter_Exception
* @throws Zend_Db_Statement_Exception
*/
public function checkAndAddPaypalV2ButtonColor()
{
$textColumns = ['paypal_v2_button_color'];
$db = Shopware()->Db();
$dbConfig = $db->getConfig();

foreach ($textColumns AS $column) {
$sql = "SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='s_plugin_mopt_payone_config'
AND TABLE_SCHEMA = '{$dbConfig['dbname']}'
AND COLUMN_NAME = '$column'";

$result = $db->query($sql);

if ($result->rowCount() === 0) {
$sql = "ALTER TABLE `s_plugin_mopt_payone_config`
ADD COLUMN `$column` VARCHAR(255) NULL DEFAULT '';";

$db->exec($sql);
}
}
}

/**
* Checks if applepay columns are present and creates
* columns if not present.
*
* @return void
* @throws Zend_Db_Adapter_Exception
* @throws Zend_Db_Statement_Exception
*/
public function checkAndAddPaypalV2ButtonShape()
{
$textColumns = ['paypal_v2_button_shape'];
$db = Shopware()->Db();
$dbConfig = $db->getConfig();

foreach ($textColumns AS $column) {
$sql = "SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='s_plugin_mopt_payone_config'
AND TABLE_SCHEMA = '{$dbConfig['dbname']}'
AND COLUMN_NAME = '$column'";

$result = $db->query($sql);

if ($result->rowCount() === 0) {
$sql = "ALTER TABLE `s_plugin_mopt_payone_config`
ADD COLUMN `$column` VARCHAR(255) NULL DEFAULT '';";

$db->exec($sql);
}
}
Expand Down
123 changes: 122 additions & 1 deletion Frontend/MoptPaymentPayone/Components/Classes/PayoneParamBuilder.php
Original file line number Diff line number Diff line change
Expand Up @@ -570,6 +570,36 @@ public function getPaymentPaypal($router, $intialRecurringRequest = false)
return $payment;
}

/**
* returns paypal payment data object
*
* @param type $router
* @param bool $intialRecurringRequest
* @return \Payone_Api_Request_Parameter_Authorization_PaymentMethod_Wallet
*/
public function getPaymentPaypalv2($router, $intialRecurringRequest = false)
{
$params = array();

$params['wallettype'] = 'PAL';

if ($intialRecurringRequest) {
$params['successurl'] = $this->payonePaymentHelper->assembleTokenizedUrl($router,array('action' => 'paypalRecurringSuccess',
'forceSecure' => true, 'appendSession' => false), null);
} else {
$params['successurl'] = $this->payonePaymentHelper->assembleTokenizedUrl($router,array('action' => 'success',
'forceSecure' => true, 'appendSession' => false), null);
}
$params['errorurl'] = $router->assemble(array('action' => 'failure',
'forceSecure' => true, 'appendSession' => false));
$params['backurl'] = $router->assemble(array('action' => 'cancel',
'forceSecure' => true, 'appendSession' => false));

$payment = new Payone_Api_Request_Parameter_Authorization_PaymentMethod_Wallet($params);
return $payment;
}


/**
* create payolution payment object
*
Expand Down Expand Up @@ -1824,6 +1854,28 @@ public function buildPayPalExpressCheckout($paymentId, $router, $amount, $curren
return array_merge($params, $this->buildPayPalEcsShippingAddress($userData));
}

public function buildPayPalv2ExpressCheckout($paymentId, $router, $amount, $currencyName, $userData)
{
$this->payoneConfig = Mopt_PayoneMain::getInstance()->getPayoneConfig($paymentId);
$params = $this->getAuthParameters($paymentId);

$payData = new Payone_Api_Request_Parameter_Paydata_Paydata();
$payData->addItem(new Payone_Api_Request_Parameter_Paydata_DataItem(
array('key' => 'action',
'data' => Payone_Api_Enum_GenericpaymentAction::PAYPAL_ECS_SET_EXPRESSCHECKOUT)
));

$walletParams = $this->buildPayPalEcsWalletParams($router);

$params['clearingtype'] = Payone_Enum_ClearingType::WALLET;
$params['amount'] = $amount;
$params['currency'] = $currencyName;
$params['paydata'] = $payData;
$params['wallet'] = new Payone_Api_Request_Parameter_Authorization_PaymentMethod_Wallet($walletParams);

return array_merge($params, $this->buildPayPalEcsShippingAddress($userData));
}

public function buildPayPalExpressCheckoutDetails($paymentId, $router, $amount, $currencyName, $userData, $workerId)
{
$this->payoneConfig = Mopt_PayoneMain::getInstance()->getPayoneConfig($paymentId);
Expand All @@ -1847,9 +1899,31 @@ public function buildPayPalExpressCheckoutDetails($paymentId, $router, $amount,
return array_merge($params, $this->buildPayPalEcsShippingAddress($userData));
}

protected function buildPayPalEcsWalletParams($router)
public function buildPayPalExpressv2CheckoutDetails($paymentId, $router, $amount, $currencyName, $userData, $workerId)
{
$this->payoneConfig = Mopt_PayoneMain::getInstance()->getPayoneConfig($paymentId);
$params = $this->getAuthParameters($paymentId);

$payData = new Payone_Api_Request_Parameter_Paydata_Paydata();
$payData->addItem(new Payone_Api_Request_Parameter_Paydata_DataItem(
array('key' => 'action',
'data' => Payone_Api_Enum_GenericpaymentAction::PAYPAL_ECS_GET_EXPRESSCHECKOUTDETAILS)
));

$walletParams = $this->buildPayPalv2EcsWalletParams($router);

$params['clearingtype'] = Payone_Enum_ClearingType::WALLET;
$params['workorderid'] = $workerId;
$params['amount'] = $amount;
$params['currency'] = $currencyName;
$params['paydata'] = $payData;
$params['wallet'] = new Payone_Api_Request_Parameter_Authorization_PaymentMethod_Wallet($walletParams);

return array_merge($params, $this->buildPayPalv2EcsShippingAddress($userData));
}

protected function buildPayPalEcsWalletParams($router)
{
$walletParams = array(
'wallettype' => Payone_Api_Enum_WalletType::PAYPAL_EXPRESS,
'successurl' => $this->payonePaymentHelper->assembleTokenizedUrl($router,array('action' => 'paypalexpress',
Expand All @@ -1863,6 +1937,21 @@ protected function buildPayPalEcsWalletParams($router)
return $walletParams;
}

protected function buildPayPalv2EcsWalletParams($router)
{
$walletParams = array(
'wallettype' => Payone_Api_Enum_WalletType::PAYPAL_EXPRESSV2,
'successurl' => $this->payonePaymentHelper->assembleTokenizedUrl($router,array('action' => 'paypalexpressv2',
'forceSecure' => true, 'appendSession' => false), null),
'errorurl' => $router->assemble(array('action' => 'paypalexpressv2Abort',
'forceSecure' => true, 'appendSession' => false)),
'backurl' => $router->assemble(array('action' => 'paypalexpressv2Abort',
'forceSecure' => true, 'appendSession' => false)),
);

return $walletParams;
}

protected function buildPayPalEcsShippingAddress($userData)
{
$params = array();
Expand All @@ -1881,6 +1970,24 @@ protected function buildPayPalEcsShippingAddress($userData)
return $params;
}

protected function buildPayPalv2EcsShippingAddress($userData)
{
$params = array();

if (array_key_exists('billingaddress', $userData)) {
$params['shipping_firstname'] = $userData[''];
$params['shipping_lastname'] = $userData[''];
$params['shipping_company'] = $userData[''];
$params['shipping_street'] = $userData[''];
$params['shipping_zip'] = $userData[''];
$params['shipping_city'] = $userData[''];
$params['shipping_state'] = $userData[''];
$params['shipping_country'] = $userData[''];
}

return $params;
}

public function getPaymentPaypalEcs($router)
{
$params = array();
Expand All @@ -1895,6 +2002,20 @@ public function getPaymentPaypalEcs($router)
return new Payone_Api_Request_Parameter_Authorization_PaymentMethod_Wallet($params);
}

public function getPaymentPaypalv2Ecs($router)
{
$params = array();

$params['wallettype'] = Payone_Api_Enum_WalletType::PAYPAL_EXPRESSV2;
$params['successurl'] = $this->payonePaymentHelper->assembleTokenizedUrl($router,array('action' => 'success',
'forceSecure' => true, 'appendSession' => false), null);
$params['errorurl'] = $router->assemble(array('action' => 'failure',
'forceSecure' => true, 'appendSession' => false));
$params['backurl'] = $router->assemble(array('action' => 'cancel',
'forceSecure' => true, 'appendSession' => false));
return new Payone_Api_Request_Parameter_Authorization_PaymentMethod_Wallet($params);
}

/**
* Remove whitespaces from input string
*
Expand Down
Loading

0 comments on commit 9390e81

Please sign in to comment.