Penghantaran bitrix. Perkhidmatan penghantaran automatik Bitrix v14. Sekatan pembayaran tambahan

Kami telah melalui proses memasang komponen pembayaran baharu. Dia menguji projek itu selama beberapa hari, dan sudah tiba masanya untuk memanfaatkan peluang yang patut dialihkan kepada platform 1C-Bitrix baharu.

Penggantian bandar lalai automatik

Contoh ini berguna untuk kedua-dua kedai serantau kecil dan projek besar.

Wilayah penghantaran adalah yang pertama daripada elemen utama proses pesanan. Katakan kita perlu menggunakan penggantian automatik nama "Kaliningrad" untuk meningkatkan penukaran dan mengurangkan masalah dengan membuat pesanan.

Sekarang apabila anda mula-mula log masuk ia kelihatan seperti ini:

Pelanggan, tentu saja, boleh mengklik pada butang "Kaliningrad", selepas itu medan akan diisi, tetapi ramai yang hanya melangkau langkah ini, mengakibatkan ralat:

Masalah ini dikenal pasti oleh Metrica Webvisor. Sudah tentu, selepas ini pelanggan mengisi segala-galanya dengan betul, tetapi sisa kekal, walaupun pada hakikatnya di banyak kedai, pengambilan adalah kriteria penting (sehingga 80% daripada pesanan), dan dalam kes ini, pengisian bandar yang betul nama tidak kritikal.

Mari kita tetapkan bandar lalai dan lihat sama ada penggantian berfungsi. Mari pergi ke bahagian pentadbiran kedai, dan kemudian ke tetapan hartanah:

Dan tetapkan lokasi lalai:

Sekarang mari buat pesanan untuk menyemak:

Hebat, lokasi telah diisi dan pelanggan hanya perlu mengklik "Seterusnya". Sekarang pesanan akan dibuat dengan kesulitan yang minimum untuk pelanggan, dan kami akan memaksimumkan penukaran. Bagi kedai-kedai besar, mereka boleh mengumpul statistik mengenai kekerapan pesanan dari bandar-bandar tertentu, dan membuat butang pemilihan cepat, seperti dalam tangkapan skrin: "Kaliningrad", "Zelenogradsk", "Svetlogorsk".

Anda boleh menetapkan bandar paling popular secara lalai, kerana ia sentiasa lebih mudah untuk menukar atau menjelaskannya melalui telefon daripada kehilangan pelanggan.

Sekatan pembayaran tambahan

Langkah seterusnya dalam membuat pesanan ialah blok pembayaran. Satu jenis sekatan mungkin larangan pembayaran secara tunai semasa penghantaran melalui kurier. Ini boleh berguna dalam kes di mana wanita bekerja di kuari dan kesihatan yang mereka tidak mahu risiko apabila mengangkut jumlah yang besar.

Kami akan memperkenalkan sekatan yang terikat pada perkhidmatan penghantaran tertentu dan jumlah cek maksimum. Untuk melakukan ini, pergi ke antara muka pentadbiran ke tab "Sekatan", untuk kaedah pembayaran tertentu:

Dalam kes ini, anda perlu membuat dua sistem pembayaran tunai:

  • dalam satu kami akan mengehadkan penggunaan untuk tempat pengambilan, tetapi tanpa sekatan harga,
  • dan dalam kedua kami akan mengehadkan diri kami kepada perkhidmatan kurier dan menambah had pada jumlah.
Mula-mula, mari kita tetapkan had harga:

Sekarang sekatan penghantaran:

Akibatnya, kami mendapat yang berikut:

Mari kita periksa pelaksanaan pesanan dengan barang bernilai kurang daripada 10,000 rubel dan penghantaran melalui kurier:

Semuanya baik, bayaran yang diperlukan ada, pesanan boleh dibuat.

Mari semak dengan barangan bernilai lebih daripada 10,000 rubel:

Hebat, tidak ada pembayaran tunai, anda boleh membuat pesanan dengan pembayaran dengan cara lain, tanpa mempertaruhkan kurier dan wang.

Apabila sekatan diperkenalkan, pelanggan tidak melihat kaedah pembayaran yang "dilarang" dan oleh itu tidak akan bergaduh dengan pengendali, yang sebaliknya perlu sentiasa menjelaskan mengapa syarikat anda tidak akan menghantar pesanan yang dibuat.

Perkhidmatan penghantaran tambahan

Kami sering diminta memberi peluang untuk mencipta perkhidmatan yang diperlukan dalam penghantaran. Ini telah dilaksanakan dalam platform baharu. Faedah perkhidmatan tambahan adalah untuk meningkatkan bil pesanan purata.

Pergi ke tetapan penghantaran:

Tab berasingan telah muncul dalam antara muka dengan perkhidmatan tambahan yang akan dipaparkan dalam blok penghantaran. Tiga jenis perkhidmatan disokong:

  • Senarai perkhidmatan. Pelanggan diminta untuk memilih item daripada senarai perkhidmatan. Secara lalai, item pertama dipilih, jadi jika anda tidak perlu menaikkan harga, maka perkhidmatan pertama dalam senarai hendaklah dengan harga sifar.

Perkhidmatan kuantitatif. Perkhidmatan dicipta dengan harga seunit, dan pelanggan boleh menentukan jumlah kuantiti yang mereka perlukan.

Perkhidmatan tunggal. Perkhidmatan bebas, dipaparkan sebagai kotak semak. Lalai tidak digunakan; pelanggan mesti memilih secara bebas yang dia perlukan.

Mari lihat bagaimana peraturan ini dikonfigurasikan:

Tetapan untuk semua jenis perkhidmatan adalah sangat serupa: terdapat dua blok yang mengawal elemen utama. Pertama sekali, anda perlu menetapkan nama dan perihalan perkhidmatan. Kemudian tentukan siapa yang boleh menggunakan perkhidmatan:

  • Pengurus - perkhidmatan akan dipaparkan dalam antara muka pentadbiran.
  • Pelanggan - perkhidmatan akan dipaparkan semasa membuat pesanan di bahagian awam tapak.
Beginilah rupa menambahkan perkhidmatan dalam antara muka pentadbiran apabila membuat pesanan atau membuat pengeditan:

"Input data peribadi" dinamik

Penghantaran telah selesai, kini anda boleh beralih kepada salah satu elemen terpenting dalam membuat pesanan - meminta data daripada pengguna untuk penghantaran atau penghantaran. Dalam komponen sebelumnya, pelanggan diminta set medan yang sama. Dia terpaksa memilih medan yang hendak diisi, yang agak menyusahkan.

Komponen daftar keluar baharu boleh meminta set medan yang berbeza. Selalunya, pemilik kedai mengurangkan jumlah maklumat yang perlu dimasukkan semasa pengambilan. Mungkin dalam kes ini sudah cukup untuk kita mengetahui:

  • telefon.
  • E-mel. Item ini juga boleh dialih keluar, tetapi kadangkala anda ingin "memanjakan" pelanggan dengan surat berita tentang produk baharu.
Mari pergi ke bahagian pentadbiran "Pesanan Hartanah" -> "Senarai Hartanah", dan pilih sifat alamat untuk ditukar:

Kami akan memautkan hanya "Perkhidmatan Penghantaran" yang sepatutnya memaparkan medan ini. Kemudian kami pergi ke bahagian awam dan cuba membuat pesanan. Kami memilih pengambilan dan melihat bahawa kedai tidak meminta kami untuk alamat penghantaran.

Ini adalah fungsi yang berguna dan dialu-alukan. Lagipun, anda mesti mengakui bahawa ia tidak begitu menyenangkan untuk menjawab soalan pelanggan: "Mengapa anda memerlukan alamat saya jika saya akan mengambil pesanan itu sendiri?" Sekarang anda tidak perlu melakukan ini.

Tempat pengambilan pesanan

Akhir sekali, saya ingin bercakap tentang perubahan dalam blok pemilihan "Mata Pengambilan Pesanan". Dalam versi sebelumnya, aduan utama adalah masalah dengan memaparkan sejumlah besar titik pikap, peta kecil dan kekurangan pemilihan automatik titik pikap (jika terdapat hanya satu, contohnya).

Versi baharu komponen telah menambah tetapan untuk memaparkan titik pengambilan pesanan. Jika ia adalah satu-satunya di mana-mana bandar, maka kami serta-merta menunjukkan blok yang runtuh dan memaparkan semua datanya dengan gambar, atau menunjukkan blok berkembang. Dalam kes pertama, untuk memaparkan peta anda perlu memasukkan blok, dan dalam kes kedua, peta akan segera dipaparkan.

Menyelesaikan masalah output perkhidmatan penghantaran automatik kedai dalam talian Bitrix v14 apabila membuat pesanan di Yandex.Market.

Inilah yang kami bincangkan, tetapi ternyata ia belum dilakukan, hanya perkhidmatan tersuai yang berfungsi, kami akan membetulkannya hari ini.
Di sini saya sedang menguji membuat pesanan dalam panel Yandex.Market; pembeli akan ditunjukkan perkara yang sama apabila dia membuat pesanan di Yandex.Market.

Memilih perkhidmatan automatik

Mula-mula kita perlu menambah perkhidmatan penghantaran automatik pada tetapan modul Kedai atas talian Dalam bab Membeli-belah di pasaran

Kerana secara lalai mereka tidak ada di sana dan kami tidak lagi dapat mengemas kini modul kedai dalam talian; saya mengedit terus dalam modul, kerana... dalam kes saya, jika anda mengemas kini kedai, maka segala-galanya akan berhenti berfungsi untuk pelanggan, yang dalam kes anda saya tidak tahu apa yang perlu dilakukan, fikirkan tentangnya, di kedai Bitrix v16 yang baharu mungkin ini juga tidak akan berfungsi.

Tetapan ditentukan dalam halaman pentadbiran dalam fail
/bitrix/modules/sale/admin/ymarket.php

Perkhidmatan tersuai ada sehingga Pickup, dan di bawah saya telah memaparkan perkhidmatan penghantaran automatik, semuanya mempunyai nilai sebagai contoh Mel, dalam kes saya, hanya mel diperlukan, jika anda memerlukan sesuatu yang lain, ia tidak akan sukar untuk mengubah suai, kerana prinsipnya akan jelas di mana dan apa yang perlu dilakukan, tetapi semua perkhidmatan automatik akan dipaparkan, mungkin ia akan berfungsi, saya hanya belum menyemaknya.

Jadi, kami dapati di mana dalam fail tatasusunan perkhidmatan tersuai $arDeliveryList dibentuk dan menambah yang automatik padanya

$arDeliveryFilter = tatasusunan(
"LID" => $arTab["SITE_ID"],
"AKTIF" => "Y"
);

//PENGHANTARAN STATIK
$dbDeliveryList = CSaleDelivery::GetList(
array("NAME" => "ASC"),
$arDeliveryFilter,
salah,
salah,
tatasusunan("ID", "NAMA")
);

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

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


Seterusnya, kami mencari blok output penghantaran dan menambah pilihan untuk mel ke senarai, dalam kes saya ia telah diulas, kemungkinan besar anda akan mempunyai perkara yang sama.

Inilah rupa pilihan yang telah siap, yang memaparkan perkhidmatan penghantaran dalam panel pentadbir

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


Segala-galanya dilakukan dengan tetapan, yang tinggal hanyalah untuk memuktamadkan skrip yang mereka sampai permintaan daripada Yandex.Market, dia memberitahu pasaran penghantaran yang perlu ditunjukkan kepada pembeli apabila membuat pesanan di Yandex.Market.

Permintaan Yandex.Market

Semua permintaan daripada Yandex.Market ke Bitrix datang dahulu ke fail ini, ia hanya mengandungi sambungan fail lain
/bitrix/services/ymarket/index.php

Dalam fail itu, API Bitrix itu sendiri disambungkan untuk interaksi Yandex.Market dengan kedai dalam talian anda
/bitrix/modules/sale/services/ymarket/index.php

Dalam fail ini kami berminat dengan kaedah yang pergi lebih jauh ke fail yang kami perlukan untuk perubahan, kami tidak mengubah apa-apa dalam hal ini
$result = $YMHandler->processRequest($requestObject, $method, $postData);

Dan inilah fail kami, di mana semua logik interaksi antara Bitrix dan Yandex.Market berfungsi dengannya
/bitrix/modules/sale/general/ym_handler.php

Saya tidak menulis artikel dengan serta-merta, kefungsian telah diuji untuk beberapa waktu dan ralat telah diperbetulkan, walaupun saya terlupa untuk mengatakan sesuatu, saya melampirkan fail, anda boleh memikirkannya.

Secara umum, jika anda tidak membuat sebarang perubahan pada fail ini di tapak web anda sebelum ini, anda boleh mencuba keseluruhan fail saya, kecuali untuk penghantaran, tiada apa yang berubah di dalamnya, semuanya berfungsi.

Jadi apakah perubahannya?dalam kelas CSaleYMHandler
1) Pembolehubah telah ditambahkan yang akan menyimpan maklumat lengkap tentang item dalam troli untuk mengira penghantaran oleh perkhidmatan penghantaran automatik.
dilindungi $basketItems = array();

2) Mengubah kaedah yang mendengar troli di pasaran, menerima maklumat tentang barang (cart) dan perkhidmatan penghantaran pulangan dan kaedah pembayaran
proses fungsi dilindungiCartRequest($arPostData)

3) Kaedah yang menerima maklumat tentang barang dalam troli di pasaran (id, harga, kuantiti, berat, dimensi, dll.) telah diubah.
fungsi dilindungi getItemCartInfo($arItem, $currency)

4) Kaedah telah diubah, yang menerima maklumat tentang lokasi pembeli, perkhidmatan penghantaran yang tersedia untuknya melalui penapis, mengira penghantaran dan menunjukkannya kepada pembeli di pasaran.
fungsi dilindungi getDeliveryOptions($delivery, $price, $weight = 0, $arBasketItems = array())

Di sini dalam kaedah ini perkhidmatan penghantaran Bitrix tersuai dan automatik dikira.

Beri perhatian di sini!

Dalam kes saya, kedai itu terletak di Moscow dan untuk Moscow semua perkhidmatan penghantaran automatik dilumpuhkan, untuk pembeli dari Moscow mereka tidak sepatutnya ditunjukkan, penghantaran pickup dan kurier berfungsi di sana, syarat ini ada dalam kod (ms 432):
if($locationTo == 2691) teruskan;

5) Kaedah yang menambah pesanan di tapak web anda, memberitahu pasaran "Semuanya ok" dan mengembalikan nombornya kepada Yandex.Market telah diubah
proses fungsi dilindungiOrderAcceptRequest($arPostData)

Khususnya, baris 911, di dalamnya kita dapat Nombor pesanan, ia sama ada ID Pesanan, atau Kod pesanan apabila penomboran pesanan mengikut templat didayakan
$arResult["order"]["id"] = $this->getOrderNumber($orderID);

6) Menambah kaedah yang akan mengembalikan nombor pesanan di tapak web anda kepada Yandex.Market (ID Pesanan atau Kod Pesanan)
fungsi dilindungi getOrderNumber($orderId)

Selain itu

Lagi di tapak yang dimuat naik lokasi 2.0, saya melakukan ini pada 2015 yang lalu, saya ingat ada masalah dengan Yandex.Market, Bitrix tersalah mencari lokasi dan Yandex.Market melaporkan ralat, saya tidak ingat di mana saya melakukannya, saya menambah fail ym_location.php ke arkib untuk berjaga-jaga jika Jika anda menjumpainya, sila beritahu saya, saya akan menambah perkara ini pada artikel.

Kesimpulan

Apabila membuat pesanan di Yandex.Market, pembeli akan melihat senarai penghantaran dalam borang ini; kedai anda mengembalikannya.

Fail yang digunakan dalam artikel semuanya dibahagikan kepada folder, di mana ia akan menjadi mudah untuk mencari fail yang mana.

Pemproses perkhidmatan penghantaran automatik membolehkan anda melaksanakan logik sewenang-wenangnya secara pemprograman untuk mengira kos penghantaran berdasarkan parameter pesanan dan tetapan anda sendiri. Algoritma pengiraan boleh sewenang-wenangnya - kos tetap, permintaan kepada perkhidmatan web jauh, pengiraan berdasarkan jadual data sendiri, dsb.

Pengendali ialah kelas atau set fungsi dengan struktur berikut:

Kaedah Penerangan
Penerangan Pengendali Fungsi yang mengembalikan penerangan pengendali, nama kaedah, senarai profil pengendali, dsb.
Tetapan pengendali Fungsi yang mengembalikan tatasusunan tetapan pengendali
Memproses tetapan Satu set fungsi yang bertanggungjawab untuk menyediakan tetapan untuk kemasukan ke dalam pangkalan data dan penukaran terbalik.
Semakan keserasian Kaedah yang menyemak keserasian profil pemproses tertentu dengan pesanan.
Fungsi pengiraan Kaedah yang mengira kos penghantaran berdasarkan tetapan pemproses dan parameter pesanan.

Memandangkan bekerja dengan set fungsi individu adalah menyusahkan, adalah disyorkan untuk menggabungkannya ke dalam kelas (ruang nama). Berdasarkan cadangan ini, penerangan lanjut akan menyusul, serta contoh yang diberikan akan dilaksanakan. Dalam contoh, pengendali "Penghantaran Kurier" dilaksanakan sebagai kelas CDeliveryMySimple.

Penerangan pengendali

Penerangan pengendali ialah kaedah yang mengembalikan tatasusunan bersekutu bagi struktur berikut:

Parameter Penerangan
SID Pengecam rentetan unik pengendali.
NAMA Nama pengendali.
PENERANGAN Penerangan teks pengendali
DESCRIPTION_INNER Penerangan dalaman pengendali, dipaparkan semasa mengkonfigurasi pengendali dalam Panel Kawalan.
BASE_CURRENCY ID mata wang asas pengendali
PENGENDALI Laluan ke fail pengendali. Diperlukan untuk penyalinan automatik pengendali yang betul (belum dilaksanakan). Dalam kebanyakan kes, nilai __FILE__ adalah mencukupi
GETCONFIG Nama kaedah yang mengembalikan tatasusunan tetapan pengesah. Jika pengendali dilaksanakan sebagai kelas, nilainya ialah tatasusunan ("class_name", "method_name").
DBSETSETTINGS Nama kaedah yang bertanggungjawab untuk menyemak tetapan pengendali dan menukar tatasusunan tetapan kepada rentetan untuk disimpan. Jika pengendali dilaksanakan sebagai kelas, nilainya ialah tatasusunan ("class_name", "method_name"). Jika kaedah ini tiada, tatasusunan tetapan akan disimpan ke pangkalan data dalam bentuk bersiri.
DBGETSETTINGS Nama kaedah yang bertanggungjawab untuk menukar rentetan tetapan pengendali kembali kepada tatasusunan. Jika pengendali dilaksanakan sebagai kelas, nilainya ialah tatasusunan ("class_name", "method_name").
KESESUAIAN Nama kaedah yang bertanggungjawab untuk pemeriksaan tambahan keserasian profil pemprosesan dengan parameter pesanan. Jika kaedah tiada, tiada pemeriksaan tambahan akan dilakukan. Jika pengendali dilaksanakan sebagai kelas, nilainya ialah tatasusunan ("class_name", "method_name").
KALKULATOR Nama kaedah yang mengira kos penghantaran. Jika pengendali dilaksanakan sebagai kelas, nilainya ialah tatasusunan ("class_name", "method_name").
PROFIL Tatasusunan profil pemprosesan. Mesti mengandungi sekurang-kurangnya satu profil. Untuk format penerangan lihat di bawah.

Perihalan profil ialah tatasusunan format berikut:

"string_profile_identifier" => tatasusunan("TAJUK" => " nama profil", "DESCRIPTION" => " perihalan_profil", // berat ditunjukkan dalam gram "RESTRICTIONS_WEIGHT" => tatasusunan( berat_minimum, Had Berat), // jumlah ditunjukkan dalam mata wang asas pengendali "RESTRICTIONS_SUM" => tatasusunan( jumlah_pesanan minimum, jumlah_pesanan maksimum));

Jika tatasusunan RESTRICTIONS_WEIGHT atau RESTRICTIONS_SUM mengandungi satu elemen, maka ia dianggap sebagai nilai minimum. Jika tiada sekatan diperlukan, tatasusunan(0) mesti dinyatakan.

Fungsi Init() ( tatasusunan kembali(/* Penerangan asas */ "SID" => "simple", "NAME" => "Penghantaran melalui kurier", "DESCRIPTION" => "", "DESCRIPTION_INNER" =>
" .", "BASE_CURRENCY" => COption::GetOptionString("sale", "default_currency", "RUB"), "HANDLER" => __FILE__, /* Kaedah pengendali */ "DBGETSETTINGS" => array(" CDeliveryMySimple" , "GetSettings"), "DBSETSETTINGS" => tatasusunan("CDeliveryMySimple", "SetSettings"), "GETCONFIG" => tatasusunan("CDeliveryMySimple", "GetConfig"), "COMPABILITY" => array("CDeliveryMySimple" , " Keserasian"), "CALCULATOR" => array("CDeliveryMySimple", "Calculate"), /* Senarai profil penghantaran */ "PROFILES" => array("simple" => array("TITLE" => " delivery" , "DESCRIPTION" => "Masa penghantaran sehingga 3 hari", "RESTRICTIONS_WEIGHT" => array(0), "RESTRICTIONS_SUM" => array(0),),)); )

Parameter pengesah

Kaedah yang ditentukan oleh elemen GETCONFIG mesti mengembalikan tatasusunan elemen borang:

Tatasusunan("CONFIG_GROUPS" => tatasusunan(" kumpulan_id1" => "nama_kumpulan1", "id_kumpulan2" => "nama_kumpulan2", /* ..................... */), "CONFIG" => tatasusunan(" parameter_identifier1" => tatasusunan("TAJUK" => " nama_parameter1", "TYPE" => " parameter_type1", "LAILAI" => " nilai_default parameter1", "KUMPULAN" => " parameter_group_identifier1", "VALUES" => tatasusunan(" nilai_parameter1" => "nama_nilai1_parameter1", "nilai2_parameter1" => "nama_nilai2_parameter1", /* ....................... */)), /* ........................ */))

Kumpulan parameter yang diterangkan dalam elemen tatasusunan dengan kekunci "CONFIG_GROUPS" dipaparkan sebagai tab berasingan dalam bentuk untuk mengedit parameter pengendali yang mengandungi parameter yang diberikan kepada kumpulan ini. Elemen tatasusunan dengan kunci "CONFIG" menentukan senarai parameter. Jenis parameter boleh mengambil salah satu daripada nilai berikut:

  • TALI- medan input teks
  • KATA LALUAN- medan kemasukan kata laluan
  • KOTAK SEMAK- elemen jenis "kotak semak" dengan nilai "Y"
  • RADIO
  • DROPDOWN- satu set pilihan dalam bentuk senarai juntai bawah
  • MULTISELECT- satu set pilihan dalam bentuk senarai dengan pelbagai pilihan
  • RADIO- satu set pilihan dalam bentuk butang radio

Untuk jenis parameter, membayangkan pilihan daripada beberapa pilihan nilai ( DROPDOWN, MULTISELECT Dan RADIO) senarai nilai ditentukan oleh elemen tatasusunan deskriptif dengan kunci "VALUES". Untuk jenis parameter lain, elemen ini diabaikan.

Fungsi GetConfig() ($arConfig = array("CONFIG_GROUPS" => array("semua" => "Kos penghantaran",), "CONFIG" => array(),); // parameter pengendali dalam kes ini ialah nilai kos penghantaran ke pelbagai kumpulan lokasi. // untuk melakukan ini, buat senarai parameter berdasarkan senarai kumpulan $dbLocationGroups = CSaleLocationGroup::GetList(); manakala ($arLocationGroup = $dbLocationGroups->Fetch()) ( $arConfig[ "CONFIG"][" price_".$arLocationGroup["ID"]] = array("TYPE" => "STRING", "DEFAULT" => "", "TITLE" => "Kos penghantaran kepada kumpulan "\" " .$arLocationGroup[" NAME"]."\" " .(".COption::GetOptionString("sale", "default_currency", "RUB").")", "GROUP" => "semua",) ; ) kembalikan $arConfig; )

Pemprosesan parameter

Pengendalian parameter pengendali memerlukan dua kaedah, yang dinyatakan dalam perihalan oleh parameter DBSETTINGS dan DBGETSETTINGS . Yang pertama daripada mereka menerima sebagai input pelbagai nilai parameter dalam bentuk " pengenal_parameter" => "nilai_parameter" dan harus mengembalikan perwakilan rentetan mereka. Yang kedua ialah melakukan penukaran terbalik. Kedua-dua kaedah juga boleh melakukan manipulasi sewenang-wenangnya dengan nilai parameter.

Function SetSettings($arSettings) ( // Semak senarai nilai nilai. Alih keluar nilai kosong dari senarai. foreach ($arSettings as $key => $value) ( ​​​​if (strlen($value) > 0) $arSettings[$key] = doubleval($value); else unset($arSettings[$key]); ) // kembalikan nilai sebagai tatasusunan bersiri. // dalam kes senarai tetapan yang lebih ringkas, lebih ringkas kaedah bersiri boleh digunakan. return serialize($arSettings); ) function GetSettings($strSettings) ( // kembalikan tatasusunan deserialized return unserialize($strSettings); )

Semakan keserasian

Keserasian profil pemproses dengan pesanan disemak menggunakan kaedah yang dinyatakan dalam keterangan oleh parameter "KESESUAIAN". Kaedah ini mengambil 2 parameter sebagai input - tatasusunan deskriptif susunan dan tatasusunan tetapan pengendali. Respons kaedah menjangkakan tatasusunan yang mengandungi pengecam profil penghantaran yang sesuai untuk pesanan tertentu. Semakan yang ditentukan oleh nilai "RESTRICTIONS_WEIGHT" dan "RESTRICTIONS_SUM" dalam tetapan profil dilakukan di luar pengendali dan tidak diperlukan di sini. Format data yang diterima sebagai input adalah seperti berikut:

Parameter pertama - maklumat pesanan - ialah tatasusunan dengan kekunci berikut:

Parameter kedua ialah nilai tatasusunan yang ditentukan oleh elemen dengan kunci "CONFIG" dalam pengendali, pada setiap elemen yang nilai parameter dengan kunci "VALUE" ditambahkan .

Dalam contoh yang kami sedang pertimbangkan, satu-satunya syarat keserasian ialah kehadiran dalam tetapan pengendali nilai kos penghantaran untuk sekurang-kurangnya satu daripada kumpulan lokasi yang termasuk lokasi yang diluluskan dalam pesanan.

// memperkenalkan kaedah utiliti yang mentakrifkan kumpulan lokasi dan mengembalikan kos untuk kumpulan itu. function __GetLocationPrice($LOCATION_ID, $arConfig) ( // dapatkan senarai kumpulan untuk lokasi yang diluluskan $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"); // в противном случае вернем массив, содержащий идентфиикатор единственного профиля доставки } !}

Pengendali

Kaedah utama untuk mengira kos penghantaran menerima parameter input berikut:

  • pengecam profil penghantaran;
  • tatasusunan tetapan pengendali penghantaran;
  • susunan deskriptif susunan;
  • langkah pengiraan semasa;
  • data sementara yang dipindahkan daripada langkah pengiraan sebelumnya.

Output pengendali hendaklah kos penghantaran dalam mata wang yang dinyatakan dalam parameter, atau tatasusunan struktur berikut:

kunci Penerangan
KEPUTUSAN ID respons. Nilai yang mungkin:
  • "okey" - kos penghantaran telah berjaya dikira;
  • "RALAT" - ralat berlaku semasa proses pengiraan;
  • "LANGKAH SETERUSNYA" - anda perlu pergi ke langkah seterusnya untuk meneruskan pengiraan.
NILAI Nilai kos penghantaran dalam mata wang yang dinyatakan dalam parameter. (HASIL = "OK")
TRANSIT Tempoh penghantaran dalam beberapa hari (RESULT = "OK"). Jika tiada, tempohnya tidak dipaparkan.
tempohDari Barisan penghantaran perkhidmatan penghantaran automatik. Daripada bilangan hari yang ditetapkan. Diperlukan untuk menghantar masa penghantaran ke Yandex.market. Digunakan semasa membangunkan perkhidmatan penghantaran anda sendiri.
tempohKepada Barisan penghantaran perkhidmatan penghantaran automatik. Sehingga bilangan hari yang ditetapkan. Diperlukan untuk menghantar masa penghantaran ke Yandex.market. Digunakan semasa membangunkan perkhidmatan penghantaran anda sendiri.
TEKS Ralat teks atau teks yang mengiringi peralihan ke langkah seterusnya (RESULT = ("ERROR"|"NEXT_STEP")).
TEMP Rentetan yang mengandungi data perantaraan dihantar ke langkah seterusnya (RESULT = "NEXT_STEP").

Dalam contoh yang kami huraikan, proses pelbagai langkah tidak tersirat, oleh itu pengiraannya mudah.

Function Calculate($profile, $arConfig, $arOrder, $STEP, $TEMP = false) ( // kaedah pengiraan utiliti ditakrifkan di atas, kita hanya perlu mengubah hala nilai yang dikembalikan kepada output. return array("RESULT" => "OK", "VALUE" => CDeliveryMySimple::__GetLocationPrice($arOrder["LOCATION_TO"], $arConfig)); )

Integrasi Pengendali

Laluan ke fail pengendali yang disambungkan secara automatik ditetapkan dalam tetapan modul "Kedai Dalam Talian". Laluan lalai ialah /bitrix/php_interface/include/sale_delivery/ Fail tersebut mesti mempunyai awalan penghantaran_, jika tidak, mereka akan diabaikan. Jika sistem mengesan fail yang mempunyai nama yang sama dengan sistem satu, ia akan disambungkan dan bukannya sistem satu. Mendayakan penghantaran automatik dalam fail dilakukan dengan menetapkan kaedah deskriptif sebagai pengendali untuk acara onSaleDeliveryHandlersBuildList.

Contoh

Merumuskan semua perkara di atas, mari buat pengendali penghantaran yang mudah. Kelas pengendali akan terletak dalam fail /bitrix/php_interface/include/sale_delivery/delivery_mysimple.php

"simple", "NAME" => "Penghantaran melalui kurier", "DESCRIPTION" => "", "DESCRIPTION_INNER" => "Pengendali mudah untuk penghantaran kurier. Untuk berfungsi, " ." sekurang-kurangnya satu kumpulan lokasi mesti ada . Apabila menyediakan pengendali, anda mesti menentukan " .kos penghantaran tetap untuk setiap kumpulan lokasi. Untuk menghalang " .kumpulan daripada mengambil bahagian dalam pemprosesan, biarkan medan kos untuk kumpulan ini kosong." "
" ."" .Edit kumpulan lokasi." .", "BASE_CURRENCY" => COption::GetOptionString("sale", "default_currency", "RUB"), "HANDLER" => __FILE__, /* Kaedah pengendali */ "DBGETSETTINGS" => array("CDeliveryMySimple", "GetSettings"), "DBSETSETTINGS" => array("CDeliveryMySimple", "SetSettings"), "GETCONFIG" => array("CDeliveryMySimple", "GetConfig"), "COMPABILITY" => array("CDeliveryMySimple", "Compability "), "CALCULATOR" => array("CDeliveryMySimple", "Calculate"), /* Senarai profil penghantaran */ "PROFILES" => array("simple" => array("TITLE" => "delivery", " DESCRIPTION" => "Masa penghantaran sehingga 3 hari", "RESTRICTIONS_WEIGHT" => tatasusunan(0), // tiada sekatan "RESTRICTIONS_SUM" => tatasusunan(0), // tiada sekatan),)); ) // fungsi tetapan pengendali GetConfig() ($arConfig = array("CONFIG_GROUPS" => array("semua" => "Kos penghantaran",), "CONFIG" => array(),); // tetapan pengendali dalam kes ini adalah penghantaran nilai kos ke pelbagai kumpulan lokasi. // untuk ini kami akan membuat senarai tetapan berdasarkan senarai kumpulan $dbLocationGroups = CSaleLocationGroup::GetList(); manakala ($arLocationGroup = $dbLocationGroups->Fetch()) ( $arConfig["CONFIG"]["price_".$arLocationGroup["ID"]] = array("TYPE" => "STRING", "DEFAULT" = > "", "TITLE" => "Kos penghantaran kepada kumpulan \"" .$arLocationGroup["NAME"].."\" " ."(".COption::GetOptionString("sale", "default_currency", " GOSOK ")")", "GROUP" => "semua",); ) return $arConfig; ) // menyediakan tetapan untuk memasuki fungsi pangkalan data SetSettings($arSettings) ( // Semak senarai nilai kos. Alih keluar nilai kosong dari senarai. foreach ($arSettings as $key => $value) ( ​​​​if (strlen($value) > 0) $arSettings[$key] = doubleval($value); else unset($arSettings[$key]); ) // kembalikan nilai sebagai tatasusunan bersiri. // dalam kes senarai tetapan yang lebih mudah, kaedah yang lebih mudah boleh digunakan bersiri return serialize($arSettings); ) // sediakan tetapan yang diperolehi daripada fungsi pangkalan data GetSettings($strSettings) ( // kembalikan tatasusunan deserialized return unserialize( $strSettings); ) // memperkenalkan kaedah perkhidmatan yang mentakrifkan kumpulan lokasi dan mengembalikan nilai untuk kumpulan ini. function __GetLocationPrice($LOCATION_ID, $arConfig) ( // dapatkan senarai kumpulan untuk lokasi yang diluluskan $dbLocationGroups = CSaleLocationGroup::GetLocationList(array("LOCATION_ID" => $LOCATION_ID)); manakala ($arLocationGroup = $dbLocationGroups-> Ambil() ) ( if (array_key_exists("price_". $arLocationGroup["LOCATION_GROUP_ID"], $arConfig) && strlen($arConfig["price_".$arLocationGroup["LOCATION_GROUP_ID"]]["VALUE"] > 0)) ( // jika terdapat entri tidak kosong dalam tatasusunan tetapan untuk kumpulan ini, kembalikan nilai pulangannya $arConfig["price_".$arLocationGroup["LOCATION_GROUP_ID"]]["VALUE"]; ) ) // jika tiada rekod sepadan ditemui, pulangkan pulangan palsu palsu; ) // kaedah untuk menyemak keserasian dalam kes ini hampir serupa dengan mengira fungsi kos Keserasian($arOrder, $arConfig) ( // semak kehadiran kos penghantaran $price = CDeliveryMySimple::__GetLocationPrice($arOrder["LOCATION_TO "], $arConfig); if ($price === false) return array(); // jika harga tidak dijumpai, kembalikan array kosong - tiada profil sepadan dengan return array("simple"); // sebaliknya , kembalikan tatasusunan yang mengandungi pengecam penghantaran profil tunggal ) // sebenarnya, mengira fungsi kos Calculate($profile, $arConfig, $arOrder, $STEP, $TEMP = false) ( // kaedah pengiraan utiliti ditakrifkan di atas , kita hanya perlu mengubah hala nilai yang dikembalikan kepada output. return array(" RESULT" => "OK", "VALUE" => CDeliveryMySimple::__GetLocationPrice($arOrder["LOCATION_TO"], $arConfig)); ) ) // tetapkan kaedah CDeliveryMySimple::Init sebagai pengendali acara AddEventHandler("sale" , "onSaleDeliveryHandlersBuildList", array("CDeliveryMySimple", "Init")); ?>

Post factum

Beberapa petua akhir:

  • Jika pemproses anda menggunakan sebarang pengiraan intensif sumber, panggilan pangkalan data, permintaan ke pelayan jauh, dsb., maka secara kategori Adalah disyorkan untuk menggunakan satu atau satu lagi pilihan caching hasil, dilaksanakan sedemikian rupa sehingga keputusan diingati sekurang-kurangnya untuk pesanan dengan parameter ini. Ini adalah perlu kerana fakta bahawa semasa proses meletakkan dan memproses pesanan, permintaan kepada pemproses untuk mengira kos pesanan mungkin berlaku beberapa kali. Pengendali yang dibekalkan menggunakan mekanisme caching terurus, dikonfigurasikan dengan mengambil kira spesifik algoritma pengiraan kos perkhidmatan penghantaran tertentu.
  • Untuk menyesuaikan pengendali sistem, hanya salin failnya (bersama-sama dengan fail yang disertakan, biasanya terletak dalam direktori dengan nama yang sama) ke direktori /bitrix/php_interface/include/sale_deivery/, mengekalkan nama tersebut. Dalam kes ini ia akan menyambung bukannya sistemik.

Cara memuatkan fail konfigurasi:

Cara menyediakan widget troli beli-belah:

    Dalam akaun peribadi Yandex.Delivery anda, ikut pautan Tetapan di penjuru kanan sebelah atas halaman, kemudian pergi ke tab Penyepaduan → Widget.

    Dalam blok widget troli, klik butang Pasang dan salin kod widget.

    Kembali ke tetapan modul dan tampal kod ke dalam medan Kod widget troli.

Jangan lupa untuk memilih bandar di mana gudang anda berada. Jika anda ingin menghantar pesanan ke satu gudang, dayakan pilihan Gunakan gudang Yandex.Delivery.

Lalai Pengirim

Di padang ID penghantar lalai pilih kedai dari mana pesanan paling kerap dihantar.

Dimensi produk

Sediakan dimensi dan berat barang. Dimensi yang ditentukan dihantar ke Yandex.Delivery, dan kos penghantaran dikira berdasarkannya.

Jika anda tidak tahu nilai yang hendak dipilih dalam blok ini, hubungi pentadbir tapak anda.

Pesanan hartanah

Senarai di sebelah kiri menyenaraikan medan yang diisi oleh pengguna semasa membuat pesanan. Dalam senarai di sebelah kanan, pilih sifat tertib yang sesuai. Senarai semua sifat ada pada halaman Simpan → Pesan hartanah. Sifat yang dipilih digunakan pada kad pesanan.

Jika anda tidak tahu apa yang perlu dipilih dalam blok ini, hubungi pentadbir tapak anda.

Perhatian. Jika anda menetapkan tetapan alamat secara automatik, pastikan anda menyemak yang mana Templat baharu digunakan dalam versi terkini modul "kedai"."))\"> templat pesanan digunakan pada tapak anda. Jika anda menggunakan templat lama, semak pilihan yang sesuai.

Status pesanan

Senarai di sebelah kiri menunjukkan status pesanan dalam sistem Yandex.Delivery. Dalam medan di sebelah kanan, pilih nilai yang sesuai dalam sistem anda.

Jika tiada status dalam sistem anda untuk status Yandex.Delivery, biarkan medan kosong.

Sifat produk

Pilih harta yang sepadan dengan pesanan SKU. Jika anda tidak pasti harta mana yang hendak dipilih, hubungi pentadbir tapak anda.

Tetapan komponen

Dayakan pilihan ini supaya apabila membuat pesanan, pembeli melihat widget troli dengan serta-merta apabila dia memilih Yandex.Delivery. Pembeli tidak perlu mengambil langkah tambahan semasa membuat pesanan.

Contoh

Bagaimana untuk menghantar pesanan ke Yandex.Delivery

Untuk menghantar pesanan ke Yandex.Delivery:

    Pergi ke halaman di tapak web anda Pentadbiran→ Kedai → Pesanan.

    Klik ID pesanan yang dikehendaki, dan kemudian butang Yandex.Delivery.

Mungkin terdapat mesej dalam tetingkap penghantaran pesanan "Butiran pesanan telah ditukar, kos penghantaran perlu dikira semula". Klik butang Tukar pilihan penghantaran dan pilih pilihan baharu.

Catatan. Modul ini tidak mempunyai keupayaan untuk menguruskan penghantaran - ini boleh dilakukan dalam akaun peribadi Yandex.Delivery anda.

Memasang widget

Anda boleh memasang widget geo atau widget troli beli-belah di tapak web anda.

Langkah 1. Buat halaman ujian di tapak

    Pergi ke tab Laman Web dan pada panel atas klik butang Buat halaman.

    Dalam tetingkap yang terbuka, pilih pilihan Pergi ke pengeditan halaman Dan Hadkan akses ke halaman. Dayakan akses untuk pentadbir sahaja.

    Tidak perlu mengisi apa-apa lagi - klik butang Selesai.

Langkah 2: Sediakan widget

    Kembangkan menu Kedai → komponen Yandexmarketlab dan seret Yandex.Widget penghantaran ke dalam medan kosong di sebelah kiri.

    Kembali ke tetapan modul dan tampal kod ke dalam medan yang sesuai.

    Tetapkan tetapan selebihnya dan klik butang Simpan. Jika anda tidak pasti nilai yang hendak dipilih, hubungi pentadbir tapak anda.

Langkah 3. Tambahkan widget pada tapak anda

Penyelesaian masalah

Modul tidak berfungsi

Pertama sekali, pastikan tapak anda memenuhi keperluan sistem. Ini boleh dilakukan pada halaman Pentadbiran→ Tetapan → Alat → Diagnostik → Tetapan PHP. Nilai berikut harus dipaparkan:

    Di bahagian atas blok - PHP versi 5.3–7.0.

    Dalam jadual pertama, dalam baris API Pelayan - Apache 2.0 atau lebih tinggi.

    Dalam jadual MySQL, dalam baris versi API Pelanggan - versi 5.0 atau lebih tinggi.

    Dalam jadual cURL, dalam baris sokongan cURL - "didayakan".

Jika tapak tidak memenuhi sebarang keperluan, hubungi hos tapak.

Selain itu, anda boleh menjalankan imbasan tapak pada halaman Pentadbiran→ Tetapan → Alat → Pemeriksaan sistem, pada tab Ujian konfigurasi Dan Semakan akses.

Apabila memasang modul, ralat "Yandex.Delivery service not found" muncul

Tambahkan perkhidmatan secara manual. Untuk ini:

    Pergi ke halaman Pentadbiran→ Kedai → Tetapan → Perkhidmatan penghantaran.

    Klik butang Tambah dan pilih pilihan Perkhidmatan penghantaran automatik.

    Pada tab Tetapan pengendali Kembangkan senarai juntai bawah Perkhidmatan penghantaran dan pilih Yandex.Delivery.

Nasihat. Jika anda tidak dapat menyelesaikan masalah, hubungi sokongan dalam akaun Yandex.Delivery anda.

Dalam kaedah penghantaran, pembeli tidak melihat pautan Yandex.Delivery atau "Pilih pilihan penghantaran".

Langkah 1: Semak perkhidmatan penghantaran

    Pergi ke halaman Pentadbiran→ Kedai → Perkhidmatan penghantaran dan semak bahawa halaman itu mempunyai Yandex.Delivery dan aktif.

    Klik pada Yandex.Delivery dan pastikan tab Sekatan dalam tetingkap yang terbuka kosong.

Langkah 2: Semak tetapan modul

Pergi ke halaman PentadbiranTetapan ProdukTetapan modul→ Yandex.Delivery dan pastikan bahawa:

    semua tetapan dalam blok tetapan perkongsian ditetapkan dengan betul;

    dalam blok Dimensi produk semua nilai diberikan.

Langkah 3: Semak bandar lalai anda

Semak bahawa bandar kedai ditetapkan dalam tetapan:

    Pergi ke halaman Pentadbiran→ Susun sifat → Senarai sifat.

    Untuk setiap harta tanah dengan jenis "Lokasi", klik nombor hartanah dan dalam tetingkap yang terbuka, nyatakan bandar di mana kedai atau gudang utama anda berada.

Langkah 4: Dayakan Mod Keserasian

Jika tapak anda menggunakan Templat baharu digunakan dalam versi terkini modul "kedai".

"}}\">templat pembayaran baharu, dayakan mod keserasian:

Nasihat. Jika anda tidak dapat menyelesaikan masalah, hubungi sokongan dalam akaun Yandex.Delivery anda.

Pengguna tidak melihat kos penghantaran apabila memilih Yandex.Delivery

Nasihat. Jika anda tidak dapat menyelesaikan masalah, hubungi sokongan dalam akaun Yandex.Delivery anda.

Yandex.Delivery tidak termasuk data pembeli

Jika kad pesanan mengandungi semua data pembeli, tetapi borang untuk menghantar pesanan ke Yandex.Delivery tidak mengandunginya, semak tetapan sifat pesanan pada halaman Pentadbiran→ Kedai → Pesan sifat → Senarai hartanah.

"}}\">templat pembayaran :
  • Templat baharu
  • Templat lama

Tidak kira berapa banyak anda memberi makan kepada serigala, babi akan lebih enak

Bitrix: mencipta pengendali perkhidmatan penghantaran automatik

Bitrix mempunyai dua jenis perkhidmatan penghantaran: tersuai dan automatik. Artikel ini akan menerangkan cara membuat pengendali perkhidmatan penghantaran automatik.

Apakah pengendali automatik ini?

Semua pengendali prapasang terletak dalam folder /bitrix/modules/sale/lang/ru/delivery/. Pengendali anda harus berada dalam folder /bitrix/php_interface/include/sale_delivery/ (laluan ini boleh ditukar dalam sifat modul kedai dalam talian).

Pengendali ialah kelas struktur tertentu dengan rentetan sambungan untuk pengendali penghantaran acara onSaleDeliveryHandlersBuildList.

Kelas pengendali penghantaran mesti mempunyai beberapa kaedah, jenis tindakan yang diterangkan dalam kaedah Init kelas.

1. Init - medan utama dimulakan.

2. DBGETSETTINGS - kaedah untuk membaca nilai parameter.

3. DBSETSETTINGS - kaedah untuk menetapkan nilai parameter.

4. GETCONFIG - mentakrifkan konfigurasi tetapan (ia boleh dibahagikan kepada tab).

5. KESESUAIAN - menyemak keserasian profil pemproses dengan pesanan.

6. KALKULATOR - pengiraan kos penghantaran.

1. SID - Pengecam rentetan unik pengendali.
2. NAMA — Nama pengendali.
3. DESKRIPSI - Penerangan teks pengendali
4. DESCRIPTION_INNER — Penerangan dalaman pengendali, dipaparkan semasa mengkonfigurasi pengendali dalam Panel Kawalan.
5. BASE_CURRENCY — Pengecam mata wang asas pengendali
6. PENGENDALI — Laluan ke fail pengendali. Diperlukan untuk penyalinan automatik pengendali yang betul (belum dilaksanakan). Dalam kebanyakan kes, nilai __FILE__ adalah mencukupi

Sekurang-kurangnya satu juga mesti dinyatakan profil penghantaran.

"Plain", // Pengecam perkhidmatan penghantaran "NAME" => "Courier Krasnaya Presnya", "DESCRIPTION" => "Penerangan untuk pelanggan tapak", "DESCRIPTION_INNER" => "Penerangan untuk pentadbir tapak", "BASE_CURRENCY" = > "RUR", "HANDLER" => __FILE__, /* Mentakrifkan kaedah */ "DBGETSETTINGS" => tatasusunan("CDeliveryPlain", "GetSettings"), "DBSETSETTINGS" => tatasusunan("CDeliveryPlain", "SetSettings"), " GETCONFIG" => tatasusunan("CDeliveryPlain", "GetConfig"), "COMPABILITY" => array("CDeliveryPlain", "Compability"), "CALCULATOR" => array("CDeliveryPlain", "Calculate"), /* Senaraikan profil */ "PROFILES" => tatasusunan("semua" => tatasusunan("TAJUK" => "Tiada sekatan", "DESCRIPTION" => "Profil penghantaran tanpa sebarang sekatan", "RESTRICTIONS_WEIGHT" => tatasusunan(0 ) , "RESTRICTIONS_SUM" => tatasusunan(0),),)); ) /* Menetapkan parameter */ fungsi SetSettings($arSettings) ( foreach ($arSettings as $key => $value) ( ​​​​if (strlen($value) > 0) $arSettings[$key] = doubleval($value ); else unset($arSettings[$key]); ) return serialize($arSettings); ) /* Request parameters */ function GetSettings($strSettings) ( return unserialize($strSettings); ) /* Minta konfigurasi perkhidmatan penghantaran * / function GetConfig() ($arConfig = tatasusunan("CONFIG_GROUPS" => tatasusunan("semua" => "Parameter",), "CONFIG" => tatasusunan("HARGA_ PENGHANTARAN" => tatasusunan(// "JENIS" => "STRING ", // "DEFAULT" => "200", // "TITLE" => "Kos penghantaran", // "GROUP" => "semua",)),); return $arConfig; ) /* Profil penghantaran pesanan semak pematuhan */ fungsi Keserasian($arOrder, $arConfig) ( tatasusunan kembali("semua"); ) /* Pengiraan kos penghantaran*/ fungsi Kira($profile, $arConfig, $arOrder, $STEP, $TEMP = false ) ( // dapatkan kos bakul // Paparkan bakul semasa untuk pengguna semasa $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_BELI", "PRICE", "QUANTITY " ")); manakala ($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; ) // Cetak tatasusunan yang mengandungi bakul semasa foreach ($arBasketItems sebagai $num => $item) ($TotalSumArr = $item["HARGA"]*$item["KUANTITI"]; ) // jumlah semua produk yang diambil mengambil kira kuantiti $TotalSum = array_sum($TotalSumArr); // bergantung pada jumlah, buat markup untuk penghantaran // dari 1500 hingga 5000 penghantaran 750 rubel jika ($TotalSum >= 1500 && $TotalSum<= 5000) $DeliveryCost = 750; elseif($TotalSum >= 5000) $Kos Penghantaran = 0; return array("RESULT" => "OK", "VALUE" => $_SESSION["ORDER_DELIVERY_PRICE"], "VALUE" => $DeliveryCost); ) ) AddEventHandler("sale", "onSaleDeliveryHandlersBuildList", array("CDeliveryPlain", "Init")); ?>

Pengendali mengandungi kod yang mengira kandungan troli dan, bergantung pada harga, menawarkan kos penghantaran yang berbeza.