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

CSE implementation #229

Draft
wants to merge 53 commits into
base: rc-1.4.17
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
53 commits
Select commit Hold shift + click to select a range
30d9ebe
Updated paynl/sdk to ^2.0.0
szhalba-sm Nov 1, 2022
5f06cab
Added credit card input data for cse
szhalba-sm Nov 3, 2022
9b78161
Added CSE api methods
szhalba-sm Nov 7, 2022
8967812
Added new logos
szhalba-sm Nov 25, 2022
ec4c660
Added condition to check if form defined
szhalba-sm Nov 25, 2022
5f3b346
Merge pull request #227 from paynl/feature/7UOCadSd-fix-javascript-er…
szhalba-sm Nov 25, 2022
80ccf2f
Merge pull request #226 from paynl/feature/hkGXNzIr-add-new-payments-…
szhalba-sm Nov 25, 2022
f0c0c37
Updated changelog
szhalba-sm Nov 25, 2022
be19594
Initiated data for paynl-cse form
szhalba-sm Nov 25, 2022
51ceb79
Updated changelog
szhalba-sm Nov 30, 2022
9cb288d
Merge pull request #228 from paynl/rc-1.4.16
szhalba-sm Dec 1, 2022
f109b5b
Added cse endpoints
szhalba-sm Dec 2, 2022
7084f16
Merge branch 'master' of github.com:paynl/shopware6-plugin into featu…
szhalba-sm Dec 2, 2022
eed0fb3
Implemented start encrypted transaction
szhalba-sm Dec 7, 2022
60f14b2
Fixed PR after code review
szhalba-sm Dec 8, 2022
3162f76
Merge branch 'feature/Sgba2ySL-implement-CSE-payment' into feature/7P…
szhalba-sm Dec 8, 2022
dc5d67c
Merge branch 'master' of github.com:paynl/shopware6-plugin into featu…
szhalba-sm Dec 8, 2022
fe13ec2
Merge branch 'feature/Sgba2ySL-implement-CSE-payment' into feature/7P…
szhalba-sm Dec 8, 2022
28e263f
Added refresh public keys route
szhalba-sm Dec 12, 2022
663da16
Added cse enabled settings
szhalba-sm Dec 13, 2022
3a5f42d
Fixed api endpoints
szhalba-sm Dec 16, 2022
c413700
Merge branch 'feature/7Pqd8JuD-implement-cse-endpoints' into feature/…
szhalba-sm Dec 16, 2022
c69a4fa
CSE payment was implemented
szhalba-sm Dec 22, 2022
8d34b01
Fixed payment method PAY. styles
szhalba-sm Jan 17, 2023
4e7a700
Added translations
szhalba-sm Jan 18, 2023
4a844de
Added expiresAt to public keys cache
szhalba-sm Jan 19, 2023
79efee5
Fixed adding paynl transaction to Shopware
szhalba-sm Jan 25, 2023
057ea19
Merge pull request #236 from paynl/feature/X4UEWSfv-cse-fix-beta-issues
szhalba-sm Jan 26, 2023
d1f890b
Merge pull request #232 from paynl/feature/qApxis1x-cse-implement-cse…
szhalba-sm Jan 26, 2023
c011d4f
Merge pull request #231 from paynl/feature/cS5uq9pM-cse-add-pugin-set…
szhalba-sm Jan 26, 2023
ec2c7f8
Merge pull request #230 from paynl/feature/7Pqd8JuD-implement-cse-end…
szhalba-sm Jan 26, 2023
1ae0d50
Disabled modal backdrop
szhalba-sm Jan 31, 2023
612f827
Fixed place order translations
szhalba-sm Feb 1, 2023
6034919
Fixed set payment
szhalba-sm Feb 1, 2023
c5d988c
Merge pull request #238 from paynl/feature/Dd4O8Z06-cse-fix-cse-beta-…
szhalba-sm Feb 1, 2023
bd50be5
Implemented cse functionality for sw 6.3 version
szhalba-sm Feb 2, 2023
baf6e23
Refactored twig templates
szhalba-sm Feb 2, 2023
25ff2c1
Route generator 6.3 compatibility
szhalba-sm Feb 2, 2023
c90d29d
Merge pull request #239 from paynl/feature/zEa0267X-implement-cse-for…
szhalba-sm Feb 3, 2023
433122b
Ignore phpstan line
szhalba-sm Feb 3, 2023
f371d1c
Merge pull request #241 from paynl/feature/Dd4O8Z06-cse-fix-cse-beta-…
szhalba-sm Feb 6, 2023
4cfde66
Update payment status after authorization payment
szhalba-sm Feb 8, 2023
0701d87
Cancel payment transaction on popup is closed
szhalba-sm Feb 9, 2023
83e5359
Fixed issues with canceled and failed payments
szhalba-sm Feb 11, 2023
23d06f8
Merge pull request #243 from paynl/feature/rTUBhH4t-cse-update-paymen…
szhalba-sm Feb 16, 2023
4dce5ca
Processing failed payments properly
szhalba-sm Feb 24, 2023
ee675bd
Hide modal close button
szhalba-sm Mar 1, 2023
0ad80a2
Fixed cse form validation
szhalba-sm Mar 6, 2023
08fc363
Added cse static response for debug mode
szhalba-sm Mar 7, 2023
83dd302
Merge pull request #249 from paynl/feature/kBFuuOcs-cse-cancel-proces…
szhalba-sm Mar 13, 2023
97aa811
Fixed payment handler duplication
szhalba-sm Mar 14, 2023
5789dd2
Added translations
szhalba-sm Mar 14, 2023
86be825
Merge pull request #253 from paynl/feature/kBFuuOcs-cse-cancel-proces…
szhalba-sm Mar 14, 2023
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
11 changes: 11 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,14 @@
# 1.4.16
- Added payment method Blik
- Added payment method Biller
- Added payment method Shoes & Sneakers Giftcard
- Added payment method Your Green Giftcard
- Added payment method Bataviastad Giftcard
- Added payment method Online banking
- Added payment method Monizze
- Added payment method Sodexo
- Fixed storefront bugs

# 1.4.15
- Added the CoC number field on the customer group registration page
- Displayed the CoC number field for all countries
Expand Down
11 changes: 11 additions & 0 deletions CHANGELOG_de-DE.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,14 @@
# 1.4.16
- Zahlungsmethode Blik hinzugefügt
- Zahlungsmethode Biller hinzugefügt
- Zahlungsmethode Shoes & Sneakers Giftcard hinzugefügt
- Zahlungsmethode Your Green Giftcard hinzugefügt
- Zahlungsmethode Bataviastad Giftcard hinzugefügt
- Zahlungsmethode Online Banking hinzugefügt
- Zahlungsmethode Monizze hinzugefügt
- Zahlungsmethode Sodexo hinzugefügt
- Verbesserungen an der Storefront

# 1.4.15
- Hinzufügen des Feldes für die Handelskammernummer auf der Registrierungsformular für Kundengruppen
- Das Feld für die Handelskammernummer wurde für alle Länder angezeigt
Expand Down
4 changes: 2 additions & 2 deletions composer.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "paynl/shopware6-plugin",
"description": "Pay. Shopware Plugin",
"version": "v1.4.15",
"version": "v1.4.16",
"type": "shopware-platform-plugin",
"extra": {
"shopware-plugin-class": "PaynlPayment\\Shopware6\\PaynlPaymentShopware6",
Expand All @@ -26,7 +26,7 @@
"require": {
"shopware/core": "^6.3",
"shopware/storefront": "^6.3",
"paynl/sdk": "1.5.15"
"paynl/sdk": "^2.0.0"
},
"minimum-stability": "RC",
"license": "MIT",
Expand Down
21 changes: 13 additions & 8 deletions composer.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

197 changes: 196 additions & 1 deletion src/Components/Api.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,13 @@

use Paynl\Config as SDKConfig;
use Paynl\Instore;
use Paynl\Payment;
use Paynl\Paymentmethods;
use Paynl\Result\Instore\Payment;
use Paynl\Result\Payment\Authenticate;
use Paynl\Result\Transaction\Start;
use Paynl\Transaction;
use Paynl\Result\Transaction\Transaction as ResultTransaction;
use Paynl\Api\Payment\Model;
use PaynlPayment\Shopware6\Enums\CustomerCustomFieldsEnum;
use PaynlPayment\Shopware6\Enums\PaynlPaymentMethodsIdsEnum;
use PaynlPayment\Shopware6\Exceptions\PaynlPaymentException;
Expand Down Expand Up @@ -129,6 +131,192 @@ public function getTransaction(string $transactionId, string $salesChannelId): R
return Transaction::get($transactionId);
}

public function startEncryptedTransaction(
OrderEntity $order,
array $payload,
SalesChannelContext $salesChannelContext,
string $returnUrl,
string $exchangeUrl,
string $shopwareVersion,
string $pluginVersion
): Authenticate {
$transaction = $this->getTransactionInitialData(
$order,
$salesChannelContext,
$returnUrl,
$exchangeUrl,
$shopwareVersion,
$pluginVersion
);

$this->setCredentials($salesChannelContext->getSalesChannel()->getId());

$objTransaction = new Model\Authenticate\Transaction();
$objTransaction
->setServiceId(\Paynl\Config::getServiceId())
->setDescription($transaction['description'])
->setExchangeUrl($transaction['exchangeUrl'])
->setReference($transaction['orderNumber'])
->setAmount($transaction['amount'] * 100)
->setCurrency($transaction['currency'])
->setLanguage($transaction['address']['country']);

$address = new Model\Address();
$address
->setStreetName($transaction['invoiceAddress']['streetName'])
->setStreetNumber($transaction['invoiceAddress']['houseNumber'])
->setZipCode($transaction['invoiceAddress']['zipCode'])
->setCity($transaction['invoiceAddress']['city'])
->setCountryCode($transaction['invoiceAddress']['country']);

$invoice = new Model\Invoice();
$invoice
->setFirstName($transaction['invoiceAddress']['initials'])
->setLastName($transaction['invoiceAddress']['lastName'])
->setGender($transaction['enduser']['gender'] ?? null)
->setAddress($address);

$customer = new Model\Customer();
$customer
->setFirstName($transaction['enduser']['initials'])
->setLastName($transaction['enduser']['lastName'])
->setAddress($address)
->setInvoice($invoice);

$cse = new Model\CSE();
$cse->setIdentifier($payload['identifier']);
$cse->setData($payload['data']);

$statistics = new Model\Statistics();
$statistics->setObject($transaction['object']);

$browser = new Model\Browser();
$browser
->setJavaEnabled('false')
->setJavascriptEnabled('false')
->setLanguage('nl-NL')
->setColorDepth('24')
->setScreenWidth('1920')
->setScreenHeight('1080')
->setTz('-120');

$paymentOrder = new Model\Order();

if (!empty($transaction['products']) && is_array($transaction['products'])) {
foreach ($transaction['products'] as $arrProduct) {
$product = new Model\Product();
$product->setId($arrProduct['id']);
$product->setType($arrProduct['type']);
$product->setDescription($arrProduct['name']);
$product->setAmount($arrProduct['price'] * 100);
$product->setQuantity($arrProduct['qty']);
$product->setVat($arrProduct['vatPercentage']);
$paymentOrder->addProduct($product);
}
}

return Payment::authenticate(
$objTransaction,
$customer,
$cse,
$browser,
$statistics,
$paymentOrder
);
}

public function getAuthenticationStatus(string $transactionId, string $salesChannelId)
{
$this->setCredentials($salesChannelId);

return Payment::authenticationStatus($transactionId);
}

/**
* @throws \Paynl\Error\Error
* @throws \Paynl\Error\Api
* @throws \Paynl\Error\Required\ApiToken
*/
public function authenticaticate(array $params, string $salesChannelId)
{
$ped = $params['pay_encrypted_data'] ?? null;
$transId = $params['transaction_id'] ?? null;
$ecode = $params['entrance_code'] ?? null;
$acquirerId = $params['acquirer_id'] ?? null;
$tdsTransactionId = $params['threeds_transaction_id'] ?? null;

$payload = json_decode($ped, true);

$transaction = new Model\Authenticate\TransactionMethod();
$transaction->setOrderId($transId)->setEntranceCode($ecode);


$cse = new Model\CSE();
$cse->setIdentifier($payload['identifier'])->setData($payload['data']);

$payment = new Model\Payment();
$payment->setMethod(Model\Payment::METHOD_CSE)->setCse($cse);

if (!empty($tdsTransactionId)) {
$auth = new Model\Auth();
$auth->setPayTdsAcquirerId($acquirerId)->setPayTdsTransactionId($tdsTransactionId);
$payment->setAuth($auth);
}

$browser = new Model\Browser();
$browser
->setJavaEnabled('false')
->setJavascriptEnabled('false')
->setLanguage('nl-NL')
->setColorDepth('24')
->setScreenWidth('1920')
->setScreenHeight('1080')
->setTz('-120');

$payment->setBrowser($browser);

$this->setCredentials($salesChannelId);

return Payment::authenticateMethod($transaction, $payment);
}

/**
* @return \Paynl\Result\Payment\Authorize
* @throws \Paynl\Error\Api
* @throws \Paynl\Error\Error
* @throws \Paynl\Error\Required\ApiToken
*/
public function authorize(array $params, string $salesChannelId)
{
$ped = $params['pay_encrypted_data'] ?? null;
$transId = $params['transaction_id'] ?? null;
$ecode = $params['entrance_code'] ?? null;
$acquirerId = $params['acquirer_id'] ?? null;
$tdsTransactionId = $params['threeds_transaction_id'] ?? null;

$payload = json_decode($ped, true);

$transaction = new Model\Authorize\Transaction();
$transaction->setOrderId($transId)->setEntranceCode($ecode);

$cse = new Model\CSE();
$cse->setIdentifier($payload['identifier']);
$cse->setData($payload['data']);

$auth = new Model\Auth();
$auth->setPayTdsAcquirerId($acquirerId);
$auth->setPayTdsTransactionId($tdsTransactionId);

$payment = new Model\Payment();
$payment->setMethod(Model\Payment::METHOD_CSE);
$payment->setCse($cse);
$payment->setAuth($auth);

$this->setCredentials($salesChannelId);

return Payment::authorize($transaction, $payment);
}

/**
* @param OrderEntity $order
* @param SalesChannelContext $salesChannelContext
Expand Down Expand Up @@ -373,4 +561,11 @@ public function getInstoreTerminals(string $salesChannelId): array

return (array)Instore::getAllTerminals()->getList();
}

public function getPublicKeys(string $salesChannelId): array
{
$this->setCredentials($salesChannelId);

return Payment::paymentEncryptionKeys()->getKeys();
}
}
5 changes: 5 additions & 0 deletions src/Components/Config.php
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,11 @@ public function isRefundAllowed(string $salesChannelId): bool
return (bool)$this->get($salesChannelId, 'allowRefunds');
}

public function cseEnabled(string $salesChannelId): bool
{
return (bool)$this->get($salesChannelId, 'cseEnabled');
}

/**
* @return string[]
*/
Expand Down
Loading