Как получи доступ к данным объекта Я.Метрики
Здравствуйте! Я в JS не очень разбираюсь, но вот понадобилось связать Я.Метрику с системой оплаты. Вот, что у меня получилось:
// этот код считывает все GET параметры function parseGetParams() { var $_GET = {}; var __GET = window.location.search.substring(1).split("&"); for(var i=0; i<__GET.length; i++) { var getVar = __GET[i].split("="); $_GET[getVar[0]] = typeof(getVar[1])=="undefined" ? "" : getVar[1]; } return $_GET; } var GETArr = parseGetParams(); //Объект метрики для магазина var yaParams = { order_id: " 0000", order_price: 980.0, currency: "RUR", exchange_rate: 1, goods: [ { name: "Мой товар - test", price: 980, customer_email: "n/a" quantity: 1 } ] }; yaParams.order_id = GETArr.order_id; // тут вроде всё правильно. А вот как добраться до "customer_email"? В мануале яндекса написано: "В расчете параметров магазина order_id и name или id в объектах массива goods используются в качестве ключа, несмотря на то, что находятся на одном уровне с другими свойствами." Получается, чтобы задать его я должен написать yaParams.goods.name['Мой товар - test'].customer_email = GETArr.customer_email; Правильно, или нет? И есть не будет передано параметра customer_email, то в объекте он так и останется "n/a", или сменится на "undefined"? |
А зачем записывать email в список товаров, когда для заказа он только один? Я не очень разобрался в мануале, но стоит попробовать так:
var yaParams = { order_id: GETArr.order_id, order_price: 980.0, currency: "RUR", exchange_rate: 1, customer_email: GETArr.customer_email goods: [ { name: "Мой товар - test", price: 980, quantity: 1 } ] }; Думаю, весь yaParams нужно формировать динамически. |
Цитата:
Цитата:
yaParams.customer_email = GETArr.customer_email; Если в query-параметрах не будет customer_email, то запишется undefined. Чтобы этого не было можно сделать так: yaParams.customer_email = GETArr.customer_email || "n/a"; или так var customer_email = GETArr.customer_email; if (customer_email) { yaParams.customer_email = customer_email; } |
Ну зачем же так придираться к контексту и ставить задачу с ног на голову? Окей, e-mail один, а как насчет параметра price? Цена на товар может изменится, клиент может купить его со скидкой и уж он-то точно должен быть в каждом конкретном товаре.
А просто if (GETArr.customer_email) { yaParams.customer_email = customer_email; } для проверки не сработает? |
Цитата:
В обоих случаях я считаю, что правильнее всего создать объект где-то на сервере, а потом вывести его через json_encode (если это PHP). Это железный способ. Такие дела. Цитата:
Цитата:
if (GETArr.customer_email) { yaParams.customer_email = GETArr.customer_email; } |
У нас сервис оплаты glopart.ru. После покупки человека перекидывает с глопарта на нужную страницу нашего сайта. Там стоит счетчик яндекса и редирект через секунду (чтобы он дважды туда не попадал). Глопарт передает параметры методом get, я полагаю, ибо написано "Когда заказ оплачен - сервис Глопарт перенаправит покупателя на указанную вами страницу и добавит следующие параметры к запросу:...".
Цена товара может менятся: 1) Если её сменили в глопарте. 2) Если человек вводит промо-код и покупает тот же товар со скидкой. Может меняться еще и название (мне бы хотелось сделать универсальную страицу обработчик и не допиливать её для каждого нового товара.) И еще, да, в мануале к глопарту не написано, что он передает цену, но написано, что если нужны еще параметры - пишите в саппорт, что я уже и сделал. И даже если нам не удастся получить дополнительные параметры, то всё равно скоро будем переезжать на e-autopay и встанет всё тот же вопрос о связке метрики с платежкой. |
Хм. А как задается страница, на которую перенаправляет глопарт? Нужно же откуда-то получать данные о товарах из корзины.
|
ixth, пожалуйста, давай будем проще. Мне просто нужно знать, как обратиться извне к переменной (чтоб собственно присвоить ей значение) в конкретном объекте (ключём к которому является name), который находится в ассоциативном массиве goods, который принадлежит объекту yaParams (я ничего не перепутал?). Я программировал на с++ и мне просто нужно узнать тонкости синтаксиса в JS по этому вопросу.
|
Ок. Короче, смотри: то, что написано в документации Метрики про ключи, видимо, имеет отношение к интерфейсу Метрики. Т.е. она выводит товары, сортируя их по name, id или что там еще… Ты никак не заставишь массив объектов отдавать тебе элемент по какому-либо ключу, кроме индекса. Так что тебе придется либо обращаться по порядковому номеру, как к обычному массиву, либо, опять же, проходить по всему массиву и искать в нем объект со значением name, которое совпадает с тем, что тебе нужно.
|
Тоесть конструкция должна быть, типа такой:
if (yaParams.goods[0].name == 'Мой товар - test') { yaParams.goods[0].price = GETArr.order_price; } Ну еще цикл прохода по массиву, если бы это был не еденичный товар, а корзина, так? |
Часовой пояс GMT +3, время: 16:23. |