Bitrix-levering. Geautomatiseerde bezorgservices Bitrix v14. Aanvullende betalingsbeperkingen

We hebben het installatieproces van een nieuw betaalonderdeel doorlopen. Hij testte het project een aantal dagen en het werd tijd om te profiteren van de mogelijkheden waarvoor het de moeite waard was om over te stappen naar het nieuwe 1C-Bitrix-platform.

Automatische standaardplaatsvervanging

Dit voorbeeld is nuttig voor zowel kleine regionale winkels als grote projecten.

Het bezorggebied is het eerste van de belangrijkste elementen van het bestelproces. Laten we zeggen dat we automatische vervanging van de naam “Kaliningrad” moeten gebruiken om de conversie te vergroten en problemen bij het plaatsen van bestellingen te verminderen.

Wanneer u nu voor de eerste keer inlogt, ziet het er zo uit:

Klanten kunnen natuurlijk op de knop "Kaliningrad" klikken, waarna het veld wordt ingevuld, maar velen slaan deze stap eenvoudigweg over, wat resulteert in een foutmelding:

Dit probleem werd geïdentificeerd door Metrica Webvisor. Uiteraard vult de klant hierna alles correct in, maar er blijft een residu achter, ondanks het feit dat afhalen in veel winkels een belangrijk criterium is (tot 80% van de bestellingen), en in dit geval het correct vullen van de stad naam is niet cruciaal.

Laten we de standaardstad instellen en kijken of de vervanging werkt. Laten we naar het administratieve gedeelte van de winkel gaan en vervolgens naar de eigendomsinstellingen:

En stel de standaardlocatie in:

Laten we nu een bestelling plaatsen om te controleren:

Mooi, de locatie is ingevuld en de klant hoeft alleen maar op “Volgende” te klikken. Nu wordt de bestelling met minimaal ongemak voor de klant geplaatst en maximaliseren we de conversie. Wat grote winkels betreft, ze kunnen statistieken verzamelen over de frequentie van bestellingen uit bepaalde steden en snelle selectieknoppen maken, zoals in de schermafbeelding: "Kaliningrad", "Zelenogradsk", "Svetlogorsk".

U kunt standaard de populairste stad instellen, omdat het altijd gemakkelijker is om deze telefonisch te wijzigen of op te helderen dan om een ​​klant te verliezen.

Aanvullende betalingsbeperkingen

De volgende stap bij het plaatsen van een bestelling is het betalingsblokkade. Eén vorm van beperking kan een verbod zijn op contante betaling bij bezorging per koerier. Dit kan nuttig zijn in gevallen waarin vrouwen in steengroeven werken en wier gezondheid ze niet willen riskeren bij het vervoeren van grote bedragen.

We zullen een beperking invoeren die gebonden is aan bepaalde bezorgdiensten en het maximale chequebedrag. Om dit te doen, gaat u naar de administratieve interface naar het tabblad “Beperkingen” voor een specifieke betaalmethode:

In dit geval moet u twee contante betalingssystemen gebruiken:

  • in één beperken we het gebruik van het afhaalpunt, maar zonder prijsbeperkingen,
  • en in het tweede geval zullen we ons beperken tot koeriersdiensten en een limiet aan het bedrag toevoegen.
Laten we eerst een prijslimiet instellen:

Nu leveringsbeperkingen:

Als resultaat krijgen we het volgende:

Laten we de uitvoering van een bestelling controleren met goederen ter waarde van minder dan 10.000 roebel en bezorging per koerier:

Alles is in orde, de benodigde betaling is aanwezig, de bestelling kan worden geplaatst.

Laten we eens kijken naar goederen ter waarde van meer dan 10.000 roebel:

Fijn, er is geen contante betaling mogelijk, u kunt op andere manieren een bestelling plaatsen met betaling, zonder risico voor koeriers en geld.

Wanneer er beperkingen worden ingevoerd, zien klanten geen “verboden” betaalmethoden en zullen ze dus geen ruzie maken met operators, die anders voortdurend zouden moeten uitleggen waarom uw bedrijf de geplaatste bestelling niet levert.

Extra bezorgdiensten

Vaak werden wij gevraagd om de mogelijkheid te bieden om bij leveringen de benodigde dienstverlening te creëren. Dit is geïmplementeerd in het nieuwe platform. Het voordeel van aanvullende diensten is dat de gemiddelde orderfactuur stijgt.

Ga naar bezorginstellingen:

In de interface is een apart tabblad verschenen met aanvullende services die in het leveringsblok worden weergegeven. Er worden drie soorten services ondersteund:

  • Lijst met diensten. De klant wordt gevraagd een item uit een lijst met services te selecteren. Standaard is het eerste item geselecteerd, dus als u de prijs niet hoeft te verhogen, moet de eerste service in de lijst een nulprijs hebben.

Kwantitatieve dienstverlening. Er wordt een dienst gecreëerd met een prijs per eenheid, en de klant kan opgeven hoeveel stuks hij nodig heeft.

Enkele dienst. Een onafhankelijke service, weergegeven als een selectievakje. De standaard wordt niet toegepast; de klant moet onafhankelijk degene selecteren die hij nodig heeft.

Laten we eens kijken hoe deze regels zijn geconfigureerd:

De instellingen voor alle soorten services lijken erg op elkaar: er zijn twee blokken die de belangrijkste elementen besturen. Allereerst moet u de naam en beschrijving van de service instellen. Geef vervolgens aan wie de dienst kan gebruiken:

  • Manager - de service wordt weergegeven in de administratieve interface.
  • Klant - de dienst wordt tijdens het bestellen weergegeven in het openbare gedeelte van de site.
Zo ziet het toevoegen van een dienst eruit in de administratieve interface bij het aanmaken van een bestelling of het aanbrengen van wijzigingen:

Dynamische “Invoer van persoonsgegevens”

De leveringen zijn voltooid, nu kunt u doorgaan met een van de belangrijkste elementen bij het plaatsen van een bestelling: het opvragen van gegevens bij de gebruiker voor levering of verzending. In het vorige onderdeel werd aan de klant dezelfde set velden gevraagd. Hij moest kiezen welke velden hij moest invullen, wat enigszins lastig was.

De nieuwe betaalcomponent kan verschillende sets velden opvragen. Vaker wel dan niet verminderen winkeleigenaren de hoeveelheid informatie die moet worden ingevoerd tijdens het ophalen. Misschien is het in dit geval voldoende dat we weten:

  • Telefoon.
  • E-mail. Dit item kan ook verwijderd worden, maar soms wil je de klant “verwennen” met nieuwsbrieven over nieuwe producten.
Laten we naar het administratieve gedeelte “Ordereigenschappen” -> “Lijst met eigendommen” gaan en de adreseigenschap selecteren die u wilt wijzigen:

We zullen alleen die “Bezorgservices” koppelen die dit veld moeten weergeven. Vervolgens gaan we naar het openbare gedeelte en proberen een bestelling te plaatsen. Wij kiezen voor afhalen en zien dat de winkel ons niet om een ​​afleveradres vraagt.

Dit is een nuttige en welkome functionaliteit. Je moet immers toegeven dat het niet zo prettig is om klantvragen te beantwoorden: “Waarom heb je mijn adres nodig als ik de bestelling zelf ga ophalen?” Nu hoeft u dit niet te doen.

Afhaalpunt voor bestellingen

Tenslotte wil ik het nog even hebben over de wijzigingen in het keuzeblok “Bestelafhaalpunten”. In de vorige versie waren de belangrijkste klachten problemen met het weergeven van een groot aantal ophaalpunten, een kleine kaart en het ontbreken van automatische selectie van een ophaalpunt (als er bijvoorbeeld maar één was).

De nieuwe versie van het onderdeel heeft instellingen toegevoegd voor het weergeven van het orderafhaalpunt. Als het de enige in een stad is, tonen we onmiddellijk het ingeklapte blok en geven we alle gegevens met een afbeelding weer, of tonen we het blok uitgevouwen. In het eerste geval moet u het blok invoeren om de kaart weer te geven, en in het tweede geval wordt de kaart onmiddellijk weergegeven.

Het uitvoerprobleem oplossen geautomatiseerde bezorgdiensten van de Bitrix v14 online winkel bij het plaatsen van een bestelling op Yandex.Market.

Dit is waar we het over hebben, maar het blijkt dat dit niet is gebeurd, alleen aangepaste services werken, we zullen het vandaag repareren.
Hier test ik het plaatsen van een bestelling in het Yandex.Market-paneel; de koper krijgt hetzelfde te zien wanneer hij een bestelling plaatst op Yandex.Market.

Automatische services selecteren

Eerst moeten we geautomatiseerde bezorgservices toevoegen aan de module-instellingen Online winkel In hoofdstuk Winkelen op de markt

Omdat standaard zijn ze er niet en kunnen we de online winkelmodule niet meer updaten, ik bewerk rechtstreeks in de module, omdat... in mijn geval, als je de winkel bijwerkt, stopt alles met werken voor de klant, wat ik in jouw geval niet weet wat ik moet doen, denk er eens over na, in de nieuwe Bitrix v16-winkel werkt dit misschien ook niet.

Instellingen worden opgegeven op de beheerpagina van het bestand
/bitrix/modules/sale/admin/ymarket.php

Aangepaste diensten zijn er tot en met Ophalen, en hieronder heb ik geautomatiseerde bezorgdiensten weergegeven, deze hebben bijvoorbeeld allemaal een waarde Mail In mijn geval was alleen post nodig, als je iets anders nodig hebt, zal het niet moeilijk zijn om dit aan te passen, omdat het principe zal duidelijk zijn waar en wat te doen, maar alle geautomatiseerde services zullen worden weergegeven, misschien zullen ze werken, ik heb het gewoon niet gecontroleerd.

We zoeken dus waar in het bestand de reeks aangepaste services $arDeliveryList wordt gevormd en voegen er geautomatiseerde services aan toe

$arDeliveryFilter = array(
"LID" => $arTab["SITE_ID"],
"ACTIEF" => "J"
);

//STATISCHE LEVERING
$dbDeliveryList = CSaleDelivery::GetList(
array("NAAM" => "ASC"),
$arBezorgfilter,
vals,
vals,
array("ID", "NAAM")
);

$arDeliveryList=array();
terwijl ($arDelivery = $dbDeliveryList->Fetch())
$arDeliveryList[$arDelivery["ID"]] = $arDelivery["NAAM"];

//AUTOMATISCHE LEVERING
$dbRes = CSaleDeliveryHandler::GetList(
array("NAAM" => "ASC"),
$arDeliveryFilter
);
while($delivery = $dbRes->Fetch())
{
$deliveryId = ($delivery["ID"] ? $delivery["ID"] : $delivery["SID"]);
$arDeliveryList[ $deliveryId ] = $delivery["NAAM"];
}


Vervolgens vinden we het leveringsuitvoerblok en voegen we een optie voor e-mail toe aan de lijst. In mijn geval is er commentaar op gegeven, je zult waarschijnlijk hetzelfde hebben.

Zo ziet de voltooide selectie eruit, met bezorgservices in het beheerderspaneel

$leveringsnaam):
$selected = isset($siteSetts["DELIVERIES"][$deliveryId]) ? $siteSetts["DELIVERIES"][$deliveryId] : "";
?>


Alles wordt gedaan met de instellingen, het enige dat overblijft is het finaliseren van het script waarin ze aankomen verzoeken van Yandex.Market, vertelt hij de markt welke leveringen aan de koper moeten worden getoond bij het plaatsen van een bestelling op Yandex.Market.

Yandex.Market-verzoeken

Alle verzoeken van Yandex.Market aan Bitrix komen als eerste in dit bestand terecht, het bevat alleen de verbinding met een ander bestand
/bitrix/services/ymarket/index.php

In dat bestand is de Bitrix API zelf verbonden voor de interactie van Yandex.Market met uw online winkel
/bitrix/modules/sale/services/ymarket/index.php

In dit bestand zijn we geïnteresseerd in de werkwijze die verder gaat naar het bestand dat we nodig hebben voor wijzigingen, hierin veranderen we niets
$result = $YMHandler->processRequest($requestObject, $method, $postData);

En hier is ons bestand, waarin alle logica van interactie tussen Bitrix en Yandex.Market ermee werkt
/bitrix/modules/sale/general/ym_handler.php

Ik heb het artikel niet meteen geschreven, de functionaliteit is een tijdje getest en fouten zijn gecorrigeerd, ook al vergat ik iets te zeggen, ik heb de bestanden bijgevoegd, je kunt er wel achter komen.

Als u nog niet eerder wijzigingen in dit bestand op uw website heeft aangebracht, kunt u over het algemeen mijn hele bestand uitproberen, behalve de leveringen, er is niets aan veranderd, alles werkt.

Wat waren de veranderingen?in de klasse CSaleYMHandler
1) Er is een variabele toegevoegd die volledige informatie over de artikelen in de winkelwagen opslaat voor het berekenen van de bezorging door geautomatiseerde bezorgdiensten.
beschermd $basketItems = array();

2) De methode gewijzigd die naar de winkelwagen op de markt luistert, informatie ontvangt over de goederen (winkelwagen) en bezorgdiensten en betaalmethoden retourneert
beschermde functie processCartRequest($arPostData)

3) De methode waarmee informatie wordt ontvangen over de goederen in het winkelwagentje op de markt (id, prijs, hoeveelheid, gewicht, afmetingen, enz.) is gewijzigd.
beveiligde functie getItemCartInfo($arItem, $currency)

4) De methode is gewijzigd, waarbij informatie wordt ontvangen over de locatie van de koper, de bezorgdiensten die voor hem beschikbaar zijn per filter, de bezorging wordt berekend en aan de koper op de markt wordt getoond.
beveiligde functie getDeliveryOptions($delivery, $price, $weight = 0, $arBasketItems = array())

Hier in deze methode op maat gemaakte en geautomatiseerde Bitrix-bezorgdiensten worden berekend.

Let hier op!

In mijn geval is de winkel gevestigd in Moskou en voor Moskou zijn alle geautomatiseerde bezorgdiensten uitgeschakeld, voor een koper uit Moskou mogen ze niet worden getoond, ophaal- en koeriersdiensten werken daar, deze voorwaarde staat in de code (p. 432):
if($locationTo == 2691) doorgaan;

5) De methode die een bestelling op uw website toevoegt, de markt vertelt “Alles is in orde” en het nummer terugstuurt naar Yandex.Market is gewijzigd
beschermde functieprocesOrderAcceptRequest($arPostData)

Concreet, lijn 911, daarin krijgen we Bestellingsnummer, het is ook Order ID, of Bestelcode wanneer ordernummering op sjabloon is ingeschakeld
$arResult["bestelling"]["id"] = $this->getOrderNumber($orderID);

6) Een methode toegevoegd die het bestelnummer op uw website retourneert naar Yandex.Market (bestel-ID of bestelcode)
beveiligde functie getOrderNumber($orderId)

Aanvullend

Meer op de site geüpload locaties 2.0, Ik deed dit afgelopen 2015, ik herinner me dat er een probleem was met Yandex.Market, Bitrix zocht verkeerd naar locaties en Yandex.Market rapporteerde een fout, ik weet niet meer waar ik het deed, ik heb het bestand ym_location.php toegevoegd aan het archief voor het geval dat. Als u het vindt, laat het me dan weten, ik zal dit punt aan het artikel toevoegen.

Conclusie

Bij het plaatsen van een bestelling op Yandex.Market ziet de koper een lijst met leveringen in dit formulier; uw winkel retourneert deze.

De bestanden die in het artikel worden gebruikt, zijn allemaal onderverdeeld in mappen, waarin u gemakkelijk kunt vinden welk bestand.

Met geautomatiseerde bezorgserviceprocessors kunt u programmatisch willekeurige logica implementeren voor het berekenen van bezorgkosten op basis van bestelparameters en uw eigen instellingen. Berekeningsalgoritmen kunnen willekeurig zijn: vaste kosten, verzoeken aan externe webservices, berekeningen op basis van eigen gegevenstabellen, enz.

Een handler is een klasse of reeks functies met de volgende structuur:

Methode Beschrijving
Beschrijving van de handler Een functie die een handlerbeschrijving, methodenamen, een lijst met handlerprofielen, enz. retourneert.
Instellingen voor handler Een functie die een array met handlerinstellingen retourneert
Verwerkingsinstellingen Een reeks functies die verantwoordelijk zijn voor het voorbereiden van instellingen voor invoer in de database en omgekeerde conversie.
Compatibiliteitscontrole Een methode die de compatibiliteit van de profielen van een bepaalde processor met een bestelling controleert.
Berekeningsfunctie Een methode die bezorgkosten berekent op basis van processorinstellingen en orderparameters.

Omdat het lastig is om met een reeks afzonderlijke functies te werken, wordt aanbevolen deze in een klasse (naamruimte) te combineren. Op basis van deze aanbeveling volgt een verdere beschrijving en wordt het gegeven voorbeeld geïmplementeerd. In het voorbeeld is de handler "Courier Delivery" geïmplementeerd als de klasse CDeliveryMySimple.

Beschrijving van de handler

De handlerbeschrijving is een methode die een associatieve array met de volgende structuur retourneert:

Parameter Beschrijving
SID Unieke string-ID van de handler.
NAAM Naam van de handler.
BESCHRIJVING Tekstbeschrijving van de handler
BESCHRIJVING_INNER Interne beschrijving van de handler, weergegeven bij het configureren van de handler in het Configuratiescherm.
BASISVALUTA Basisvaluta-ID van handler
HANDLER Pad naar het handlerbestand. Nodig voor het correct automatisch kopiëren van de handler (nog niet geïmplementeerd). In de overgrote meerderheid van de gevallen is de waarde __FILE__ voldoende
GETCONFIG De naam van de methode die een array met validatie-instellingen retourneert. Als de handler als klasse is geïmplementeerd, is de waarde een array ("class_name", "method_name").
DBSET-INSTELLINGEN De naam van de methode die verantwoordelijk is voor het controleren van de handlerinstellingen en het converteren van de instellingenarray naar een tekenreeks om op te slaan. Als de handler als klasse is geïmplementeerd, is de waarde een array ("class_name", "method_name"). Als deze methode ontbreekt, wordt de instellingenarray in geserialiseerde vorm in de database opgeslagen.
DBGESETTINGS De naam van de methode die verantwoordelijk is voor het terug converteren van de handlerinstellingenreeks naar een array. Als de handler als klasse is geïmplementeerd, is de waarde een array ("class_name", "method_name").
COMPABILITEIT De naam van de methode die verantwoordelijk is voor het extra controleren van de compatibiliteit van verwerkingsprofielen met orderparameters. Als de methode ontbreekt, wordt er geen extra controle uitgevoerd. Als de handler als klasse is geïmplementeerd, is de waarde een array ("class_name", "method_name").
REKENMACHINE De naam van de methode die de verzendkosten berekent. Als de handler als klasse is geïmplementeerd, is de waarde een array ("class_name", "method_name").
PROFIELEN Array van verwerkingsprofielen. Moet ten minste één profiel bevatten. Voor beschrijving formaat zie hieronder.

De profielbeschrijving is een array met de volgende indeling:

"string_profile_identifier" => array("TITEL" => " profielnaam", "BESCHRIJVING" => " profiel omschrijving", // gewichten worden aangegeven in grammen "RESTRICTIONS_WEIGHT" => array( minimaal_gewicht, Gewichtslimiet), // bedragen worden aangegeven in de basisvaluta van de handler "RESTRICTIONS_SUM" => array( minimum_bestelling_bedrag, maximum_bestelbedrag));

Als de array RESTRICTIONS_WEIGHT of RESTRICTIONS_SUM één element bevat, wordt dit beschouwd als de minimumwaarde. Als er geen beperkingen vereist zijn, moet array(0) worden opgegeven.

Functie Init() ( return array(/* Basisbeschrijving */ "SID" => "eenvoudig", "NAME" => "Bezorging per koerier", "DESCRIPTION" => "", "DESCRIPTION_INNER" =>
" .", "BASE_CURRENCY" => COption::GetOptionString("sale", "default_currency", "RUB"), "HANDLER" => __FILE__, /* Handlermethoden */ "DBGETSETTINGS" => array(" CDeliveryMySimple" , "GetSettings"), "DBSETSETTINGS" => array("CDeliveryMySimple", "SetSettings"), "GETCONFIG" => array("CDeliveryMySimple", "GetConfig"), "COMPABILITY" => array("CDeliveryMySimple" , " Compatibiliteit"), "CALCULATOR" => array("CDeliveryMySimple", "Calculate"), /* Lijst met leveringsprofielen */ "PROFILES" => array("simple" => array("TITLE" => " delivery" , "DESCRIPTION" => "Levertijd maximaal 3 dagen", "RESTRICTIONS_WEIGHT" => array(0), "RESTRICTIONS_SUM" => array(0),),)); )

Validatorparameters

De methode gespecificeerd door het GETCONFIG-element moet een array met elementen van de vorm retourneren:

Array("CONFIG_GROUPS" => array(" groep_id1" => "groepsnaam1", "groep_id2" => "groepsnaam2", /* ..................... */), "CONFIG" => array(" parameter_identifier1" => array("TITEL" => " parameternaam1", "TYPE" => " parameter_type1", "STANDAARD" => " standaard_waarde van parameter1", "GROEP" => " parameter_groepsidentificatie1", "WAARDEN" => array(" parameter_waarde1" => "naam_waarde1_parameter1", "waarde2_parameter1" => "naam_waarde2_parameter1", /* ....................... */)), /* ........................ */))

Groepen parameters die zijn beschreven in een array-element met de sleutel "CONFIG_GROUPS" worden weergegeven als afzonderlijke tabbladen in het formulier voor het bewerken van handlerparameters die parameters bevatten die aan deze groep zijn toegewezen. Een array-element met de "CONFIG"-sleutel specificeert een lijst met parameters. Het parametertype kan een van de volgende waarden aannemen:

  • SNAAR- tekstinvoerveld
  • WACHTWOORD- wachtwoordinvoerveld
  • CHECKBOX- een element van het type "checkbox" met de waarde "Y"
  • RADIO
  • LATEN VALLEN- een reeks opties in de vorm van een vervolgkeuzelijst
  • MEERKEUZE SELECTIE- een reeks opties in de vorm van een lijst met meerkeuzevragen
  • RADIO- een reeks opties in de vorm van keuzerondjes

Voor parametertypen impliceert dit een keuze uit verschillende waardeopties ( LATEN VALLEN, MEERKEUZE SELECTIE En RADIO) de lijst met waarden wordt gespecificeerd door een element van de beschrijvende array met de sleutel "VALUES". Voor andere parametertypen wordt dit element genegeerd.

Functie GetConfig() ( $arConfig = array("CONFIG_GROUPS" => array("all" => "Verzendkosten",), "CONFIG" => array(),); // handlerparameters zijn in dit geval kostenwaarden levering aan verschillende locatiegroepen. // maak hiervoor een lijst met parameters op basis van de lijst met groepen $dbLocationGroups = CSaleLocationGroup::GetList(); while ($arLocationGroup = $dbLocationGroups->Fetch()) ( $arConfig[ "CONFIG"][" price_".$arLocationGroup["ID"]] = array("TYPE" => "STRING", "DEFAULT" => "", "TITLE" => "Verzendkosten voor groep "\" " .$arLocationGroup[" NAAM"]."\" " .(".COption::GetOptionString("sale", "default_currency", "RUB").")", "GROUP" => "alles",) ; ) retourneer $arConfig; )

Verwerkingsparameters

Voor het verwerken van handlerparameters zijn twee methoden nodig, gespecificeerd in de beschrijving door de parameters DBSETSETTINGS en DBGETSETTINGS . De eerste ontvangt als invoer een reeks parameterwaarden van de vorm " parameter_identificatie" => "parameter_waarde" en zouden hun tekenreeksrepresentatie moeten retourneren. De tweede is om de omgekeerde conversie uit te voeren. Beide methoden kunnen ook willekeurige manipulaties uitvoeren met de parameterwaarden.

Functie SetSettings($arSettings) ( // Controleer de lijst met waardewaarden. Verwijder lege waarden uit de lijst. foreach ($arSettings as $key => $value) ( ​​if (strlen($value) > 0) $arSettings[$key] = doubleval($value); else unset($arSettings[$key]); ) // retourneer de waarden als een geserialiseerde array. // in het geval van een eenvoudigere lijst met instellingen, eenvoudiger serialisatiemethoden kunnen worden gebruikt. return serialize($arSettings); ) function GetSettings($strSettings) ( // retourneer de gedeserialiseerde reeks instellingen return unserialize($strSettings); )

Compatibiliteitscontrole

De compatibiliteit van processorprofielen met de bestelling wordt gecontroleerd met behulp van de methode die is gespecificeerd in de beschrijving door de parameter "COMPABILITY". Deze methode heeft twee parameters als invoer: een beschrijvende array van de bestelling en een array met handlerinstellingen. Het methodeantwoord verwacht een array met identificatiegegevens van leveringsprofielen die geschikt zijn voor een bepaalde bestelling. De controle gespecificeerd door de waarden "RESTRICTIONS_WEIGHT" en "RESTRICTIONS_SUM" in de profielinstellingen wordt buiten de handler uitgevoerd en is hier niet vereist. Het formaat van de gegevens die als invoer worden geaccepteerd, is als volgt:

De eerste parameter – orderinformatie – is een array met de volgende sleutels:

De tweede parameter is de waarde van de array gespecificeerd door het element met de "CONFIG"-sleutel in de handler, aan elk element waarvan de waarde van de parameter met de "VALUE"-sleutel wordt toegevoegd .

In het voorbeeld dat we overwegen, is de enige compatibiliteitsvoorwaarde de aanwezigheid in de afhandelingsinstellingen van een waarde voor bezorgkosten voor ten minste één van de locatiegroepen die de locatie bevat die in de bestelling is doorgegeven.

// introduceer een hulpprogrammamethode die een locatiegroep definieert en de kosten voor die groep retourneert. function __GetLocationPrice($LOCATION_ID, $arConfig) ( // haal een lijst met groepen op voor de doorgegeven locatie $dbLocationGroups = CSaleLocationGroup::GetLocationList(array("LOCATION_ID" => $LOCATION_ID)); while ($arLocationGroup = $dbLocationGroups->Fetch()) { if (array_key_exists("price_".$arLocationGroup["LOCATION_GROUP_ID"], $arConfig) && strlen($arConfig["price_".$arLocationGroup["LOCATION_GROUP_ID"]]["VALUE"] > 0)) { // если есть непустая запись в массиве настроек для данной группы, вернем ее значение return $arConfig["price_".$arLocationGroup["LOCATION_GROUP_ID"]]["VALUE"]; } } // если не найдено подходящих записей, вернем false return false; } // метод проверки совместимости в данном случае практически аналогичен рассчету стоимости function Compability($arOrder, $arConfig) { // проверим наличие стоимости доставки $price = CDeliveryMySimple::__GetLocationPrice($arOrder["LOCATION_TO"], $arConfig); if ($price === false) return array(); // если стоимость не найдено, вернем пустой массив - не подходит ни один профиль else return array("simple"); // в противном случае вернем массив, содержащий идентфиикатор единственного профиля доставки } !}

Behandelaar

De hoofdmethode voor het berekenen van bezorgkosten krijgt de volgende invoerparameters:

  • identificatie van leveringsprofiel;
  • array met instellingen voor bezorger;
  • bestel beschrijvende array;
  • huidige berekeningsstap;
  • tijdelijke gegevens overgedragen uit de vorige berekeningsstap.

De uitvoer van de handler moet de bezorgkosten zijn in de valuta die is opgegeven in de parameters, of een array met de volgende structuur:

Sleutel Beschrijving
RESULTAAT Reactie-ID. Mogelijke waarden:
  • "OK" - de bezorgkosten zijn succesvol berekend;
  • "FOUT" - er is een fout opgetreden tijdens het berekeningsproces;
  • "VOLGENDE STAP" - u moet naar de volgende stap gaan om door te gaan met de berekening.
WAARDE De waarde van de bezorgkosten in de valuta die is opgegeven in de parameters. (RESULTAAT = "OK")
DOORVOER Leveringsduur in dagen (RESULTAAT = "OK"). Bij afwezigheid wordt de duur niet weergegeven.
periode van Bezorglijnen van geautomatiseerde bezorgdiensten. Vanaf het opgegeven aantal dagen. Noodzakelijk voor het doorgeven van levertijden aan Yandex.market. Gebruikt bij het ontwikkelen van uw eigen bezorgdiensten.
periodeTo Bezorglijnen van geautomatiseerde bezorgdiensten. Tot het opgegeven aantal dagen. Noodzakelijk voor het doorgeven van levertijden aan Yandex.market. Gebruikt bij het ontwikkelen van uw eigen bezorgdiensten.
TEKST Fouttekst of begeleidende tekst bij de overgang naar de volgende stap (RESULT = ("ERROR"|"NEXT_STEP")).
TEMP Een tekenreeks met tussenliggende gegevens die worden doorgegeven aan de volgende stap (RESULT = "NEXT_STEP").

In het voorbeeld dat we beschrijven is er geen sprake van een uit meerdere stappen bestaand proces, daarom is de berekening eenvoudig.

Function Calculate($profile, $arConfig, $arOrder, $STEP, $TEMP = false) ( // de berekeningsmethode voor het hulpprogramma is hierboven gedefinieerd, we hoeven alleen de waarde die deze retourneert om te leiden naar de uitvoer. return array("RESULT" => "OK", "VALUE" => CDeliveryMySimple::__GetLocationPrice($arOrder["LOCATION_TO"], $arConfig)); )

Handler-integratie

Het pad naar automatisch gekoppelde handlerbestanden wordt ingesteld in de instellingen van de module "Online Store". Het standaardpad is /bitrix/php_interface/include/sale_delivery/ Dergelijke bestanden moeten een voorvoegsel hebben levering_, anders worden ze genegeerd. Als het systeem een ​​bestand detecteert dat dezelfde naam heeft als het systeembestand, wordt het verbonden in plaats van het systeembestand. Het inschakelen van automatische levering in een bestand wordt gedaan door de beschrijvende methode in te stellen als handler voor de onSaleDeliveryHandlersBuildList-gebeurtenis.

Voorbeeld

Laten we, als we al het bovenstaande samenvatten, een eenvoudige bezorgafhandeling maken. De handlerklasse bevindt zich in het bestand /bitrix/php_interface/include/sale_delivery/delivery_mysimple.php

"simple", "NAME" => "Bezorging per koerier", "DESCRIPTION" => "", "DESCRIPTION_INNER" => "Een eenvoudige afhandeling voor koeriersbezorging. Om te kunnen functioneren, " ." moet er ten minste één locatiegroep aanwezig zijn Bij het instellen van de afhandeling moet u voor elke locatiegroep ".vaste verzendkosten" opgeven. Om te voorkomen dat een ".groep deelneemt aan de verwerking, laat u het kostenveld voor deze groep leeg." "
" ."" .Locatiegroepen bewerken." .", "BASE_CURRENCY" => COption::GetOptionString("sale", "default_currency", "RUB"), "HANDLER" => __FILE__, /* Handlermethoden */ "DBGETSETTINGS" => array("CDeliveryMySimple", "GetSettings"), "DBSETSETTINGS" => array("CDeliveryMySimple", "SetSettings"), "GETCONFIG" => array("CDeliveryMySimple", "GetConfig"), "COMPABILITY" => array("CDeliveryMySimple", "Compabiliteit "), "CALCULATOR" => array("CDeliveryMySimple", "Calculate"), /* Lijst met leveringsprofielen */ "PROFILES" => array("simple" => array("TITLE" => "levering", " DESCRIPTION" => "Levertijd maximaal 3 dagen", "RESTRICTIONS_WEIGHT" => array(0), // geen beperkingen "RESTRICTIONS_SUM" => array(0), // geen beperkingen),)); ) // handler instellingen functie GetConfig() ( $arConfig = array("CONFIG_GROUPS" => array("all" => "Leveringskosten",), "CONFIG" => array(),); // handler instellingen zijn in dit geval de kostenwaarden levering aan verschillende locatiegroepen. // hiervoor zullen we een lijst met instellingen maken op basis van de lijst met groepen $dbLocationGroups = CSaleLocationGroup::GetList(); while ($arLocationGroup = $dbLocationGroups->Fetch()) ( $arConfig["CONFIG"]["price_".$arLocationGroup["ID"]] = array("TYPE" => "STRING", "DEFAULT" = > "", "TITLE" => "Verzendkosten voor groep \"" .$arLocationGroup["NAME"].."\" " ."(".COption::GetOptionString("sale", "default_currency", " RUB ").")", "GROUP" => "alles",); ) return $arConfig; ) // instellingen voorbereiden voor invoer in de databasefunctie SetSettings($arSettings) ( // Controleer de lijst met kostenwaarden. Verwijder lege waarden uit de lijst. foreach ($arSettings as $key => $value) ( ​​​if (strlen($value) > 0) $arSettings[$key] = doubleval($value); else unset($arSettings[$key]); ) // retourneer de waarden als een geserialiseerde array. // in in het geval van een eenvoudiger lijst met instellingen kunnen eenvoudigere methoden worden gebruikt serialisatie. return serialize($arSettings); ) // bereid instellingen voor die zijn verkregen uit de databasefunctie GetSettings($strSettings) ( // retourneer de gedeserialiseerde reeks instellingen return unserialize( $strSettings); ) // introduceer een servicemethode die de locatiegroep definieert en de waarde voor deze groep retourneert. function __GetLocationPrice($LOCATION_ID, $arConfig) ( // haal een lijst met groepen op voor de doorgegeven locatie $dbLocationGroups = CSaleLocationGroup::GetLocationList(array("LOCATION_ID" => $LOCATION_ID)); while ($arLocationGroup = $dbLocationGroups-> Fetch() ) ( if (array_key_exists("prijs_". $arLocationGroup["LOCATION_GROUP_ID"], $arConfig) && strlen($arConfig["price_".$arLocationGroup["LOCATION_GROUP_ID"]]["VALUE"] > 0)) ( // als er een niet-lege invoer is in de instellingenarray voor deze groep retourneert de waarde return $arConfig["price_".$arLocationGroup["LOCATION_GROUP_ID"]]["VALUE"]; ) ) // als er geen overeenkomende records worden gevonden, retourneert false return false; ) // de methode voor het controleren van de compatibiliteit is in dit geval vrijwel gelijk aan het berekenen van de kostenfunctie Compability($arOrder, $arConfig) ( // controleer op de aanwezigheid van bezorgkosten $price = CDeliveryMySimple::__GetLocationPrice($arOrder["LOCATION_TO "], $arConfig); if ($price === false) return array(); // als de prijs niet wordt gevonden, retourneer dan een lege array - geen profiel komt overeen met else return array("simple"); // anders , retourneer een array met de identificatie van een enkele profiellevering ) // feitelijk berekent u de kostenfunctie Calculate($profile, $arConfig, $arOrder, $STEP, $TEMP = false) ( // de berekeningsmethode voor het hulpprogramma is hierboven gedefinieerd , we hoeven alleen de waarde die het retourneert om te leiden naar de uitvoer. return array(" RESULT" => "OK", "VALUE" => CDeliveryMySimple::__GetLocationPrice($arOrder["LOCATION_TO"], $arConfig)); ) ) // stel de methode CDeliveryMySimple::Init in als een gebeurtenishandler AddEventHandler("sale" , "onSaleDeliveryHandlersBuildList", array("CDeliveryMySimple", "Init")); ?>

Post factum

Nog een paar laatste tips:

  • Als uw processor gebruik maakt van resource-intensieve berekeningen, databaseoproepen, verzoeken aan externe servers, enz., dan categorisch Het wordt aanbevolen om een ​​of andere optie voor het cachen van resultaten te gebruiken, die zo is geïmplementeerd dat de resultaten tenminste worden onthouden voor een bestelling met deze parameters. Dit is nodig omdat tijdens het plaatsen en verwerken van een bestelling meerdere keren een verzoek aan de verwerker kan voorkomen om de kosten van de bestelling te berekenen. De geleverde handlers maken gebruik van een beheerd cachingmechanisme, geconfigureerd rekening houdend met de specifieke kenmerken van het kostenberekeningsalgoritme van een specifieke bezorgservice.
  • Om de systeemhandler aan te passen, kopieert u gewoon het bestand (samen met de bijbehorende bestanden, meestal in een map met dezelfde naam) naar de map /bitrix/php_interface/include/sale_deivery/, waarbij de naam behouden blijft. In dit geval zal er verbinding worden gemaakt in plaats van systemisch.

Zo laadt u het configuratiebestand:

Zo stelt u een winkelwagenwidget in:

    Volg in uw persoonlijke Yandex.Delivery-account de link Instellingen in de rechterbovenhoek van de pagina en ga vervolgens naar het tabblad Integratie → Widgets.

    Klik in het winkelwagenwidgetblok op de knop Installeren en kopieer de widgetcode.

    Ga terug naar de module-instellingen en plak de code in het veld Winkelwagenwidgetcode.

Vergeet niet de stad te selecteren waar uw magazijn zich bevindt. Als u bestellingen naar één magazijn wilt verzenden, schakelt u deze optie in Gebruik het Yandex.Delivery-magazijn.

Standaardinstellingen afzender

In het veld Standaard afzender-ID selecteer de winkel van waaruit bestellingen het vaakst worden verzonden.

Productafmetingen

Stel de afmetingen en het gewicht van goederen in. De opgegeven afmetingen worden verzonden naar Yandex.Delivery en op basis daarvan worden de bezorgkosten berekend.

Als u niet weet welke waarden u in dit blok moet selecteren, neem dan contact op met uw sitebeheerder.

Bestel eigenschappen

In de lijst aan de linkerkant staan ​​de velden vermeld die de gebruiker invult bij het plaatsen van een bestelling. Selecteer in de lijst aan de rechterkant de juiste ordereigenschappen. Op de pagina vindt u een lijst met alle eigendommen Winkel → Besteleigenschappen. De geselecteerde eigenschappen worden gebruikt op de bestelkaart.

Als u niet weet wat u in dit blok moet selecteren, neem dan contact op met uw sitebeheerder.

Aandacht. Als u de adresinstellingen automatisch instelt, controleer dan welke Het nieuwe sjabloon wordt gebruikt in de nieuwste versies van de module “winkel”."))\"> bestelsjabloon gebruikt op uw site. Als u een oud sjabloon gebruikt, vinkt u de juiste optie aan.

Bestelstatussen

De lijst aan de linkerkant toont de status van de bestelling in het Yandex.Delivery-systeem. Selecteer in de velden aan de rechterkant de juiste waarden in uw systeem.

Als er geen status in uw systeem is voor de Yandex.Delivery-status, laat u het veld leeg.

Producteigenschappen

Selecteer de eigenschap die overeenkomt met de order-SKU. Als u niet zeker weet welke accommodatie u moet selecteren, neem dan contact op met uw sitebeheerder.

Component-instellingen

Schakel deze optie in zodat de koper bij het plaatsen van een bestelling de winkelwagenwidget onmiddellijk ziet wanneer hij Yandex.Delivery selecteert. De koper hoeft geen extra stappen te ondernemen bij het plaatsen van een bestelling.

Voorbeeld

Hoe bestellingen naar Yandex.Delivery te verzenden

Om een ​​bestelling naar Yandex.Delivery te sturen:

    Ga naar de pagina op uw website Administratie→ Winkel → Bestellingen.

    Klik op de ID van de gewenste bestelling en vervolgens op de knop Yandex.Delivery.

Er kan een bericht verschijnen in het venster voor het verzenden van de bestelling “Bestellingsgegevens zijn gewijzigd, bezorgkosten moeten opnieuw worden berekend”. Klik op de knop Wijzig bezorgoptie en selecteer een nieuwe optie.

Opmerking. De module heeft niet de mogelijkheid om zendingen te beheren - dit kunt u doen in uw persoonlijke Yandex.Delivery-account.

Widgets installeren

U kunt een geowidget of een winkelwagenwidget op uw website installeren.

Stap 1. Maak een testpagina op de site

    Ga naar het tabblad Website en klik in het bovenste paneel op de knop Maak een pagina.

    Selecteer opties in het venster dat wordt geopend Ga naar pagina bewerken En Beperk de toegang tot de pagina. Schakel toegang alleen voor beheerders in.

    U hoeft verder niets in te vullen: klik op de knop Voltooien.

Stap 2: Stel de widget in

    Vouw menu uit Winkel → Yandexmarketlab-componenten en sleep Yandex.Delivery-widget in het lege veld aan de linkerkant.

    Keer terug naar de module-instellingen en plak de code in het juiste veld.

    Stel de rest van de instellingen in en klik op de knop Opslaan. Als u niet zeker weet welke waarden u moet selecteren, neem dan contact op met uw sitebeheerder.

Stap 3. Voeg een widget toe aan uw site

Probleemoplossing

De module werkt niet

Zorg er allereerst voor dat uw site aan de systeemvereisten voldoet. Dit kan op de pagina Administratie→ Instellingen → Extra → Diagnostiek → PHP-instellingen. De volgende waarden moeten worden weergegeven:

    In het bovenste blok - PHP-versie 5.3–7.0.

    In de eerste tabel, in de Server API-regel: Apache 2.0 of hoger.

    In de MySQL-tabel, op de regel Client API-versie - versie 5.0 of hoger.

    In de cURL-tabel, in de cURL-ondersteuningsregel - "ingeschakeld".

Als de site niet aan alle vereisten voldoet, neem dan contact op met de host van de site.

Bovendien kunt u een sitescan op de pagina uitvoeren Administratie→ Instellingen → Extra → Systeem Check, op tabbladen Configuratie testen En Toegangscontrole.

Bij het installeren van de module verschijnt de fout "Yandex.Delivery-service niet gevonden".

Voeg de service handmatig toe. Voor deze:

    Ga naar pagina Administratie→ Winkel → Instellingen → Bezorgdiensten.

    Klik op de knop Toevoegen en selecteer een optie Geautomatiseerde bezorgservice.

    Op het tabblad Instellingen voor handler Vouw de vervolgkeuzelijst Bezorgservice uit en selecteer Yandex.Delivery.

Advies. Als u het probleem niet kunt oplossen, neem dan contact op met de ondersteuning in uw Yandex.Delivery-account.

Bij bezorgmethoden ziet de koper Yandex.Delivery of de link 'Selecteer bezorgoptie' niet

Stap 1: Controleer bezorgdiensten

    Ga naar pagina Administratie→ Winkel → Bezorgdiensten en controleer of de pagina Yandex.Delivery heeft en actief is.

    Klik op Yandex.Delivery en zorg ervoor dat het tabblad Beperkingen in het geopende venster leeg is.

Stap 2: Controleer de module-instellingen

Ga naar pagina AdministratieProductinstellingenModule-instellingen→ Yandex.Levering en zorg ervoor dat:

    alle instellingen in het blok instellingen delen zijn correct ingesteld;

    in het blok Productafmetingen alle waarden zijn gegeven.

Stap 3: Controleer uw standaardstad

Controleer of de winkelstad is ingesteld in de instellingen:

    Ga naar pagina Administratie→ Eigenschappen bestellen → Lijst met eigenschappen.

    Voor elke woning met het type “Locatie” klikt u op het pandnummer en geeft u in het geopende venster de stad op waarin uw hoofdwinkel of magazijn zich bevindt.

Stap 4: Schakel de compatibiliteitsmodus in

Als uw site gebruikmaakt van Het nieuwe sjabloon wordt gebruikt in de nieuwste versies van de module “winkel”.

"}}\">nieuw afrekensjabloon, schakel de compatibiliteitsmodus in:

Advies. Als u het probleem niet kunt oplossen, neem dan contact op met de ondersteuning in uw Yandex.Delivery-account.

De gebruiker ziet de bezorgkosten niet wanneer hij Yandex.Delivery selecteert

Advies. Als u het probleem niet kunt oplossen, neem dan contact op met de ondersteuning in uw Yandex.Delivery-account.

Yandex.Delivery bevat geen kopersgegevens

Als de bestelkaart alle gegevens van de koper bevat, maar het formulier voor het verzenden van een bestelling naar Yandex.Delivery bevat deze niet, controleer dan de instellingen voor de besteleigenschappen op de pagina Administratie→ Winkel → Eigenschappen bestellen → Lijst met eigenschappen.

"}}\">afrekensjabloon :
  • Nieuwe sjabloon
  • Oud sjabloon

Hoeveel je de wolf ook voedt, het varken zal beter smaken

Bitrix: het creëren van een geautomatiseerde bezorgservice-handler

Bitrix kent twee soorten bezorgdiensten: op maat en geautomatiseerd. In dit artikel wordt beschreven hoe u een geautomatiseerde bezorgservice-handler maakt.

Wat is deze geautomatiseerde afhandeling?

Alle vooraf geïnstalleerde handlers bevinden zich in de map /bitrix/modules/sale/lang/ru/delivery/. Uw handlers moeten zich in de map /bitrix/php_interface/include/sale_delivery/ bevinden (dit pad kan worden gewijzigd in de eigenschappen van de online winkelmodule).

De handler is een klasse van een specifieke structuur met een verbindingsreeks voor de handler voor gebeurtenislevering onSaleDeliveryHandlersBuildList.

De klasse delivery handler moet een aantal methoden hebben, waarvan de soorten acties worden beschreven in de Init-methode van de klasse.

1. Init - de hoofdvelden worden geïnitialiseerd.

2. DBGETSETTINGS - methode voor het lezen van parameterwaarden.

3. DBSETSETTINGS - methode voor het instellen van parameterwaarden.

4. GETCONFIG - definiëren van de instellingenconfiguratie (ze kunnen worden onderverdeeld in tabbladen).

5. COMPABILITEIT - controle van de compatibiliteit van processorprofielen met de bestelling.

6. CALCULATOR - berekening van bezorgkosten.

1. SID - Unieke string-ID van de handler.
2. NAAM — De naam van de afhandelaar.
3. BESCHRIJVING - Tekstbeschrijving van de handler
4. DESCRIPTION_INNER — Interne beschrijving van de handler, weergegeven bij het configureren van de handler in het configuratiescherm.
5. BASE_CURRENCY — Identificatie van de basisvaluta van de afhandelaar
6. HANDLER — Pad naar het handlerbestand. Nodig voor het correct automatisch kopiëren van de handler (nog niet geïmplementeerd). In de overgrote meerderheid van de gevallen is de waarde __FILE__ voldoende

Er moet er ook minstens één worden gespecificeerd leveringsprofiel.

"Plain", // Identificatie van de bezorgservice "NAME" => "Koerier Krasnaya Presnya", "DESCRIPTION" => "Beschrijving voor siteklanten", "DESCRIPTION_INNER" => "Beschrijving voor sitebeheerders", "BASE_CURRENCY" = > "RUR", "HANDLER" => __FILE__, /* Definitiemethoden */ "DBGETSETTINGS" => array("CDeliveryPlain", "GetSettings"), "DBSETSETTINGS" => array("CDeliveryPlain", "SetSettings"), " GETCONFIG" => array("CDeliveryPlain", "GetConfig"), "COMPABILITY" => array("CDeliveryPlain", "Compabiliteit"), "CALCULATOR" => array("CDeliveryPlain", "Berekenen"), /* Lijstprofielen */ "PROFILES" => array("all" => array("TITLE" => "Geen beperkingen", "DESCRIPTION" => "Leveringsprofiel zonder enige beperkingen", "RESTRICTIONS_WEIGHT" => array(0 ) , "RESTRICTIONS_SUM" => array(0),),)); ) /* Parameters instellen */ function SetSettings($arSettings) ( foreach ($arSettings as $key => $value) ( ​​if (strlen($value) > 0) $arSettings[$key] = doubleval($value ); else unset($arSettings[$key]); ) return serialize($arSettings); ) /* Vraag parameters aan */ function GetSettings($strSettings) ( return unserialize($strSettings); ) /* Vraag configuratie van bezorgservice aan * / function GetConfig() ( $arConfig = array("CONFIG_GROUPS" => array("all" => "Parameters",), "CONFIG" => array("DELIVERY_PRICE" => array(// "TYPE" => "STRING", // "DEFAULT" => "200", // "TITLE" => "Verzendkosten", // "GROUP" => "alles",)),); return $arConfig; ) /* Conformiteitscontrole leveringsprofiel bestelling */ function Compability($arOrder, $arConfig) ( return array("all"); ) /* Berekening bezorgkosten*/ function Calculate($profile, $arConfig, $arOrder, $STEP, $TEMP = false ) ( // haal de kosten van het winkelmandje op // Toon het huidige winkelmandje voor de huidige gebruiker $arBasketItems = array(); $dbBasketItems = CSaleBasket::GetList(array("NAME" => "ASC", "ID" => "ASC"), array("FUSER_ID" => CSaleBasket::GetBasketUserID(), "LID" => SITE_ID, "ORDER_ID" => "NULL"), false, false, array("ID", "CALLBACK_FUNC", "MODULE", "PRODUCT_ID", "QUANTITY", "DELAY", "CAN_BUY", "PRICE", "QUANTITY " ")); while ($arItems = $dbBasketItems->Fetch()) ( if (strlen($arItems["CALLBACK_FUNC"]) > 0) ( CSaleBasket::UpdatePrice($arItems["ID"], $arItems["CALLBACK_FUNC"] , $arItems["MODULE"], $arItems["PRODUCT_ID"], $arItems["QUANTITY"]); $arItems = CSaleBasket::GetByID($arItems["ID"]); ) $arBasketItems = $arItems; ) // Druk een array af met de huidige winkelwagen foreach ($arBasketItems as $num => $item) ( $TotalSumArr = $item["PRICE"]*$item["QUANTITY"]; ) // som van alle producten die worden gebruikt houd rekening met de hoeveelheid $TotalSum = array_sum($TotalSumArr); // afhankelijk van het bedrag, maak een toeslag voor bezorging // van 1500 tot 5000 bezorging 750 roebel if($TotalSum >= 1500 && $TotalSum<= 5000) $DeliveryCost = 750; elseif($TotalSum >= 5000) $Bezorgkosten = 0; return array("RESULT" => "OK", "VALUE" => $_SESSION["ORDER_DELIVERY_PRICE"], "VALUE" => $Bezorgkosten); ) ) AddEventHandler("sale", "onSaleDeliveryHandlersBuildList", array("CDeliveryPlain", "Init")); ?>

De handler bevat een code die de inhoud van de winkelwagen berekent en, afhankelijk van de prijs, verschillende verzendkosten aanbiedt.