«хочу в подарок» ВКонтакте для Shop-Script
Примерно месяц назад ВКонтакте и о том, что любой желающий может подключить свой магазин к этой системе, разместив у себя в магазине кнопку «Хочу в подарок».
Ниже опубликовано готовое решение и инструкция по интеграции этого решения в магазины WebAsyst Shop-Script
Поехали!
- Поместите файл function.wishlist.php в папку /kernel/includes/smarty/plugins
- Там, где хотите выводить кнопку впишите {wishlist}(для карточки продукта), и {wishlist pid=’222′} (в других местах, ’222′ — id продукта)
- Между тегами <head></head> (Админ панель — Дизайн — Редактировать тему — Head) подключите скрипт
<script type="text/javascript" src="http://vkontakte.ru/js/api/merchant.js?8" charset="windows-1251"></script>
- Заключите договор с Вконтакте (нужно заполнить свои банковские реквизиты)
- Переключите магазин и скрипт из тестового режима в рабочий
Содержания файла function.wishlist.php:
<?php function smarty_function_wishlist( $params, &$smarty ) { $merchant=''; $key=''; $image_url='http://site.ru/published/publicdata/{DBKEY}/attachments/SC/products_pictures/'; $shipping_price=0; $kurs=0; $testmode=1; $disp=''; if(isset($_GET['productID']) && $_GET['productID']>0) $product=intval($_GET['productID']); else $product=$params['pid']; if(!$product) return; $sql='SELECT name_ru AS name, brief_description_ru AS description, Price FROM SC_products WHERE productID="'.$product.'"'; $sql_i='SELECT filename FROM SC_product_pictures WHERE productID="'.$product.'" order by priority ASC LIMIT 1 '; if($r=mysql_query($sql)) $res=mysql_fetch_assoc($r); if($r_i=mysql_query($sql_i)) $i=mysql_fetch_assoc($r_i); $filename=$i['filename']; extract($res); if($kurs==0){ $sql2='SELECT currency_value FROM SC_currency_types WHERE currency_iso_3="RUB"'; if($r2=mysql_query($sql2)) $res2=mysql_fetch_assoc($r2); $price=round(($Price*$res2['currency_value']),2); } else { $price=round(($kurs*$Price),2); } $description=strip_tags($description); $description=str_replace("'", "", $description); $description=str_replace('"', '', $description); $description=str_replace("\r\n", "", $description); $str="item_currency=RUBitem_description=".$description."item_id=".$product."item_name=".$name; if($filename) $str.="item_photo_url=".$image_url.$filename; $str.="item_price=".$price."merchant_id=".$merchant."shipping_price=".$shipping_price.$key; $sig = md5($str); $disp.=' <script type="text/javascript"> var prepareOrder = function() { var result = { merchant_id: '.$merchant.', item_id: '.$product.', item_name: "'.$name.'", item_description: "'.$description.'", item_currency: "RUB",'; if($filename) $disp.='item_photo_url: "'.$image_url.$filename.'",'; $disp.=' item_price: '.$price.', shipping_price: '.$shipping_price.', testmode: '.$testmode.', sig: "'.$sig.'" }; return result; } document.write(VK.Merchant.wishbutton(prepareOrder)); </script>'; return $disp; } ?>
Параметры, которые вам нужно изменить:
$merchant — id магазина
$key — Защищенный ключ вашего магазина
$image_url — путь к картинка (http://site.ru/published/publicdata/{DBKEY}/attachments/SC/products_pictures/)
$shipping_price — стоимость доставки (для всех товаров одинаковая)
$kurs — курс рубля по отношению к вашей валюте (0 — если в магазине есть валюта RUB)
$testmode — тестовый режим (1 — да, 0 — нет)
Пример можно посмотреть (работает в тестовом режиме)


Куда надо писать {wishlist}, чтобы кнопка появилась рядом с кнопкой купить? Спасибо
в админ панели при редактировании страницы продукта
ищите {cpt_product_add2cart_button
и после закрывающей скобки «}» вставляйте {wishlist}
Артём, спасибо. Кнопка появилась, но при нажатии на неё вылезает ошибка «При обработке запроса произошла критическая ошибка.
Если ошибка возникает регулярно, обратитесь в техническую поддержку интернет-магазина.», наверное я что-то сделал не так
Такая ошибка скорее всего означает несоответствие режимов.
Например, на сайте включен тестовый, а в скрипте рабочий или наоборот.
Если ошибка в формировании подписи, то там выводится другое сообщение.
покажите, пожалуйста, ваш сайт
Ух, всё получилось, но правильно я понимаю, что в тестовом режиме желания не добавляются, только пишет, что всё ок, а в списке желаний ни чего нет?
да. правильно.
чтобы добавлялось, нужно включить рабочий режим
а в скрипте 0 изменить на 1
Артём, ждём платную часть скрипта
после выходных надеюсь получится
Так с этим разобрался вместо RUB в запросе для моего магазина надо использовать RUR. Теперь появляется неизвестная ошибка
Вконтакте принимает только RUB и поиск по базе ваших валют идет по слову «RUB»
поэтому используйте переменную kurs, но вконтакт все равно должно передаваться RUB (в javascript)
Артём, а не подскажете почему не работает, когда я добавляю {wishlist} в product_brief.html? На месте кнопки появляется пробел.
я же писал, тогда нужно добавлять параметр pid=’22′
где 22 — id продукт )
Точно, всё поёт. Спасибо
))
Не получается вконтакте перейти в рабочий режим, из выбора только тестовый. Реквизиты на проверку отправлял вроде все ок…?
по их описанию рабочий режим отличается только параметром testmode
но проверить я не могу — для Украины тестовый режим включить невозможно
Нужно ли заполнять обработку уведомлений и варианты доставки?
нет. какие варианты доставки желаний могут быть?
Артём, платная половина модуля ещё не готова?
Статья познавательная. Прочитал с удовольствием. Спасибо
Еще в скрипте рекомендую добавить строки аналогичные имеющимся:
$name=strip_tags($name);
$name=str_replace(«‘», «», $name);
$name=str_replace(‘»‘, », $name);
$name=str_replace(«\r\n», «», $name);
Т.е. убрать все кавычки и т.д. из названия товара. Пришлось добавить, т.к. у меня в названиях продуктов есть кавычки, с ними не работает.
Подскажите, а как правильно добавить кнопку «Нравится» для В контакте?
Вроде, всё просто — но, когда добавляю код кнопка просвечивается через всплывающее окно корзины, а это очень некрасиво.
В тестовом режиме выдаёт такое при нажатии на кнопку:
Ошибка проверки подписи, строка без секрета для подписи (UTF-8):
item_currency=RUBitem_description=item_id=1269item_name=Timberland….
Где копать?
Закрался пробельчик в ключе, поменял, теперь такая ошибка:
«Произошла критическая ошибка, код ошибки: 1401
Если ошибка возникает регулярно, обратитесь в техническую поддержку интернет-магазина.»
я не знаю что вы делали, не знаю на каком сайте. как я могу помочь?
Делал на сайте на движке вебасиста по инструкции, которую вы написали.
Думал, может, вы знаете, что это за ошибка 1401
Эта ошибка возникает при несоответствии названия валюты магазина и вконтакет.
Для исправления ошибки используйте переменную $kurs ($kurs=1;)
Подскажите, а на WebAssyst Shop-Script можно сделать эту функцию?
это решение опубликовано именно для Webasyst Shop-Script
Подскажите пожалуйста, ВКонтакте при подключении магазина в настройках что надо писать в поле Адрес обратного вызова при включенном поле Обработка уведомлений?
это должно быть описано в спецификации вконтакте
там кажется нужно прописывать адрес страницы, где вы будете обрабатывать ответы от них
Для добавления в желания товара из магазина на WA SS это поле выходит не нужно и его можно оставить пустым?
В спецификации ВК написано следующее: «Обработка уведомлений – если используется только сервис оплаты товаров с сайта Вашего магазина или из Вашего приложения, а сервис Списков Желаний не используется, и товары в каталог не импортируются, то может быть выбран пункт Не обрабатывать. При этом, если товары требуют доставки, то способы доставки и их цены придется задать вручную. Во всех остальных случаях необходимо выбрать пункт Обрабатывать. «
При регистрации магазина в ВКонтакте, ВКонтакте требует размещения кнопки «Оплатить ВКонтакте» в корзине, это планируется реализовать? Спасибо.
планируется, но сроков назвать не могу.
пе
Теперь нет необходимости создавать дополнительный модуль для оплаты через «Вконтакте». Теперь это доступно всем в обновлении №300
http://easyweb.org.ua/shop-script/update300/