Bitrixi kohaletoimetamine. Automatiseeritud kohaletoimetamise teenused Bitrix v14. Täiendavad maksepiirangud

Oleme läbinud uue kassakomponendi installimise. Ta testis projekti mitu päeva ja oli aeg ära kasutada võimalusi, mille nimel tasus uuele 1C-Bitrixi platvormile üle minna.

Automaatne vaikimisi linna asendamine

See näide on kasulik nii väikeste piirkondlike kaupluste kui ka suurte projektide jaoks.

Tarnepiirkond on tellimisprotsessi esimene põhielement. Oletame, et peame kasutama nime "Kaliningrad" automaatset asendamist, et suurendada konversiooni ja vähendada probleeme tellimuste esitamisega.

Nüüd, kui esimest korda sisse logite, näeb see välja järgmine:

Kliendid saavad loomulikult klõpsata nupul „Kaliningrad”, mille järel väli täidetakse, kuid paljud jätavad selle sammu lihtsalt vahele, mille tulemuseks on tõrge:

Selle probleemi tuvastas Metrica Webvisor. Loomulikult täidab klient pärast seda kõik õigesti, kuid jääk jääb alles, vaatamata sellele, et paljudes kauplustes on oluliseks kriteeriumiks järeletulemine (kuni 80% tellimustest) ja sel juhul linna õige täitmine. nimi pole kriitiline.

Määrame vaikelinna ja vaatame, kas asendus toimib. Liigume poe haldusosasse ja seejärel atribuutide seadetesse:

Ja määrake vaikekoht:

Nüüd esitame kontrollimiseks tellimuse:

Suurepärane, asukoht on täidetud ja kliendil tuleb lihtsalt klõpsata “Edasi”. Nüüd vormistatakse tellimus kliendile minimaalsete ebamugavustega ja me maksime konversiooni. Mis puutub suurtesse kauplustesse, siis saavad nad koguda statistikat teatud linnade tellimuste sageduse kohta ja teha kiirvalikunuppe, nagu ekraanipildil: “Kaliningrad”, “Zelenogradsk”, “Svetlogorsk”.

Vaikimisi saab määrata populaarseima linna, sest seda on alati lihtsam muuta või telefoni teel selgeks teha kui klienti kaotada.

Täiendavad maksepiirangud

Järgmine samm tellimuse vormistamisel on makseplokk. Üheks piirangu liigiks võib olla sularahas maksmise keeld kulleriga kohaletoimetamisel. Sellest võib kasu olla juhtudel, kui naised töötavad karjäärides ja kelle tervisega nad suuri summasid vedades riskida ei taha.

Kehtestame teatud kohaletoimetamisteenuste ja tšeki maksimaalse summaga seotud piirangu. Selleks minge haldusliidese vahekaardile "Piirangud" konkreetse makseviisi jaoks:

Sel juhul peate tegema kaks sularahamaksesüsteemi:

  • ühes piirame äravõtupunkti kasutamist, kuid ilma hinnapiiranguteta,
  • ja teises piirdume kullerteenustega ja lisame summale limiidi.
Esmalt määrame hinnapiirangu:

Nüüd tarnepiirangud:

Selle tulemusena saame järgmise:

Kontrollime alla 10 000 rubla väärtuses kaubaga tellimuse täitmist ja kulleriga kohaletoimetamist:

Kõik on korras, nõutud makse olemas, tellimus saab vormistada.

Vaatame üle 10 000 rubla väärtuses kaupu:

Suurepärane, sularahas tasumist ei ole, saab maksega tellimuse esitada ka muul viisil, ilma kullerite ja rahaga riskimata.

Piirangute kehtestamisel ei näe kliendid “keelatud” makseviise ega lähe seetõttu tülli operaatoritega, kes muidu peaksid pidevalt selgitama, miks teie ettevõte tehtud tellimust kohale ei too.

Täiendavad kohaletoimetamise teenused

Meilt on sageli palutud pakkuda võimalust luua tarnetel vajalikke teenuseid. Seda on uuel platvormil rakendatud. Lisateenuste eeliseks on keskmise tellimuse arve suurenemine.

Ava kohaletoimetamise seaded:

Liidesesse on ilmunud eraldi vahekaart lisateenustega, mis kuvatakse tarneplokis. Toetatakse kolme tüüpi teenuseid:

  • Teenuste loend. Kliendil palutakse valida teenuste loendist üksus. Vaikimisi valitakse esimene toode, nii et kui te ei pea hinda tõstma, peaks loendis esimene teenus olema nullhinnaga.

Kvantitatiivne teenindus. Teenus luuakse ühikuhinnaga ja klient saab määrata, kui palju kogust ta vajab.

Üksikteenus. Sõltumatu teenus, mis kuvatakse märkeruuduna. Vaikimisi ei rakendata, klient peab iseseisvalt valima vajaliku.

Vaatame, kuidas need reeglid on konfigureeritud:

Igat tüüpi teenuste seaded on väga sarnased: põhielemente juhivad kaks plokki. Kõigepealt peate määrama teenuse nime ja kirjelduse. Seejärel määrake, kes saavad teenust kasutada:

  • Haldur – teenust kuvatakse haldusliideses.
  • Klient – ​​teenust kuvatakse tellimise ajal saidi avalikus osas.
Nii näeb teenuse lisamine haldusliideses välja tellimuse loomisel või muudatuste tegemisel:

Dünaamiline "isikuandmete sisestamine"

Tarned on lõppenud, nüüd saab tellimuse vormistamisel liikuda edasi ühe olulisema elemendi juurde – kasutajalt tarnimiseks või saatmiseks andmete küsimine. Eelmises komponendis küsiti kliendilt sama väljade komplekti. Ta pidi valima, millised väljad täita, mis oli mõnevõrra ebamugav.

Uus kassakomponent saab taotleda erinevaid väljade komplekte. Enamasti vähendavad poeomanikud järeletulemise ajal sisestatava teabe hulka. Võib-olla sel juhul piisab, kui me teame:

  • Telefon.
  • Meil. Selle üksuse saab ka eemaldada, kuid mõnikord soovite klienti "hellitada" uudiskirjadega uutest toodetest.
Liigume haldusjaotisesse "Tellimuse atribuudid" -> "Atribuutide loend" ja valige aadressi atribuut, mida soovite muuta:

Linkime ainult need „Kohaletoimetamise teenused”, mis peaksid seda välja kuvama. Seejärel läheme avalikku sektsiooni ja proovime tellimust esitada. Valime järeletulemise ja vaatame, et pood ei küsi meilt tarneaadressi.

See on kasulik ja teretulnud funktsioon. Peab ju tunnistama, et pole eriti meeldiv vastata klientide küsimustele: "Milleks on teil minu aadressi vaja, kui lähen tellimusele ise järele?" Nüüd pole teil vaja seda teha.

Tellimuse kättesaamise punkt

Lõpetuseks räägin muudatustest valikuplokis “Tellimise pealevõtmise punktid”. Eelmises versioonis olid peamiseks etteheiteks probleemid suure hulga pealevõtupunktide kuvamisega, väike kaart ja automaatse pealevõtmispunkti valiku puudumine (kui oli näiteks ainult üks).

Komponendi uues versioonis on lisatud seaded tellimuse vastuvõtmispunkti kuvamiseks. Kui see on linnas ainuke, siis näitame kohe kokkuvarisenud plokki ja kuvame kõik selle andmed koos pildiga või näitame plokki laiendatult. Esimesel juhul peate kaardi kuvamiseks sisestama ploki ja teisel juhul kuvatakse kaart kohe.

Väljundprobleemi lahendamine veebipoe Bitrix v14 automatiseeritud kohaletoimetamise teenused Yandex.Marketis tellimuse esitamisel.

See on see, millest me räägime, kuid selgub, et seda pole tehtud, töötavad ainult kohandatud teenused, parandame selle täna.
Testin siin Yandex.Marketi paneelil tellimuse esitamist, ostjale näidatakse sama asja, kui ta esitab Yandex.Marketis tellimuse.

Automatiseeritud teenuste valimine

Kõigepealt peame mooduli seadistustesse lisama automatiseeritud kohaletoimetamise teenused Online pood Peatükis Ostlemine turul

Sest vaikimisi neid pole ja me ei saa enam veebipoe moodulit uuendada otse moodulis, sest... minu puhul, kui värskendate poodi, lakkab kõik kliendi jaoks töötamast, mis teie puhul ei tea, mida teha, mõelge sellele, uues Bitrix v16 poes võib-olla ka see ei tööta.

Seadistused on määratud faili halduslehel
/bitrix/modules/sale/admin/ymarket.php

Kohandatud teenused on seal kuni Korja üles, ja allpool olen kuvanud automatiseeritud kohaletoimetamise teenused, millel kõigil on näiteks väärtus Mail, minu puhul oli vaja ainult posti, kui vajate midagi muud, pole seda raske muuta, sest põhimõte on selge, kus ja mida teha, kuid kuvatakse kõik automatiseeritud teenused, võib-olla need töötavad, ma pole seda lihtsalt kontrollinud.

Niisiis leiame, kus failis moodustatakse kohandatud teenuste massiiv $arDeliveryList ja lisame sellele automatiseeritud teenused

$arDeliveryFilter = array(
"LID" => $arTab["SITE_ID"],
"AKTIIVNE" => "Y"
);

//STAATILINE TARNE
$dbDeliveryList = CSaleDelivery::GetList(
array("NAME" => "ASC"),
$arDeliveryFilter,
vale,
vale,
array("ID", "NAME")
);

$arDeliveryList=massiiv();
while ($arDelivery = $dbDeliveryList->Fetch())
$arDeliveryList[$arDelivery["ID"]] = $arDelivery["NAME"];

//AUTOMAATNE KOHALETOIMETAMINE
$dbRes = CSaleDeliveryHandler::GetList(
array("NAME" => "ASC"),
$arDeliveryFilter
);
while($tarne = $dbRes->Fetch())
{
$tarneId = ($tarne["ID"] ? $tarne["ID"] : $tarne["SID"]);
$arDeliveryList[ $deliveryId ] = $tarne["NAME"];
}


Järgmiseks leiame kohaletoimetamise väljundploki ja lisame nimekirja posti valiku, minu puhul kommenteeriti see välja, suure tõenäosusega on teil sama asi.

Selline näeb välja valmis valik, mis kuvab administraatori paneelil kohaletoimetamise teenuseid

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


Seadetega on kõik tehtud, jääb üle vaid skript, millele need saabuvad, lõplikult vormistada päringud Yandex.Marketilt, ütleb ta turule, milliseid tarneid ostjale näidata Yandex.Marketis tellimuse esitamisel.

Yandex.Marketi taotlused

Kõik päringud Yandex.Marketilt Bitrixile tulevad kõigepealt sellele failile, see sisaldab ainult teise faili ühendust
/bitrix/services/ymarket/index.php

Selles failis on Bitrixi API ise ühendatud Yandex.Marketi suhtlemiseks teie veebipoega
/bitrix/modules/sale/services/ymarket/index.php

Selles failis huvitab meid meetod, mis ulatub muudatusteks vajaliku failini, me ei muuda selles midagi
$result = $YMHandler->processRequest($requestObject, $method, $postData);

Ja siin on meie fail, milles töötab kogu Bitrixi ja Yandex.Marketi interaktsiooni loogika
/bitrix/modules/sale/general/ym_handler.php

Ma ei kirjutanud artiklit kohe, funktsionaalsust testiti mõnda aega ja vead parandati, isegi kui ma unustasin midagi öelda, lisasin failid, saate sellest aru.

Üldiselt, kui te pole varem oma veebisaidil selles failis muudatusi teinud, võite proovida kogu minu faili, välja arvatud tarned, selles pole midagi muutunud, kõik töötab.

Mis muutused siis olid?klassis CSaleYMHandler
1) Lisatud on muutuja, mis salvestab täielikku teavet ostukorvis olevate kaupade kohta, et arvutada kohaletoimetamine automatiseeritud kohaletoimetamise teenuste abil.
kaitstud $basketItems = array();

2) Muutis meetodit, mis kuulab turul olevat ostukorvi, saab kauba kohta infot (käru) ning tagastab tarneteenused ja makseviisid
kaitstud funktsiooni protsessCartRequest($arPostData)

3) Muutunud on turul oleva ostukorvis olevate kaupade kohta info saamise meetod (id, hind, kogus, kaal, mõõdud jne).
kaitstud funktsioon getItemCartInfo($arItem, $currency)

4) Muudetud on meetodit, mis saab infot ostja asukoha, talle kättesaadavate tarneteenuste kohta filtri abil, arvutab tarne ja näitab seda ostjale turul.
kaitstud funktsioon getDeliveryOptions($tarne, $hind, $kaal = 0, $arBasketItems = array())

Siin selles meetodis kohandatud ja automatiseeritud Bitrixi kohaletoimetamisteenused arvutatakse.

Pöörake tähelepanu siin!

Minu puhul asub pood Moskvas ja Moskva jaoks on kõik automatiseeritud kohaletoimetamise teenused keelatud, Moskvast pärit ostjale ei tohiks neid näidata, seal toimivad pealevedu ja kulleri kohaletoimetamine, see tingimus on koodis (lk 432):
if($locationTo == 2691) jätka;

5) Meetodit, mis lisab teie veebisaidile tellimuse, teatab turule "Kõik on korras" ja tagastab selle numbri Yandex.Marketile, on muudetud.
kaitstud funktsiooni protsessOrderAcceptRequest($arPostData)

Täpsemalt, rida 911, selles saame Tellimuse number, see on kas Tellimuse ID, või Tellimuse kood mille tellimuste nummerdamine on malli abil lubatud
$arResult["tellimus"]["id"] = $this->getOrderNumber($orderID);

6) Lisati meetod, mis tagastab Yandex.Marketile tellimuse numbri teie veebisaidil (tellimuse ID või tellimuse kood)
kaitstud funktsioon getOrderNumber($orderId)

Lisaks

Lisateavet üles laaditud saidi kohta asukohad 2.0, tegin seda eelmisel 2015. aastal, mäletan, et Yandex.Marketiga oli probleem, Bitrix otsis asukohti valesti ja Yandex.Market teatas veast, ma ei mäleta, kus ma seda tegin, lisasin faili ym_location.php arhiiv igaks juhuks Kui leiate, andke teada, lisan selle punkti artiklile.

Järeldus

Yandex.Marketis tellimust esitades näeb ostja sellel kujul tarnete loendit, mille teie pood tagastab.

Artiklis kasutatud failid on kõik jagatud kaustadesse, kust on lihtne leida millist faili.

Automaatsed tarneteenuse protsessorid võimaldavad teil programmiliselt rakendada suvalist tarnekulude arvutamise loogikat, mis põhinevad tellimuse parameetritel ja teie enda seadistustel. Arvutusalgoritmid võivad olla suvalised – püsikulu, päringud kaugveebiteenustele, arvutus oma andmetabelite alusel jne.

Käsitleja on järgmise struktuuriga klass või funktsioonide kogum:

meetod Kirjeldus
Käitleja kirjeldus Funktsioon, mis tagastab töötleja kirjelduse, meetodite nimed, töötlejaprofiilide loendi jne.
Käitleja seaded Funktsioon, mis tagastab töötleja seadete massiivi
Seadete töötlemine Funktsioonide komplekt, mis vastutab sätete ettevalmistamise eest andmebaasi sisestamiseks ja vastupidiseks teisendamiseks.
Ühilduvuse kontroll Meetod, mis kontrollib antud protsessori profiilide ühilduvust tellimusega.
Arvutusfunktsioon Meetod, mis arvutab protsessori seadistuste ja tellimuse parameetrite põhjal tarnekulud.

Kuna üksikute funktsioonide komplektiga töötamine on ebamugav, on soovitatav need ühendada klassiks (nimeruumiks). Sellele soovitusele tuginedes järgneb täiendav kirjeldus ning antud näide rakendatakse. Näites on käitleja "Courier Delivery" rakendatud klassina CDeliveryMySimple.

Käitleja kirjeldus

Käsitleja kirjeldus on meetod, mis tagastab järgmise struktuuriga assotsiatiivse massiivi:

Parameeter Kirjeldus
SID Käitleja kordumatu stringi identifikaator.
NIMI Käitleja nimi.
KIRJELDUS Käsitleja tekstikirjeldus
DESCRIPTION_INNER Käitleja sisemine kirjeldus, kuvatakse töötleja konfigureerimisel juhtpaneelil.
BASE_CURRENCY Käsitleja põhivaluuta ID
KÄSITLEJA Tee töötleja failini. Vajalik töötleja korrektseks automaatseks kopeerimiseks (pole veel rakendatud). Enamikul juhtudel piisab väärtusest __FILE__
GETCONFIG Selle meetodi nimi, mis tagastab validaatori sätete massiivi. Kui töötleja on realiseeritud klassina, on väärtuseks massiiv ("class_name", "method_name").
DB SEADED Meetodi nimi, mis vastutab töötleja sätete kontrollimise ja seadete massiivi salvestamise stringiks teisendamise eest. Kui töötleja on realiseeritud klassina, on väärtuseks massiiv ("class_name", "method_name"). Kui see meetod puudub, salvestatakse seadete massiiv andmebaasi jadavormingus.
DBGETSETTINGS Menetleja sätete stringi tagasi massiiviks teisendamise eest vastutava meetodi nimi. Kui töötleja on realiseeritud klassina, on väärtuseks massiiv ("class_name", "method_name").
VASTAVUS Töötlemisprofiilide ja tellimuse parameetritega ühilduvuse täiendava kontrollimise eest vastutava meetodi nimi. Kui meetod puudub, siis täiendavat kontrolli ei teostata. Kui töötleja on realiseeritud klassina, on väärtuseks massiiv ("class_name", "method_name").
kalkulaator Saatmiskulude arvutamise meetodi nimi. Kui töötleja on realiseeritud klassina, on väärtuseks massiiv ("class_name", "method_name").
PROFIILID Töötlemisprofiilide hulk. Peab sisaldama vähemalt ühte profiili. Vaadake allpool kirjelduse vormingut.

Profiili kirjeldus on järgmises vormingus massiiv:

"string_profiili_identifikaator" => array("pealkiri" => " profiili_nimi", "DESCRIPTION" => " profile_description", // kaalud on näidatud grammides "RESTRICTIONS_WEIGHT" => array( minimaalne_kaal, Kaalupiirang), // summad on näidatud töötleja baasvaluutas "RESTRICTIONS_SUM" => array( minimaalne_tellimuse_summa, maksimaalne_tellimuse_summa));

Kui massiiv RESTRICTIONS_WEIGHT või RESTRICTIONS_SUM sisaldab ühte elementi, peetakse seda minimaalseks väärtuseks. Kui piiranguid pole vaja, tuleb määrata array(0).

Funktsioon Init() ( return array(/* Põhikirjeldus */ "SID" => "lihtne", "NAME" => "Kohaletoimetamine kulleriga", "DESCRIPTION" => "", "DESCRIPTION_INNER" =>
" .", "BASE_CURRENCY" => COption::GetOptionString("müük", "vaikevaluuta", "RUB"), "HANDLER" => __FILE__, /* Käsitleja meetodid */ "DBGETSETTINGS" => array(" CDeliveryMySimple" , "GetSettings"), "DBSETSETTINGS" => array("CDeliveryMySimple", "SetSettings"), "GETCONFIG" => array("CDeliveryMySimple", "GetConfig"), "COMPABILITY" => array("CDeliveryMySimple" Ühilduvus"), "CALCULATOR" => array("CDeliveryMySimple", "Calculate"), /* Edastusprofiilide loend */ "PROFIILID" => array("simple" => array("TITLE" => " tarnimine") , "DESCRIPTION" => "Tarneaeg kuni 3 päeva", "RESTRICTIONS_WEIGHT" => array(0), "RESTRICTIONS_SUM" => array(0),),) )

Validaatori parameetrid

Elemendi GETCONFIG määratud meetod peab tagastama vormi elementide massiivi:

Array("CONFIG_GROUPS" => array(" grupi_id1" => "grupi_nimi1", "grupi_id2" => "rühma_nimi2", /* .................... */), "CONFIG" => array(" parameetri_identifikaator1" => array("pealkiri" => " parameetri_nimi1", "TYPE" => " parameetri_tüüp1", "DEFAULT" => " parameetri 1 vaikeväärtus", "GROUP" => " parameetri_rühma_identifikaator1", "VALUES" => array(" parameetri_väärtus1" => "nimi_väärtus1_parameeter1", "väärtus2_parameeter1" => "nimi_väärtus2_parameeter1", /* ....................... */)), /* ........................ */))

Klahviga "CONFIG_GROUPS" massiivielemendis kirjeldatud parameetrite rühmad kuvatakse sellele rühmale määratud parameetreid sisaldavate töötleja parameetrite redigeerimise vormis eraldi vahekaartidena. "CONFIG" võtmega massiivi element määrab parameetrite loendi. Parameetri tüüp võib võtta ühe järgmistest väärtustest:

  • STRING- tekstisisestusväli
  • PAROOL- parooli sisestamise väli
  • KONTROLL- "märkeruudu" tüüpi element väärtusega "Y"
  • RAADIO
  • RIPPUMINE- valikute komplekt ripploendi kujul
  • MITMEVALIK- valikute komplekt valikvastustega loendi kujul
  • RAADIO- valikute komplekt raadionuppude kujul

Parameetritüüpide puhul tähendab valik mitme väärtuse vahel ( RIPPUMINE, MITMEVALIK Ja RAADIO) väärtuste loendit täpsustab kirjeldava massiivi element võtmega "VALUES". Muude parameetritüüpide puhul seda elementi ignoreeritakse.

Funktsioon GetConfig() ( $arConfig = array("CONFIG_GROUPS" => array("all" => "Tarnekulu",), "CONFIG" => array(),); // töötleja parameetrid on sel juhul kuluväärtused kohaletoimetamine erinevatesse asukoharühmadesse // selleks loome rühmade loendi alusel parameetrite loendi $dbLocationGroups = CSaleLocationGroup::GetList( while ($arLocationGroup = $dbLocationGroups->Fetch()) ( $arConfig[); "CONFIG"][" price_".$arLocationGroup["ID"]] = array("TYPE" => "STRING", "DEFAULT" => "", "TITLE" => "Rühma "\" kohaletoimetamise kulu " .$arLocationGroup[" NAME"]."\" " .(".COption::GetOptionString("müük", "default_currency", "RUB").")", "GROUP" => "kõik") ) tagastab $arConfig;

Töötlemise parameetrid

Käsitleja parameetrite töötlemiseks on vaja kahte meetodit, mis on kirjelduses määratud parameetritega DBSETSETTINGS ja DBGETSETTINGS. Esimene neist saab sisendiks vormi "parameetrite väärtuste massiivi" parameetri_identifikaator" => "parameetri_väärtus" ja peaksid tagastama nende stringi esituse. Teine on teha pöördteisendus. Mõlemad meetodid võivad teha ka suvalisi manipuleerimisi parameetrite väärtustega.

Funktsioon SetSettings($arSettings) ( // Kontrollige väärtuste väärtuste loendit. Eemaldage loendist tühjad väärtused. foreach ($arSettings kui $key => $value) (if (strlen($value) > 0) $arSettings[$key] = doubleval($value) else unset($arSettings[$key] // tagastab väärtused serialiseeritud massiivina, lihtsama seadistuste loendi korral). meetodeid saab kasutada funktsiooni GetSettings($strSettings) ( // tagastab deserialiseeritud seadete massiivi return unserialize($strSettings); )

Ühilduvuse kontroll

Protsessori profiilide ühilduvust tellimusega kontrollitakse kirjelduses parameetriga "COMPABILITY" määratud meetodil. See meetod võtab sisendiks 2 parameetrit – järjestuse kirjeldava massiivi ja töötleja sätete massiivi. Meetodi vastus eeldab massiivi, mis sisaldab antud tellimuse jaoks sobivate tarneprofiilide identifikaatoreid. Profiili seadetes väärtustega "RESTRICTIONS_WEIGHT" ja "RESTRICTIONS_SUM" määratud kontroll tehakse väljaspool käitlejat ja see pole siin vajalik. Sisendina aktsepteeritavate andmete vorming on järgmine:

Esimene parameeter - tellimuse teave - on järgmiste võtmetega massiiv:

Teine parameeter on töötlejas võtmega "CONFIG" elemendi poolt määratud massiivi väärtus, mille igale elemendile lisatakse "VALUE" võtmega parameetri väärtus .

Vaadeldavas näites on ainsaks ühilduvuse tingimuseks tarnekulu väärtuse olemasolu töötleja sätetes vähemalt ühe asukoharühma jaoks, mis sisaldab tellimuses edastatud asukohta.

// tutvustab utiliidi meetodit, mis määrab asukoharühma ja tagastab selle rühma maksumuse. function __GetLocationPrice($LOCATION_ID, $arConfig) ( // hankige läbitud asukoha rühmade loend $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"); // в противном случае вернем массив, содержащий идентфиикатор единственного профиля доставки } !}

Käitleja

Peamine tarnekulude arvutamise meetod saab järgmised sisendparameetrid:

  • tarneprofiili identifikaator;
  • tarnekäsitleja seadete massiiv;
  • tellida kirjeldav massiiv;
  • praeguse arvutuse samm;
  • ajutised andmed, mis on üle kantud eelmisest arvutusetapist.

Käsitleja väljund peaks olema tarnekulu parameetrites määratud valuutas või järgmise struktuuriga massiiv:

Võti Kirjeldus
TULEMUS Vastuse ID. Võimalikud väärtused:
  • "Okei" - saatekulu on edukalt arvutatud;
  • "VIGA" - arvutusprotsessi käigus ilmnes viga;
  • "JÄRGMINE SAMM" - arvutamise jätkamiseks peate minema järgmise sammu juurde.
VÄÄRTUS Saatekulu väärtus parameetrites määratud valuutas. (TULEMUS = "OK")
TRANSIIT Tarneaeg päevades (TULEMUS = "OK"). Kui see puudub, siis kestust ei kuvata.
perioodAlates Automatiseeritud kohaletoimetamise teenuste tarneliinid. Alates määratud arvust päevadest. Vajalik tarneaegade edastamiseks Yandex.marketile. Kasutatakse oma kohaletoimetamisteenuste väljatöötamisel.
perioodKuni Automatiseeritud kohaletoimetamise teenuste tarneliinid. Kuni määratud päevade arvuni. Vajalik tarneaegade edastamiseks Yandex.marketile. Kasutatakse oma kohaletoimetamisteenuste väljatöötamisel.
TEKST Veatekst või järgmisele etapile üleminekuga kaasnev tekst (RESULT = ("VIGA"|"NEXT_STEP")).
TEMP Vaheandmeid sisaldav string edastati järgmisse etappi (RESULT = "NEXT_STEP").

Kirjeldatud näites ei ole mitmeetapiline protsess hõlmatud, seetõttu on arvutus lihtne.

Funktsioon Calculate($profile, $arConfig, $arOrder, $STEP, $TEMP = false) ( // kasuliku arvutusmeetod on defineeritud ülal, me peame lihtsalt selle tagastatava väärtuse väljundisse ümber suunama. return array("RESULT" => "OK", "VALUE" => CDeliveryMySimple::__GetLocationPrice($arOrder["LOCATION_TO"], $arConfig))

Käsitleja integreerimine

Automaatselt ühendatud käitlejafailide tee on seatud mooduli "Veebipood" seadetes. Vaikimisi tee on /bitrix/php_interface/include/sale_delivery/ Sellistel failidel peab olema eesliide tarne_, muidu neid ignoreeritakse. Kui süsteem tuvastab süsteemi failiga sama nimega faili, ühendatakse see süsteemi faili asemel. Automaatedastuse lubamine failis toimub, määrates kirjeldava meetodi sündmuse onSaleDeliveryHandlersBuildList käitlejaks.

Näide

Kõike eelnevat kokku võttes loome lihtsa tarnekäsitleja. Käsitleja klass asub failis /bitrix/php_interface/include/sale_delivery/delivery_mysimple.php

"simple", "NAME" => "Kohaletoimetamine kulleriga", "DESCRIPTION" => "", "DESCRIPTION_INNER" => "Lihtne käsitleja kulleriga kohaletoimetamiseks. " ." toimimiseks peab kohal olema vähemalt üks asukoharühm . Töötleja seadistamisel peate määrama iga asukoharühma jaoks " .fikseeritud kohaletoimetamise kulu. Et takistada ". grupi" töötlemises osalemist, jätke selle rühma kulu väli tühjaks. "
" ."" .Redigeeri asukoharühmi" . .", "BASE_CURRENCY" => COption::GetOptionString("müük", "default_currency", "RUB"), "HANDLER" => __FILE__, /* Käsitleja meetodid */ "DBGETSETTINGS" => array("CDeliveryMySimple", "GetSettings"), "DBSETSETTINGS" => array("CDeliveryMySimple", "SetSettings"), "GETCONFIG" => array("CDeliveryMySimple", "GetConfig"), "COMPABILITY" => array("CDeliveryMySimple", "Compability" "), "CALCULATOR" => array("CDeliveryMySimple", "Calculate"), /* Edastusprofiilide loend */ "PROFIILID" => array("simple" => array("TITLE" => "tarne", " DESCRIPTION" => "Tarneaeg kuni 3 päeva", "RESTRICTIONS_WEIGHT" => array(0), // piiranguid pole "RESTRICTIONS_SUM" => array(0), // piiranguid pole),) ) // käitleja seadete funktsioon GetConfig() ( $arConfig = array("CONFIG_GROUPS" => array("all" => "Tarnekulu",), "CONFIG" => array(),); // käitleja seaded on sel juhul kuluväärtuste kohaletoimetamine erinevatesse asukoharühmadesse // selleks loome rühmade loendi alusel seadete loendi $dbLocationGroups = CSaleLocationGroup::GetList(); while ($arLocationGroup = $dbLocationGroups->Fetch()) ( $arConfig["CONFIG"]["price_".$arLocationGroup["ID"]] = array("TYPE" => "STRING", "DEFAULT" = > "", "TITLE" => "Kohaletoimetamise kulu rühmale \"" .$arLocationGroup["NAME"].."\" " ."(".COption::GetOptionString("müük", "vaikevaluuta", " RUB ").")", "GROUP" => "all",); ) tagastab $arConfig; ) // seadistuste ettevalmistamine andmebaasi funktsiooni SetSettings($arSettings) sisestamiseks ( // Kontrollige kuluväärtuste loendit. Eemaldage loendist tühjad väärtused. foreach ($arSettings kui $key => $value) ( if (strlen($value) > 0) $arSettings[$key] = doubleval($value else unset($arSettings[$key]) // tagastab väärtused serialiseeritud massiivina; lihtsama seadete loendi puhul saab kasutada lihtsamaid meetodeid return serialize($arSettings ) // koostab andmebaasi funktsioonist GetSettings ($strSettings) saadud sätted ( // tagastab deserialiseeritud seadete massiivi return unserialize($). strSettings) // tutvustab teenindusmeetodit, mis määrab asukoharühma ja tagastab selle rühma väärtuse. function __GetLocationPrice($LOCATION_ID, $arConfig) ( // hankige läbitud asukoha rühmade loend $dbLocationGroups = CSaleLocationGroup::GetLocationList(array("LOCATION_ID" => $LOCATION_ID)); while ($arLocationGroup = $dbLocationGroups Fetch() ) ( if (massiivi_võti_exists("hind_". $arLocationGroup["LOCATION_GROUP_ID"], $arConfig) && strlen($arConfig["price_".$arLocationGroup["LOCATION_GROUP_ID"]]["VALUE"] > 0)) ( // kui on mittetühi kirje selle grupi seadete massiiv, tagastab selle väärtuse return $arConfig["price_".$arLocationGroup["LOCATION_GROUP_ID"]]["VALUE"] ) ) // kui sobivaid kirjeid ei leita, tagastab false tagastab vale; ) // ühilduvuse kontrollimise meetod on sel juhul peaaegu sarnane kulufunktsiooni Compability($arOrder, $arConfig) arvutamisega ( // kontrollige tarnekulude olemasolu $price = CDeliveryMySimple::__GetLocationPrice($arOrder["LOCATION_TO "], $arConfig); if ($price === false) return array(); // kui hinda ei leita, tagastage tühi massiiv - ükski profiil ei vasta muule return array("simple"); // muidu , tagastab massiivi, mis sisaldab ühe profiili tarnimise identifikaatorit ) // tegelikult kulufunktsiooni Calculate($profile, $arConfig, $arOrder, $STEP, $TEMP = false) arvutamine ( // kasuliku arvutusmeetod on määratletud. ülal, peame lihtsalt tagastatava väärtuse suunama väljundisse return array(" RESULT" => "OK", "VALUE" => CDeliveryMySimple::__GetLocationPrice($arOrder["LOCATION_TO"], $arConfig)); ) ) // määrake meetod CDeliveryMySimple::Init sündmuste käitlejaks AddEventHandler("sale" , "onSaleDeliveryHandlersBuildList", array("CDeliveryMySimple", "Init")); ?>

Post factum

Mõned viimased näpunäited:

  • Kui teie protsessor kasutab ressursimahukaid arvutusi, andmebaasikõnesid, päringuid kaugserveritele jne, kategooriliselt Soovitatav on kasutada üht või teist tulemuste vahemällu salvestamise võimalust, mis on realiseeritud nii, et tulemused jäävad meelde vähemalt nende parameetritega tellimuse puhul. See on vajalik seetõttu, et tellimuse esitamise ja töötlemise käigus võib mitu korda ette tulla töötlejale taotlust tellimuse maksumuse arvutamiseks. Kaasasolevad töötlejad kasutavad hallatud vahemällu salvestamise mehhanismi, mis on konfigureeritud võttes arvesse konkreetse kohaletoimetamisteenuse kuluarvestuse algoritmi eripära.
  • Süsteemihalduri kohandamiseks kopeerige lihtsalt selle fail (koos kaasnevate failidega, mis asuvad tavaliselt sama nimega kataloogis) kataloogi /bitrix/php_interface/include/sale_deivery/, säilitades nime. Sel juhul ühendub selle asemel süsteemne.

Konfiguratsioonifaili laadimine:

Ostukorvi vidina seadistamine:

    Oma Yandex.Delivery isiklikul kontol järgige lehe paremas ülanurgas olevat linki Seaded, seejärel minge vahekaardile Integreerimine → Vidinad.

    Ostukorvi vidinate plokis klõpsake nuppu Installi ja kopeerige vidina kood.

    Minge tagasi mooduli sätete juurde ja kleepige kood väljale Ostukorvi vidina kood.

Ärge unustage valida linna, kus teie ladu asub. Kui soovite tellimusi saata ühte lattu, lubage see valik Kasutage Yandex.Delivery ladu.

Saatja vaikeseaded

Põllul Saatja vaike-ID valige pood, kust tellimusi kõige sagedamini tarnitakse.

Toote mõõdud

Määrake kauba mõõtmed ja kaal. Määratud mõõtmed edastatakse Yandex.Deliveryle ja nende põhjal arvutatakse kohaletoimetamise maksumus.

Kui te ei tea, milliseid väärtusi selles plokis valida, võtke ühendust saidi administraatoriga.

Telli omadused

Vasakpoolses loendis on väljad, mida kasutaja tellimuse vormistamisel täidab. Parempoolses loendis valige sobivad tellimuse omadused. Kõigi atribuutide loend on lehel Kauplus → Telli omadused. Tellimuskaardil kasutatakse valitud omadusi.

Kui te ei tea, mida selles plokis valida, võtke ühendust saidi administraatoriga.

Tähelepanu. Kui määrate aadressi seaded automaatselt, kontrollige kindlasti, millised Uut malli kasutatakse mooduli "pood" uusimates versioonides."))\"> tellimismalli

mida teie saidil kasutatakse. Kui kasutate vana malli, märkige sobiv valik.

Tellimuse olekud

Vasakpoolne loend näitab tellimuse olekut Yandex.Delivery süsteemis. Parempoolsetel väljadel valige oma süsteemis sobivad väärtused.

Kui teie süsteemis pole Yandex.Delivery oleku jaoks olekut, jätke väli tühjaks.

Toote omadused

Valige atribuut, mis vastab tellimuse SKU-le. Kui te pole kindel, millist atribuuti valida, võtke ühendust saidi administraatoriga.

Komponentide sätted

Luba see suvand, et ostja näeks tellimuse esitamisel kohe ostukorvi vidinat, kui valib Yandex.Delivery. Ostja ei pea tellimuse vormistamisel lisatoiminguid tegema.

Näide

Kuidas saata tellimusi Yandex.Deliveryle

    Tellimuse saatmiseks saidile Yandex.Delivery: Minge oma veebisaidi lehele Administreerimine.

    → Kauplus → Tellimused

Klõpsake soovitud tellimuse ID-l ja seejärel nuppu Yandex.Delivery. Tellimuse esitamise aknas võib olla teade"Tellimuse andmed on muudetud, tarnekulud tuleb ümber arvutada" Muutke tarnevalikut ja valige uus valik.

Märge. Moodul ei saa saadetisi hallata – seda saab teha oma Yandex.Delivery isiklikul kontol.

Vidinate installimine

Saate oma veebisaidile installida geovidina või ostukorvi vidina.

1. samm. Looge saidil testleht

    Minge vahekaardile Veebisait ja klõpsake ülemisel paneelil nuppu Looge leht.

    Avanevas aknas valige suvandid Minge lehe redigeerimise juurde Ja Piira juurdepääsu lehele. Luba juurdepääs ainult administraatoritele.

    Midagi muud pole vaja täita – klõpsake nuppu Lõpeta.

2. samm: seadistage vidin

    Laiendage menüüd Kauplus → Yandexmarketlabi komponendid ja lohista Yandex.Delivery vidin vasakul asuvale tühjale väljale.

    Naaske mooduli sätete juurde ja kleepige kood vastavale väljale.

    Määrake ülejäänud sätted ja klõpsake nuppu Salvesta. Kui te pole kindel, milliseid väärtusi valida, võtke ühendust saidi administraatoriga.

3. samm. Lisage oma saidile vidin

Probleemi lahendamine

Moodul ei tööta

Kõigepealt veenduge, et teie sait vastab süsteeminõuetele. Seda saab teha lehel Minge oma veebisaidi lehele→ Seadistused → Tööriistad → Diagnostika → PHP sätted. Kuvatakse järgmised väärtused:

    Ülemises plokis - PHP versioon 5.3–7.0.

    Esimeses tabelis Server API real - Apache 2.0 või uuem.

    MySQL-i tabelis Kliendi API versiooni real - versioon 5.0 või uuem.

    CURL-i tabelis cURL-i tugireal - "lubatud".

Kui sait ei vasta nõuetele, võtke ühendust saidi hostiga.

Lisaks saate lehel käitada saidi kontrolli Minge oma veebisaidi lehele→ Seaded → Tööriistad → Süsteemi kontroll, vahekaartidel Konfiguratsiooni testimine Ja Juurdepääsu kontroll.

Mooduli installimisel kuvatakse tõrge "Yandex.Delivery service not found".

Lisage teenus käsitsi. Selle jaoks:

    Mine lehele Minge oma veebisaidi lehele→ Kauplus → Seaded → Kohaletoimetamisteenused.

    Klõpsake nuppu Lisa ja tehke valik Automatiseeritud kohaletoimetamise teenus.

    Vahekaardil Käitleja seaded Laiendage ripploendit Tarneteenus ja valige Yandex.Delivery.

Nõuanne. Kui teil ei õnnestunud probleemi lahendada, võtke ühendust oma Yandex.Delivery konto toega.

Tarneviiside puhul ei näe ostja Yandex.Delivery ega linki "Vali tarnevalik"

1. samm: kontrollige kohaletoimetamisteenuseid

    Mine lehele Minge oma veebisaidi lehele→ Kauplus → Kohaletoimetamise teenused ja kontrollige, kas lehel on Yandex.Delivery ja see on aktiivne.

    Klõpsake Yandex.Delivery ja veenduge, et avanevas aknas oleks vahekaart Piirangud tühi.

2. samm: kontrollige mooduli sätteid

Mine lehele Minge oma veebisaidi leheleToote sättedMooduli seaded→ Yandex.Delivery ja veenduge, et:

    kõik ploki seaded jagamise seaded on õigesti seatud;

    blokis Toote mõõdud kõik väärtused on antud.

3. samm: kontrollige oma vaikelinna

Kontrollige, kas kaupluse linn on seadetes määratud:

    Mine lehele Minge oma veebisaidi lehele→ Telli atribuudid → Omaduste loend.

    Iga "Asukoht" tüüpi kinnisvara puhul klõpsake kinnisvara numbril ja avanevas aknas määrake linn, kus asub teie peamine kauplus või ladu.

4. samm: lubage ühilduvusrežiim

Kui teie sait kasutab Uut malli kasutatakse mooduli “pood” uusimates versioonides.

"}}\">uus kassamall, lubage ühilduvusrežiim:

Nõuanne. Kui teil ei õnnestunud probleemi lahendada, võtke ühendust oma Yandex.Delivery konto toega.

Kasutaja Yandex.Delivery valimisel kohaletoimetamise maksumust ei näe

Nõuanne. Kui teil ei õnnestunud probleemi lahendada, võtke ühendust oma Yandex.Delivery konto toega.

Yandex.Delivery ei sisalda ostja andmeid

Kui tellimuse kaart sisaldab kõiki ostja andmeid, kuid Yandex.Delivery-le tellimuse saatmise vorm neid ei sisalda, kontrollige lehel tellimuse atribuutide seadeid Minge oma veebisaidi lehele→ Kauplus → Telli atribuudid → Omaduste loend.

"}}\">kassa mall :
  • Uus mall
  • Vana mall

Ükskõik kui palju sa hunti toidad, maitseb siga paremini

Bitrix: automatiseeritud kohaletoimetamisteenuse töötleja loomine

Bitrixil on kahte tüüpi kohaletoimetamisteenuseid: kohandatud ja automatiseeritud. Selles artiklis kirjeldatakse, kuidas luua automaatse kohaletoimetamise teenuse töötleja.

Mis see automatiseeritud töötleja on?

Kõik eelinstallitud töötlejad asuvad kaustas /bitrix/modules/sale/lang/ru/delivery/. Teie töötlejad peaksid asuma kaustas /bitrix/php_interface/include/sale_delivery/ (seda teed saab muuta veebipoe mooduli atribuutides).

Käsitleja on kindla struktuuri klass, millel on sündmuste edastamise töötleja ühendusstring onSaleDeliveryHandlersBuildList.

Tarnekäsitleja klassis peab olema mitmeid meetodeid, mille toimingute tüübid on kirjeldatud klassi meetodis Init.

1. Init – põhiväljad initsialiseeritakse.

2. DBGETSETTINGS - meetod parameetrite väärtuste lugemiseks.

3. DBSETSETTINGS - meetod parameetrite väärtuste seadmiseks.

4. GETCONFIG - seadete konfiguratsiooni määratlemine (neid saab jagada vahekaartideks).

5. ÜHENDAVUS - protsessori profiilide vastavuse kontrollimine tellimusega.

6. KALKULAATOR - tarnekulude arvestus.

1. SID – töötleja kordumatu stringi identifikaator.
2. NAME — töötleja nimi.
3. KIRJELDUS – Käitleja tekstiline kirjeldus
4. DESCRIPTION_INNER — töötleja sisemine kirjeldus, mis kuvatakse töötleja konfigureerimisel juhtpaneelil.
5. BASE_CURRENCY — käitleja baasvaluuta identifikaator
6. HANDLER — töötleja faili tee. Vajalik töötleja korrektseks automaatseks kopeerimiseks (pole veel rakendatud). Enamikul juhtudel piisab väärtusest __FILE__

Samuti tuleb täpsustada vähemalt üks tarneprofiil.

"Tavaline", // Tarneteenuse identifikaator "NAME" => "Kuller Krasnaja Presnja", "DESCRIPTION" => "Kirjeldus saidi klientidele", "DESCRIPTION_INNER" => "Kirjeldus saidi administraatoritele", "BASE_CURRENCY" = > "RUR", "HANDLER" => __FILE__, /* Defineerimismeetodid */ "DBGETSETTINGS" => array("CDeliveryPlain", "GetSettings"), "DBSETSETTINGS" => array("CDeliveryPlain", "SetSettings"), " GETCONFIG" => array("CDeliveryPlain", "GetConfig"), "COMPABILITY" => array("CDeliveryPlain", "ühilduvus"), "CALCULATOR" => array("CDeliveryPlain", "Calculate"), /* Nimekirja profiilid */ "PROFILES" => array("all" => array("TITLE" => "Piirangud puuduvad", "DESCRIPTION" => "Tarneprofiil ilma piiranguteta", "RESTRICTIONS_WEIGHT" => array(0 ) , "RESTRICTIONS_SUM" => massiiv(0),),)); ) /* Seadistamise parameetrid */ funktsioon SetSettings($arSettings) ( foreach ($arSettings kui $key => $value) (if (strlen($value) > 0) $arSettings[$key] = doubleval($value ); else unset($arSettings[$key]) return serialize($arSettings) */ Funktsioon GetSettings($strSettings) ( return unserialize($strSettings); GetConfig() ( $arConfig = array("CONFIG_GROUPS" => array("all" => "Parameters",), "CONFIG" => array("DELIVERY_PRICE" => array(// "TYPE" => "STRING" ", // "DEFAULT" => "200", // "TITLE" => "Tarnekulu", // "GROUP" => "all")),); tagasta $arConfig; ) /* Vastavuse kontroll tellimuse tarneprofiil */ funktsioon Ühilduvus($arOrder, $arConfig) ( return array("all"); ) /* Tarnekulu arvutamine*/ funktsioon Calculate($profile, $arConfig, $arOrder, $STEP, $TEMP = false ) ( // hankige ostukorvi maksumus // Kuvab praeguse kasutaja praeguse ostukorvi $arBasketItems = array(); $dbBasketItems = CSaleBasket::GetList(massiiv("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 ) /; / Printige massiiv, mis sisaldab praegust ostukorvi foreach ($arBasketItems as $num => $item) ( $TotalSumArr = $item["PRICE"]*$item["QUANTITY"]; ) // kõigi toodete summa, võttes arvesse kogus $Kogusumma = massiivi_summa($KogusummaArr); // olenevalt summast tee kohaletoimetamise juurdehindlus // 1500 kuni 5000 tarne 750 rubla if($TotalSum >= 1500 && $TotalSum<= 5000) $DeliveryCost = 750; elseif($TotalSum >= 5000) $ DeliveryCost = 0; return array("TULEMUS" => "OK", "VALUE" => $_SESSION["ORDER_DELIVERY_HIND"], "VALUE" => $DeliveryCost); ) ) AddEventHandler("müük", "onSaleDeliveryHandlersBuildList", array("CDeliveryPlain", "Init")); ?>

Käitleja sisaldab koodi, mis arvutab välja ostukorvi sisu ja pakub olenevalt hinnast erinevaid saatmiskulusid.