Skip to content

Commit

Permalink
PSPAYPAL-799 - add missing vaultPayment input for smarty + add clickp…
Browse files Browse the repository at this point in the history
…revention
  • Loading branch information
[email protected] authored and [email protected] committed Oct 14, 2024
1 parent 0c0e726 commit 7aa43ee
Show file tree
Hide file tree
Showing 4 changed files with 60 additions and 46 deletions.
5 changes: 5 additions & 0 deletions metadata.php
Original file line number Diff line number Diff line change
Expand Up @@ -179,6 +179,11 @@
'block' => 'shippingAndPayment',
'file' => 'views/smarty/frontend/blocks/page/checkout/order__shippingAndPayment.tpl',
],
[
'template' => 'page/checkout/order.tpl',
'block' => 'checkout_order_btn_submit_bottom',
'file' => 'views/smarty/frontend/blocks/page/checkout/order__checkout_order_btn_submit_bottom.tpl',
],
[
'template' => 'page/details/inc/productmain.tpl',
'block' => 'details_productmain_tobasket',
Expand Down
78 changes: 32 additions & 46 deletions src/Service/Payment.php
Original file line number Diff line number Diff line change
Expand Up @@ -123,39 +123,6 @@ public function doCreatePayPalOrder(
$this->setPaymentExecutionError(self::PAYMENT_ERROR_NONE);
$order instanceof EshopModelOrder ?? $order->setOrderNumber();

//save vault to user and set success message
$session = Registry::getSession();
$vault = null;

if ($paypal = $result->payment_source->paypal) {
$vault = $paypal->attributes->vault;
} elseif ($card = $result->payment_source->card) {
$vault = $card->attributes->vault;
}

if ($session->getVariable("vaultSuccess") && $vault->status == "VAULTED") {
$vaultSuccess = false;

if ($id = $vault->customer["id"]) {
$user = Registry::getConfig()->getUser();

$user->oxuser__oscpaypalcustomerid = new Field($id);

if ($user->save()) {
$vaultSuccess = true;
}
}

if (!$vaultSuccess) {
$this->logger->log('debug', "Vaulting was attempted but didn't succeed.");
}

$session->setVariable("vaultSuccess", $vaultSuccess);
} else {
$session->deleteVariable("vaultSuccess");
}


/** @var ApiOrderService $orderService */
$orderService = $this->serviceFactory->getOrderService();

Expand All @@ -175,19 +142,6 @@ public function doCreatePayPalOrder(

$response = [];

/*
* Set required request id if payer uses vaulted payment.
* The OXID order is not created yet, so a random id will be given.
*/
$moduleSettings = $this->getServiceFromContainer(ModuleSettings::class);
$setVaulting = $moduleSettings->getIsVaultingActive();
$selectedVaultPaymentSourceIndex = Registry::getSession()->getVariable("selectedVaultPaymentSourceIndex");
$useVaulting = $setVaulting && !is_null($selectedVaultPaymentSourceIndex);

if ($useVaulting) {
$payPalRequestId = time();
}

try {
$response = $orderService->createOrder(
$request,
Expand Down Expand Up @@ -392,6 +346,38 @@ public function doCapturePayPalOrder(
);

if ($result instanceof Order && $order->isPayPalOrderCompleted($result)) {
//save vault to user and set success message
$session = Registry::getSession();
$vault = null;

if ($paypal = $result->payment_source->paypal) {
$vault = $paypal->attributes->vault;
} elseif ($card = $result->payment_source->card) {
$vault = $card->attributes->vault;
}

if ($session->getVariable("vaultSuccess") && $vault->status === "VAULTED") {
$vaultSuccess = false;

if ($id = $vault->customer["id"]) {
$user = Registry::getConfig()->getUser();

$user->oxuser__oscpaypalcustomerid = new Field($id);

if ($user->save()) {
$vaultSuccess = true;
}
}

if (!$vaultSuccess) {
$this->logger->log('debug', "Vaulting was attempted but didn't succeed.");
}

$session->setVariable("vaultSuccess", $vaultSuccess);
} else {
$session->deleteVariable("vaultSuccess");
}

$order->setOrderNumber();
$order->markOrderPaid();
$order->setTransId((string)$payPalTransactionId);
Expand Down
7 changes: 7 additions & 0 deletions views/smarty/frontend/acdc.tpl
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,10 @@
<input type="text" id="card-holder-name" class="form-control" name="card-holder-name" autocomplete="off" placeholder="[{oxmultilang ident="OSC_PAYPAL_ACDC_CARD_NAME_ON_CARD"}]"/>
</div>
</div>
[{if $oscpaypal_isVaultingPossible}]
<input type="checkbox" id="oscPayPalVaultPaymentCheckbox">
<label for="oscPayPalVaultPaymentCheckbox">[{oxmultilang ident="OSC_PAYPAL_VAULTING_SAVE"}]</label>
[{/if}]
<div class="hidden">
<input type="hidden" id="card-billing-address-street" name="card-billing-address-street" value="[{if $oxcmp_user->oxuser__oxstreet->value}][{$oxcmp_user->oxuser__oxstreet->value}][{/if}] [{if $oxcmp_user->oxuser__oxstreetnr->value}][{$oxcmp_user->oxuser__oxstreetnr->value}][{/if}]" />
<input type="hidden" id="card-billing-address-unit" name="card-billing-address-unit" value=""/>
Expand Down Expand Up @@ -51,11 +55,14 @@
let ordAgb = (document.getElementById('checkAgbTop') && document.getElementById('checkAgbTop').checked) ? 1 : 0;
let downloadableProductAgreement = (document.getElementById('oxdownloadableproductsagreement') && document.getElementById('oxdownloadableproductsagreement').checked) ? 1 : 0;
let serviceProductAgreement = (document.getElementById('oxserviceproductsagreement') && document.getElementById('oxserviceproductsagreement').checked) ? 1 : 0;
let vaultPayment = document.getElementById("oscPayPalVaultPaymentCheckbox").checked;
let url = '[{$sSelfLink}]' + "cl=order&fnc=createAcdcOrder&ord_agb="+
ordAgb+"&oxdownloadableproductsagreement=" +downloadableProductAgreement
+ "&oxserviceproductsagreement="+serviceProductAgreement
+ "&stoken=" + '[{$oViewConf->getSessionChallengeToken()}]'
+ '&sDeliveryAddressMD5=' + '[{$oView->getDeliveryAddressMD5()}]'
+ '&vaultPayment=' + vaultPayment
+ '&oscPayPalPaymentTypeForVaulting=' + 'oscpaypal_acdc'
;
return fetch(url, {
method: 'post',
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
[{assign var="payment" value=$oView->getPayment()}]
[{if "oscpaypal" == $payment->getId()}]
<input type="hidden" name="vaultPayment" id="oscPayPalVaultPayment" value="">
[{capture name="oscpaypal_madClickPrevention"}]
const submitButton = document.querySelector('#orderConfirmAgbBottom .submitButton');
const orderConfirmAgbBottom = document.getElementById('orderConfirmAgbBottom');

submitButton.addEventListener('click', function() {
event.preventDefault();
this.disabled = true;
orderConfirmAgbBottom.submit();
});
[{/capture}]
[{oxscript add=$smarty.capture.oscpaypal_madClickPrevention}]
[{/if}]
[{$smarty.block.parent}]

0 comments on commit 7aa43ee

Please sign in to comment.