Compare commits

...

1 Commits

Author SHA1 Message Date
andrewrowanwallee 3f3bf866dd Release 7.3.1 2026-02-09 14:17:02 +01:00
14 changed files with 79 additions and 23 deletions
+7
View File
@@ -1,3 +1,10 @@
# 7.3.1
- Shopware 6.7.7.0 compatibility
- Fix for missing payment icons
- Fixed issue with 'Entire Set' coupons returning error due to totals mismatch
- Fixed issue with orphaned order_transactions causing an admin UI failure
- Fixed error thrown when customers who aren't logged in attempt to download an invoice
# 7.3.0
- Headless storefront support
+7
View File
@@ -1,3 +1,10 @@
# 7.3.1
- Kompatibilität mit Shopware 6.7.7.0
- Fehlende Zahlungssymbole behoben
- Problem mit „Gesamtes Set“-Gutscheinen aufgrund von Summenabweichungen behoben
- Problem mit verwaisten Bestelltransaktionen behoben, die zu einem Fehler in der Admin-Oberfläche führten
- Ein Fehler wurde behoben, der auftrat, wenn nicht angemeldete Kunden versuchten, eine Rechnung herunterzuladen.
# 7.3.0
- Headless Storefront unterstützung
+4 -4
View File
@@ -13,10 +13,10 @@ Please note that this plugin is for versions 6.5, 6.6 or 6.7. For the 6.4 plugin
## Documentation
- For English documentation click [here](https://docs.plugin-documentation.vr-payment.de/vr-payment/shopware-6/7.3.0/docs/en/documentation.html)
- Für die deutsche Dokumentation klicken Sie [hier](https://docs.plugin-documentation.vr-payment.de/vr-payment/shopware-6/7.3.0/docs/de/documentation.html)
- Pour la documentation Française, cliquez [ici](https://docs.plugin-documentation.vr-payment.de/vr-payment/shopware-6/7.3.0/docs/fr/documentation.html)
- Per la documentazione in tedesco, clicca [qui](https://docs.plugin-documentation.vr-payment.de/vr-payment/shopware-6/7.3.0/docs/it/documentation.html)
- For English documentation click [here](https://docs.plugin-documentation.vr-payment.de/vr-payment/shopware-6/7.3.1/docs/en/documentation.html)
- Für die deutsche Dokumentation klicken Sie [hier](https://docs.plugin-documentation.vr-payment.de/vr-payment/shopware-6/7.3.1/docs/de/documentation.html)
- Pour la documentation Française, cliquez [ici](https://docs.plugin-documentation.vr-payment.de/vr-payment/shopware-6/7.3.1/docs/fr/documentation.html)
- Per la documentazione in tedesco, clicca [qui](https://docs.plugin-documentation.vr-payment.de/vr-payment/shopware-6/7.3.1/docs/it/documentation.html)
## Installation
+1 -1
View File
@@ -59,5 +59,5 @@
"vrpayment/sdk": "^4.0.0"
},
"type": "shopware-platform-plugin",
"version": "7.3.0"
"version": "7.3.1"
}
+1 -1
View File
@@ -23,7 +23,7 @@
</a>
</li>
<li>
<a href="https://github.com/vr-payment/shopware-6/releases/tag/7.3.0/">
<a href="https://github.com/vr-payment/shopware-6/releases/tag/7.3.1/">
Source
</a>
</li>
+1 -1
View File
@@ -23,7 +23,7 @@
</a>
</li>
<li>
<a href="https://github.com/vr-payment/shopware-6/releases/tag/7.3.0/">
<a href="https://github.com/vr-payment/shopware-6/releases/tag/7.3.1/">
Source
</a>
</li>
+1 -1
View File
@@ -23,7 +23,7 @@
</a>
</li>
<li>
<a href="https://github.com/vr-payment/shopware-6/releases/tag/7.3.0/">
<a href="https://github.com/vr-payment/shopware-6/releases/tag/7.3.1/">
Source
</a>
</li>
+1 -1
View File
@@ -23,7 +23,7 @@
</a>
</li>
<li>
<a href="https://github.com/vr-payment/shopware-6/releases/tag/7.3.0/">
<a href="https://github.com/vr-payment/shopware-6/releases/tag/7.3.1/">
Source
</a>
</li>
@@ -119,7 +119,9 @@ class WebHookTransactionStrategy extends WebHookStrategyBase implements WebhookS
$orderId = $transaction->getMetaData()[TransactionPayload::VRPAYMENT_METADATA_ORDER_ID];
if (!empty($orderId) && !$transaction->getParent()) {
$this->executeLocked($orderId, $context, function () use ($orderId, $transaction, $context, $request, $token) {
$this->transactionService->upsert($transaction, $context);
if ($this->allowUpsert($transaction, $orderId, $context)) {
$this->transactionService->upsert($transaction, $context);
}
$orderTransactionId = $transaction->getMetaData()[TransactionPayload::VRPAYMENT_METADATA_ORDER_TRANSACTION_ID];
$orderTransaction = $this->getOrderTransaction($orderId, $context);
$this->logger->info("OrderId: {orderId} Current state: {state}", [
@@ -178,4 +180,26 @@ class WebHookTransactionStrategy extends WebHookStrategyBase implements WebhookS
return new JsonResponse(['data' => $request->jsonSerialize()], $status);
}
/**
* Checks the incoming transaction ID against the current transaction ID of the order.
* If they dont match, the saved transaction in the database remains unchanged.
*
* @param Transaction $transaction The transaction data retrieved from the portal.
* @param string $orderId The order ID of the current transaction.
* @param Context $context The operational context providing settings and environment for transaction processing.
* @return bool Returns a value that determines whether to upsert the transaction into the database.
*/
private function allowUpsert(Transaction $transaction, string $orderId, Context $context): bool
{
try {
$transactionEntity = $this->transactionService->getByOrderId($orderId, $context);
if ($transactionEntity->getTransactionId() !== $transaction->getId()) {
return false;
}
} catch (\Throwable $e) {
}
return true;
}
}
@@ -76,7 +76,7 @@ class PaymentMethodRouteDecorator extends AbstractPaymentMethodRoute
$response = $this->decorated->load($request, $context, $criteria);
$currentRoute = $request->attributes->get('_route');
if ($currentRoute === 'frontend.checkout.finish.page') {
if ($currentRoute === 'frontend.checkout.finish.page' || !$this->allowFilterPaymentMethods($request)) {
return $response;
}
@@ -100,4 +100,22 @@ class PaymentMethodRouteDecorator extends AbstractPaymentMethodRoute
)
);
}
/**
* We prevent filtering methods unless onlyAvailable is true.
* This is because the filterPaymentMethods() function creates unnecessary pending transactions in the
* portal when logged-in users navigate between pages.
* The onlyAvailable flag applies rule-based filtering of payment methods and is usually true on checkout pages,
* so we apply filterPaymentMethods() only when relevant.
*
* @param Request $request
* @return bool
*/
private function allowFilterPaymentMethods(Request $request): bool
{
if ($request->query->getBoolean('onlyAvailable') || $request->request->getBoolean('onlyAvailable')) {
return true;
}
return false;
}
}
@@ -262,7 +262,7 @@ class PaymentMethodFilterService
new EqualsFilter('salesChannels.id', $salesChannelContext->getSalesChannelId())
);
$criteria->addSorting(new FieldSorting('position', FieldSorting::ASCENDING));
$criteria->addAssociation('media');
// Re-fetch the entities to ensure we have valid objects with all associations.
$result = $this->paymentMethodRepository->search($criteria, $salesChannelContext->getContext());
/** @var \Shopware\Core\Checkout\Payment\PaymentMethodEntity $method */
@@ -6,7 +6,7 @@ namespace VRPaymentPayment\Core\Storefront\Account\Controller;
use Psr\Log\LoggerInterface;
use Shopware\Core\{
Checkout\Cart\Exception\CustomerNotLoggedInException,
Checkout\Cart\CartException,
Checkout\Customer\CustomerEntity,
PlatformRequest,
System\SalesChannel\SalesChannelContext
@@ -133,14 +133,14 @@ class AccountOrderController extends StorefrontController
* Helper to retrieve the currently logged-in customer.
*
* @return CustomerEntity
* @throws CustomerNotLoggedInException
* @throws CartException
*/
protected function getLoggedInCustomer(): CustomerEntity
{
$request = $this->requestStack->getCurrentRequest();
if (!$request) {
throw new CustomerNotLoggedInException();
throw CartException::customerNotLoggedIn();
}
/** @var SalesChannelContext|null $context */
@@ -150,6 +150,6 @@ class AccountOrderController extends StorefrontController
return $context->getCustomer();
}
throw new CustomerNotLoggedInException();
throw CartException::customerNotLoggedIn();
}
}
+1 -1
View File
@@ -26,7 +26,7 @@ class Analytics {
self::SHOP_SYSTEM => 'shopware',
self::SHOP_SYSTEM_VERSION => '6',
self::SHOP_SYSTEM_AND_VERSION => 'shopware-6',
self::PLUGIN_SYSTEM_VERSION => '7.3.0',
self::PLUGIN_SYSTEM_VERSION => '7.3.1',
];
}
+6 -6
View File
@@ -197,7 +197,7 @@ class TransactionPayload extends AbstractPayload
'merchant_reference' => $this->fixLength($this->order->getOrderNumber(), 100),
'meta_data' => [
self::VRPAYMENT_METADATA_ORDER_ID => $this->order->getId(),
self::VRPAYMENT_METADATA_ORDER_TRANSACTION_ID => $this->order->getTransactions()->first()->getId(),
self::VRPAYMENT_METADATA_ORDER_TRANSACTION_ID => $this->transaction->getOrderTransactionId(),
self::VRPAYMENT_METADATA_SALES_CHANNEL_ID => $this->salesChannelContext->getSalesChannel()->getId(),
self::VRPAYMENT_METADATA_CUSTOMER_NAME => $customerName,
],
@@ -378,7 +378,7 @@ class TransactionPayload extends AbstractPayload
$rate = $calculatedTax->getTaxRate();
$amount = $this->calculateDiscountAmount($calculatedTax);
$lineItems[] = $this->createDiscountLineItem($discountName, $amount, $rate);
$lineItems[] = $this->createDiscountLineItem($discountName, $amount, $rate, $discount->getId());
}
} else {
$taxRules = $calculatedPrice->getTaxRules();
@@ -387,12 +387,12 @@ class TransactionPayload extends AbstractPayload
foreach ($taxRules as $taxRule) {
$rate = $taxRule->getTaxRate();
$amount = $calculatedPrice->getTotalPrice();
$lineItems[] = $this->createDiscountLineItem($discountName, $amount, $rate);
$lineItems[] = $this->createDiscountLineItem($discountName, $amount, $rate, $discount->getId());
}
} else {
$rate = $this->getDefaultTaxRate();
$amount = $calculatedPrice->getTotalPrice();
$lineItems[] = $this->createDiscountLineItem($discountName, $amount, $rate);
$lineItems[] = $this->createDiscountLineItem($discountName, $amount, $rate, $discount->getId());
}
}
}
@@ -403,7 +403,7 @@ class TransactionPayload extends AbstractPayload
* @param float $rate
* @return LineItemCreate
*/
private function createDiscountLineItem(string $discountName, float $amount, float $rate): LineItemCreate
private function createDiscountLineItem(string $discountName, float $amount, float $rate, string $discountId): LineItemCreate
{
$lineItem = new LineItemCreate();
@@ -422,7 +422,7 @@ class TransactionPayload extends AbstractPayload
->setShippingRequired(false)
->setSku($discountSkuName, 200)
->setType(LineItemType::DISCOUNT)
->setUniqueId('coupon-' . $discountSkuName);
->setUniqueId('coupon-' . $discountSkuName . '-' . $discountId);
$taxRate = new TaxCreate([
'title' => 'Discount Tax: ' . $rate,