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

SL-219 Saving cards #193

Closed
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
75 commits
Select commit Hold shift + click to select a range
51bc5de
Merge pull request #155 from Invertus/release-1.2.2
GytisZum May 23, 2024
1a4c5ab
upgrade api to 1.37->1.40, init wechatpay and upgrade module to 1.2.3
zuk3975 Jun 11, 2024
4271164
wechatpay handle unsupported capture/cancel
zuk3975 Jun 12, 2024
f4aaea2
wip
zuk3975 Jun 12, 2024
f35ac76
force create order before checkout for a2a. add upgrade and new pend…
zuk3975 Jun 26, 2024
68fb81f
remove testing todo
zuk3975 Jun 26, 2024
18a7df4
handle pending decline
zuk3975 Jun 27, 2024
389e39e
add wait tpl and remove order creation from return
zuk3975 Jun 27, 2024
b3bac09
remove todo
zuk3975 Jun 27, 2024
c1d83af
fix pending status
zuk3975 Jun 28, 2024
adb4c5d
Merge pull request #171 from Invertus/wechat-and-wait
zuk3975 Jul 1, 2024
ba49048
apply changes from branch SL-232/conflicting-calls. Return contorlle…
zuk3975 Jul 1, 2024
5cc5042
Merge pull request #172 from Invertus/lock-rebase
zuk3975 Jul 1, 2024
8a3052f
cleanup and fix payment authorization issues
zuk3975 Jul 3, 2024
8d87ae5
Merge pull request #173 from Invertus/SL-238
zuk3975 Jul 3, 2024
19c4132
fix return failure and set complete for uncapturable payments
zuk3975 Jul 5, 2024
c78bc95
Merge pull request #174 from Invertus/fix-return-and-complete
zuk3975 Jul 5, 2024
6fd4d5e
changlelog updated
GytisZum Jul 5, 2024
156a021
changlelog updated
GytisZum Jul 5, 2024
c424c21
max version increased
GytisZum Jul 5, 2024
9b1fc36
wait template for ps16
zuk3975 Jul 8, 2024
3c89b8b
Merge pull request #175 from Invertus/wait-tpl-16
zuk3975 Jul 8, 2024
55cebc4
fix loop by separating controller and allow asserting without update
zuk3975 Jul 10, 2024
6b8d97e
install fixed
GytisZum Jul 16, 2024
781d604
order states fix on old prestashop versions
GytisZum Jul 22, 2024
f599f44
ps16 compatibility
GytisZum Jul 23, 2024
1ae06bf
not needed logs deleted
GytisZum Jul 23, 2024
2070564
fix bo for ps 1.6
GytisZum Jul 23, 2024
ce1555b
fix payments on 1.6 ps
GytisZum Jul 25, 2024
c2b7205
fix
GytisZum Jul 25, 2024
2e3bc85
fix
GytisZum Jul 25, 2024
867ec7c
Merge pull request #182 from Invertus/SV-23/ps16-improvements
GytisZum Jul 25, 2024
e4786d7
check order captured state on failure if multiple statuses comes at once
GytisZum Jul 31, 2024
ab06e19
conflict fix
GytisZum Aug 1, 2024
9c9e747
Merge pull request #183 from Invertus/SL-247/order-states-fix
GytisZum Aug 1, 2024
008f558
Merge pull request #176 from Invertus/fix-loop-and-assert-write
GytisZum Aug 1, 2024
2e5dc6f
fix types for amount in order capturing with php 8.1 version
GytisZum Aug 7, 2024
feface4
Merge pull request #186 from Invertus/SL-249/transaction-status
GytisZum Aug 8, 2024
5f5fd16
duplicate mail fix
GytisZum Aug 8, 2024
52a0ae5
fix order conf mail
GytisZum Aug 9, 2024
fed9698
make file updated for module preparation
GytisZum Aug 9, 2024
9dfbcf2
Merge pull request #187 from Invertus/SL-249/transaction-status
GytisZum Aug 9, 2024
e185635
Merge pull request #184 from Invertus/release-1.2.3
GytisZum Sep 17, 2024
4627df2
[SL-257] init
MarijusCoding Sep 20, 2024
60cb882
[SL-234] fix not rendering
MarijusCoding Sep 20, 2024
b7f101d
[SL-234] fix
MarijusCoding Sep 20, 2024
acd2f60
[SL-234] fix
MarijusCoding Sep 20, 2024
f3f85c2
[SL-234] fix
MarijusCoding Sep 20, 2024
ce82051
[SL-230] init
MarijusCoding Sep 20, 2024
908b462
[SL-244] optimized images querys
MarijusCoding Sep 22, 2024
61cbcd1
[SL-244] fix
MarijusCoding Sep 23, 2024
3f5d318
[SL-244] WIP
MarijusCoding Sep 23, 2024
d2d2aea
[SL-244] fix
MarijusCoding Sep 23, 2024
ad707d6
[SL-234] fix
MarijusCoding Sep 23, 2024
e478360
[SL-234] fix
MarijusCoding Sep 23, 2024
4e65cce
Merge pull request #189 from Invertus/SL-257/add-holdername
MarijusCoding Sep 23, 2024
6b4b0f7
[SL-219] init
MarijusCoding Sep 24, 2024
63b9273
init
MarijusCoding Sep 24, 2024
1938ef2
[SL-219] fix
MarijusCoding Sep 24, 2024
106ef68
[SL-219] fix
MarijusCoding Sep 24, 2024
3ab3985
[SL-219] fix
MarijusCoding Sep 25, 2024
17fdb72
Merge pull request #191 from Invertus/SL-230/cancel-order
MarijusCoding Sep 30, 2024
2e1e4f4
Merge branch 'release-v1.2.4' of github.com:Invertus/saferpayofficial…
MarijusCoding Sep 30, 2024
d0d0c4a
[SL-244] fix
MarijusCoding Sep 30, 2024
08b2b1e
[SL-244] rename
MarijusCoding Sep 30, 2024
3794fbe
[SL-234] fix
MarijusCoding Oct 1, 2024
f5ab091
[SL-219] phpDoc
MarijusCoding Oct 1, 2024
4524b9e
Merge pull request #192 from Invertus/SL-244/performance-issues
MarijusCoding Oct 1, 2024
56a734b
[SL-219] fix ternary
MarijusCoding Oct 2, 2024
7e197ab
Merge pull request #190 from Invertus/SL-234/my-account-override
MarijusCoding Oct 2, 2024
ba78b82
fix
MarijusCoding Oct 2, 2024
bcb6dcc
Revert "fix"
MarijusCoding Oct 2, 2024
61d229f
Merge branch 'SL-219/saved-card-iframe' into SL-219/saving-cards-bugs
MarijusCoding Oct 2, 2024
3bf3ffb
Revert "Merge branch 'SL-219/saved-card-iframe' into SL-219/saving-ca…
MarijusCoding Oct 3, 2024
c66a403
revert
MarijusCoding Oct 3, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion .github/workflows/deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@ jobs:
uses: shivammathur/setup-php@v2
with:
php-version: '5.6'

- name: Run composer install
run: |
composer install --no-dev --optimize-autoloader --classmap-authoritative
Expand Down
3 changes: 1 addition & 2 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,10 @@ jobs:
uses: shivammathur/setup-php@v2
with:
php-version: '5.6'

- name: Run composer install
run: |
composer install --no-dev --optimize-autoloader --classmap-authoritative
composer dump-autoload --no-dev --optimize --classmap-authoritative
composer dump-autoload --no-dev --optimize --classmap-authoritative

- name: build
# IF YOU EDIT THIS, DON'T FORGET TO EDIT deploy.yml
Expand Down
5 changes: 2 additions & 3 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,5 @@
composer.lock
.php_cs.cache
tests/.env
/node_modules
var/cache/*
!var/cache/index.php
/var
/node_modules
7 changes: 1 addition & 6 deletions changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -156,9 +156,4 @@
- BO : Added order creation after authorization functionality

- ## [1.2.1] - *
- FO : Increased compatibility with PrestaShop 1.6

- ## [1.2.2] - *
- FO : Confirmation email after order authorization fix
- BO : Order confirmation email setting removed
- BO : Security improvements
- FO : Increased compatibility with PrestaShop 1.6
10 changes: 1 addition & 9 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -21,13 +21,6 @@
"php": "5.6"
}
},
"repositories": [
{
"type": "vcs",
"url": "https://github.com/Invertus/lock.git",
"no-api": true
}
],
"require": {
"vlucas/phpdotenv": "^3.6",
"symfony/expression-language": "^3.4",
Expand All @@ -36,8 +29,7 @@
"symfony/filesystem": "^3.4",
"apimatic/unirest-php": "^2.3",
"symfony/yaml": "^3.4",
"league/container": "2.5.0",
"invertus/lock": "^1.0.0"
"league/container": "2.5.0"
},
"require-dev": {
"friendsofphp/php-cs-fixer": "*",
Expand Down
7 changes: 7 additions & 0 deletions controllers/admin/AdminSaferPayOfficialSettingsController.php
Original file line number Diff line number Diff line change
Expand Up @@ -322,6 +322,13 @@ public function initOptions()
'title' => $this->module->l('Email sending'),
'icon' => 'icon-settings',
'fields' => [
SaferPayConfig::SAFERPAY_SEND_ORDER_CONFIRMATION => [
'title' => $this->l('Send order confirmation email'),
'desc' => $this->l('Send order confirmation email before payment is executed'),
'validation' => 'isBool',
'cast' => 'intval',
'type' => 'bool',
],
SaferPayConfig::SAFERPAY_ALLOW_SAFERPAY_SEND_CUSTOMER_MAIL => [
'title' => $this->l('Send an email from Saferpay on payment completion'),
'desc' => $this->l('With this setting enabled an email from the Saferpay system will be sent to the customer'),
Expand Down
28 changes: 0 additions & 28 deletions controllers/front/notify.php
Original file line number Diff line number Diff line change
Expand Up @@ -64,34 +64,6 @@ public function postProcess()
die($this->module->l('Error. Insecure cart', self::FILENAME));
}

$lockResult = $this->applyLock(sprintf(
'%s-%s',
$cartId,
$secureKey
));

if (!$lockResult->isSuccessful()) {
die($this->module->l('Lock already exist', self::FILENAME));
}

if ($cart->orderExists()) {
if (method_exists('Order', 'getIdByCartId')) {
$orderId = Order::getIdByCartId($cartId);
} else {
// For PrestaShop 1.6 use the alternative method
$orderId = Order::getOrderByCartId($cartId);
}

$order = new Order($orderId);

$saferPayAuthorizedStatus = (int) Configuration::get(\Invertus\SaferPay\Config\SaferPayConfig::SAFERPAY_PAYMENT_AUTHORIZED);
$saferPayCapturedStatus = (int) Configuration::get(\Invertus\SaferPay\Config\SaferPayConfig::SAFERPAY_PAYMENT_COMPLETED);

if ((int) $order->current_state === $saferPayAuthorizedStatus || (int) $order->current_state === $saferPayCapturedStatus) {
die($this->module->l('Order already created', self::FILENAME));
}
}

try {
$assertResponseBody = $this->assertTransaction($cartId);

Expand Down
48 changes: 0 additions & 48 deletions controllers/front/return.php
Original file line number Diff line number Diff line change
Expand Up @@ -61,61 +61,13 @@ public function postProcess()
]));
}

$lockResult = $this->applyLock(
sprintf(
'%s-%s',
$cartId,
$secureKey
)
);

if (!$lockResult->isSuccessful()) {
$this->redirectWithNotifications($this->context->link->getModuleLink(
$this->module->name,
ControllerName::FAIL,
[
'cartId' => $cartId,
'secureKey' => $secureKey,
'moduleId' => $moduleId,
]
));
}

if ($cart->secure_key !== $secureKey) {
$this->ajaxDie(json_encode([
'error_type' => 'unknown_error',
'error_text' => $this->module->l('An unknown error error occurred. Please contact support', self::FILENAME),
]));
}

if ($cart->orderExists()) {
if (method_exists('Order', 'getIdByCartId')) {
$orderId = Order::getIdByCartId($cartId);
} else {
// For PrestaShop 1.6 use the alternative method
$orderId = Order::getOrderByCartId($cartId);
}

$order = new Order($orderId);

$saferPayAuthorizedStatus = (int) Configuration::get(\Invertus\SaferPay\Config\SaferPayConfig::SAFERPAY_PAYMENT_AUTHORIZED);
$saferPayCapturedStatus = (int) Configuration::get(\Invertus\SaferPay\Config\SaferPayConfig::SAFERPAY_PAYMENT_COMPLETED);

if ((int) $order->current_state === $saferPayAuthorizedStatus || (int) $order->current_state === $saferPayCapturedStatus) {
Tools::redirect($this->context->link->getModuleLink(
$this->module->name,
$this->getSuccessControllerName($isBusinessLicence, $fieldToken),
[
'cartId' => $cartId,
'orderId' => $orderId,
'moduleId' => $moduleId,
'secureKey' => $secureKey,
'selectedCard' => $selectedCard,
]
));
}
}

try {
if ($isBusinessLicence) {
$response = $this->executeTransaction((int) $cartId, (int) $selectedCard);
Expand Down
31 changes: 0 additions & 31 deletions controllers/front/successIFrame.php
Original file line number Diff line number Diff line change
Expand Up @@ -62,37 +62,6 @@ public function postProcess()

$this->redirectWithNotifications($this->getOrderLink());
}

try {
Tools::redirect($this->getOrderConfirmationLink($cartId, $moduleId, $orderId, $secureKey));
} catch (Exception $e) {
PrestaShopLogger::addLog(
sprintf(
'%s has caught an error: %s',
__CLASS__,
$e->getMessage()
),
1,
null,
null,
null,
true
);

Tools::redirect(
$this->context->link->getModuleLink(
$this->module->name,
ControllerName::FAIL_IFRAME,
[
'cartId' => $cartId,
'secureKey' => $secureKey,
'orderId' => $orderId,
\Invertus\SaferPay\Config\SaferPayConfig::IS_BUSINESS_LICENCE => true,
],
true
)
);
}
}

public function initContent()
Expand Down
44 changes: 17 additions & 27 deletions saferpayofficial.php
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,6 @@
*@license SIX Payment Services
*/

use Invertus\SaferPay\Config\SaferPayConfig;

if (!defined('_PS_VERSION_')) {
exit;
}
Expand Down Expand Up @@ -578,55 +576,47 @@ public function hookActionEmailSendBefore($params)
}

if ($params['template'] === 'new_order') {
if ((int) Configuration::get(\Invertus\SaferPay\Config\SaferPayConfig::SAFERPAY_SEND_NEW_ORDER_MAIL)) {
if (!Configuration::get(\Invertus\SaferPay\Config\SaferPayConfig::SAFERPAY_SEND_NEW_ORDER_MAIL)) {
return true;
}

return false;
}
}

public function hookActionOrderHistoryAddAfter($params = [])
public function hookActionOrderStatusPostUpdate($params = [])
{
/** @var OrderHistory $orderHistory */
$orderHistory = $params['order_history'];

if (!$orderHistory instanceof OrderHistory) {
if (!isset($params['newOrderStatus']) || !isset($params['id_order'])) {
return;
}

$idOrder = (int) $orderHistory->id_order;

$internalOrder = new Order($idOrder);
if ($params['newOrderStatus'] instanceof OrderState) {
$orderStatus = $params['newOrderStatus'];
} else {
$orderStatus = new OrderState((int) $params['newOrderStatus']);
}
$order = new Order($params['id_order']);

if (!Validate::isLoadedObject($internalOrder)) {
if (!Validate::isLoadedObject($orderStatus)) {
return;
}

$order = new Order($idOrder);

$orderStatus = new OrderState((int) $order->current_state);

if (!Validate::isLoadedObject($orderStatus)) {
if (!Validate::isLoadedObject($order)) {
return;
}

/** @var \Invertus\SaferPay\Service\SaferPayMailService $mailService */
$mailService = $this->getService(\Invertus\SaferPay\Service\SaferPayMailService::class);

$saferPayAuthorizedStatus = (int) Configuration::get(\Invertus\SaferPay\Config\SaferPayConfig::SAFERPAY_PAYMENT_AUTHORIZED);
if ($orderStatus->id === $saferPayAuthorizedStatus && Configuration::get(\Invertus\SaferPay\Config\SaferPayConfig::SAFERPAY_SEND_NEW_ORDER_MAIL)) {
$mailService->sendNewOrderMail($order, (int) $orderStatus->id);
}

/** @var \Invertus\SaferPay\Core\Order\Verification\CanSendOrderConfirmationEmail $canSendOrderConfirmationEmail */
$canSendOrderConfirmationEmail = $this->getService(\Invertus\SaferPay\Core\Order\Verification\CanSendOrderConfirmationEmail::class);

if ($canSendOrderConfirmationEmail->verify((int) $orderStatus->id)) {
try {
$mailService->sendNewOrderMail($order, (int) $orderStatus->id);
} catch (\Exception $e) {
// emailalert module sometimes throws error which leads into failed payment issue
}

if ((int) \Configuration::get(SaferPayConfig::SAFERPAY_PAYMENT_AUTHORIZED) === (int) $orderStatus->id) {
$mailService->sendOrderConfMail($order, (int) $orderStatus->id);
}
$mailService->sendOrderConfMail($order, (int) $orderStatus->id);
}
}

Expand Down
14 changes: 13 additions & 1 deletion src/Api/Request/AuthorizationService.php
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
use Invertus\SaferPay\EntityBuilder\SaferPayAssertBuilder;
use Invertus\SaferPay\EntityBuilder\SaferPayCardAliasBuilder;
use Invertus\SaferPay\Exception\Api\SaferPayApiException;
use Invertus\SaferPay\Repository\SaferPayCardAliasRepository;
use Invertus\SaferPay\Service\Response\AssertResponseObjectCreator;

if (!defined('_PS_VERSION_')) {
Expand Down Expand Up @@ -61,16 +62,20 @@ class AuthorizationService
*/
private $aliasBuilder;

private $aliasRepository;

public function __construct(
ApiRequest $apiRequest,
AssertResponseObjectCreator $assertResponseObjectCreator,
SaferPayAssertBuilder $assertBuilder,
SaferPayCardAliasBuilder $aliasBuilder
SaferPayCardAliasBuilder $aliasBuilder,
SaferPayCardAliasRepository $aliasRepository
) {
$this->apiRequest = $apiRequest;
$this->assertResponseObjectCreator = $assertResponseObjectCreator;
$this->assertBuilder = $assertBuilder;
$this->aliasBuilder = $aliasBuilder;
$this->aliasRepository = $aliasRepository;
}

public function authorize(AuthorizationRequest $authorizationRequest)
Expand Down Expand Up @@ -103,6 +108,13 @@ public function createObjectsFromAuthorizationResponse(
$assertBody = $this->assertResponseObjectCreator->createAssertObject($responseBody);
$this->assertBuilder->createAssert($assertBody, $saferPayOrderId);
$isPaymentSafe = $assertBody->getLiability()->getLiabilityShift();
$allSavedCards = array_column($this->aliasRepository->getSavedCardsNumbersByCustomerId($customerId), 'card_number');
$currentCard = $assertBody->getPaymentMeans()->getDisplayText();

if (in_array($currentCard, $allSavedCards)) {
return $assertBody;
}

if ((int) $selectedCardOption === SaferPayConfig::CREDIT_CARD_OPTION_SAVE && $isPaymentSafe) {
$this->aliasBuilder->createCardAlias($assertBody, $customerId);
}
Expand Down
2 changes: 2 additions & 0 deletions src/Config/SaferPayConfig.php
Original file line number Diff line number Diff line change
Expand Up @@ -222,6 +222,7 @@ class SaferPayConfig
const SAFERPAY_PAYMENT_CANCELED = 'SAFERPAY_PAYMENT_CANCELED';
const SAFERPAY_PAYMENT_AUTHORIZATION_FAILED = 'SAFERPAY_PAYMENT_AUTHORIZATION_FAILED';

const SAFERPAY_SEND_ORDER_CONFIRMATION = 'SAFERPAY_SEND_ORDER_CONFIRMATION';
const SAFERPAY_SEND_NEW_ORDER_MAIL = 'SAFERPAY_SEND_NEW_ORDER_MAIL';
const SAFERPAY_ALLOW_SAFERPAY_SEND_CUSTOMER_MAIL = 'SAFERPAY_ALLOW_SAFERPAY_SEND_CUSTOMER_MAIL';
const SAFERPAY_ORDER_CREATION_AFTER_AUTHORIZATION = 'SAFERPAY_ORDER_CREATION_AFTER_AUTHORIZATION';
Expand Down Expand Up @@ -338,6 +339,7 @@ public static function getDefaultConfiguration()
RequestHeader::RETRY_INDICATOR => 0,
SaferPayConfig::PAYMENT_BEHAVIOR => 1,
SaferPayConfig::PAYMENT_BEHAVIOR_WITHOUT_3D => 1,
SaferPayConfig::SAFERPAY_SEND_ORDER_CONFIRMATION => 1,
SaferPayConfig::SAFERPAY_ALLOW_SAFERPAY_SEND_CUSTOMER_MAIL => 1,
SaferPayConfig::SAFERPAY_PAYMENT_DESCRIPTION => self::SAFERPAY_PAYMENT_DESCRIPTION_DEFAULT_VALUE,
SaferPayConfig::FIELDS_LIBRARY => self::FIELDS_LIBRARY_DEFAULT_VALUE,
Expand Down
Loading
Loading