06.10.2016

Синхронизация заказов с личного сайта

Если у Вас есть личный сайт, и Вы имеете к нему доступ (можете вносить изменения в PHP  файлы), после несложной настройки, Вы сможете автоматически получать заказы в таблицу. Для этого проделайте такие настройки:

ВНИМАНИЕ! Для успешного выполнения данного кода, обязательно надо выбрать текущий активный лист, в него будут прописываться новые заказы.

Активный лист надо выбрать в меню «Автоматические функции«:

Находясь в таблице скопируйте этот «ключ»

ключ таблицы

Затем зайдите в «Расширения»- «Apps Script»

Откроется новая вкладка в браузере, удалите имеющийся там текст:скрипт

Вместо удаленного текста впишите этот код:

Подробнее >>>

function doGet(e){Get_Post(e);}function doPost(e){Get_Post(e);}
function Get_Post(e) {
try{
var ss = SpreadsheetApp.openById("1VsHrBK0uawHUAcIY8fDSZ14KXTC_Ru8yMtfyfrwtGiU"); // меняем на свой ID таблицы
var arr = JSON.parse( Utilities.newBlob(Utilities.base64Decode(ss.getRange("Admin!Z20").getDataValidation().getCriteriaValues()[0].join(''))).getDataAsString());
var siteDop = JSON.parse(arr.siteDop);
var col = JSON.parse(arr.abc);
var np_t = JSON.parse(arr.np_t);
var delta = arr.delta=='1'?true:false, t = 10;
ss = ss.getSheetByName(siteDop.activList);
if (ss) var last = ss.getLastRow()+1; else return HtmlService.createHtmlOutput('Select active sheet');
if(col[0]) ss.getRange(col[0]+last).setValue(new Date()); // Установка текущей даты
if(col[1] && e.parameter.order) ss.getRange(col[1]+last).setValue(e.parameter.order); // Номер заказа
if(col[2] && e.parameter.name) ss.getRange(col[2]+last).setValue(e.parameter.name); // ФИО
// Адрес будет записан в комментарий:
if(col[10] && e.parameter.address) ss.getRange(col[10]+last).setValue(e.parameter.address);

//---------- Синхронизация с Новой почтой ----------------------------- start
// В случае если у Вас на сайте название городов и складов точно такие как они описаны в Новой почты, можно сделать синхронизацию отдельно города и склада:
// установите в GET запросе на своём сайте такие переменные
// "gorod" = город как он записан в самой Новой почте
// "sklad" = как он записан в самой новой почте
// "address_note" = примечание клиента, например адресная доставка

if(col[6] && e.parameter.gorod) {
ss.getRange(col[6]+last).setValue(e.parameter.gorod);
var VW = ss.getRange('Admin!V:W').getValues();
for (i = 0; i < VW.length && VW[i][0]; i++)
if (VW[i][0] == e.parameter.gorod) { // Город
var W = VW[i][1];
break;
}
}
if (col[7] && W && e.parameter.sklad) {
VW = ss.getRange('Admin!'+W);
W = VW.getValues();
for (i = 0; i < W.length; i++)
if (W[i][0].replace(/\(|\)|\"|\s/g,"").search(e.parameter.sklad.replace(/\(|\)|\"|\s|/g,"")) > 0) {
e.parameter.sklad = W[i][0];
t = 7;
break;
}
ss.getRange(col[7]+last).setDataValidation(SpreadsheetApp.newDataValidation().requireValueInRange(VW,delta).build());
ss.getRange(col[t]+last).setValue(e.parameter.sklad);
if (t==7) ss.getRange(col[10]+last).setValue('');
if (t==7 && e.parameter.address_note) ss.getRange(col[10]+last).setValue(e.parameter.address_note);
if (t==10 && e.parameter.address_note) ss.getRange(col[10]+last).setValue(e.parameter.sklad + ' ' + e.parameter.address_note);
}
//----------------------------------------------------------------------- end

if(col[4] && e.parameter.tovar) ss.getRange(col[4]+last).setValue(e.parameter.tovar.replace(/&quot;/gi,'"').replace(/\n/gi,'\n')); // Название товара
if(col[5] && e.parameter.price) ss.getRange(col[5]+last).setValue(e.parameter.price.replace('.',',')); // Общая сумма заказа
if(col[3] && e.parameter.phone) ss.getRange(col[3]+last).setValue(e.parameter.phone.replace(/[^\d]/gi,'').substr(-10)); // Телефон
if(col[8] && e.parameter.pay) ss.getRange(col[8]+last).setValue(e.parameter.pay); // Вид оплаты (кто за что платит)
if(col[16] && e.parameter.np) ss.getRange(col[16]+last).setValue(e.parameter.np); // Устанавливает службу доставки ("НП")
if(col[18] && e.parameter.email) ss.getRange(col[18]+last).setValue(e.parameter.email); // Email клиента
ss.getRange(last+':'+last).setBackground('yellow');// Желтый фон строки
}catch(e){ss.getRange(col[12]+last).setValue(e.message+'\n'+e.stack);} // Ошибка будет записана в строку "ТТН>"
}

 
Обязательно поменяйте в коде ID таблицы на ранее скопированный свой ID
 
вставить ид
 
Сохраните проект, можете ввести любое название проекта, или оставить по умолчанию «Проект без названия»
 
проект без названия
 
 Далее нажмите «Начать развертывание» -> «Развернуть как веб-приложение»
 
Далее нажмите на шестерёнку и выберите «Веб-приложение»:
Далее выберите настройки как на скриншоте:
Затем Гугл сервис может у вас запросить данные для авторизации, нажмите на «Развернуть» и «Предоставить разрешение» на выполнение кода:clip2net_161006130344
Выберите свой аккаунт
Нажмите «Дополнительные настройки»
Нажмите «Перейти на страницу «Uchet zakazov» (небезопасно)»
И нажмите «Разрешить»
 
clip2net_161006130457
 
Скопируйте эту ссылку:ссылка
 Ссылка должны иметь вид:
https://script.google.com/macros/s/AKfycbwhiG9zlNgI-NGSjodM3ISSlWIQwOVwko0Amn9syCqheoV5lns/exec
 
Теперь к этой ссылке вы можете добавить нужные данные для добавления в таблицу. Делается это следующим образом: в конце ссылки добавляем «?название=значение&название=значение», например:
https://script.google.com/macros/s/AKfycbwhiG9zlNgI-NGSjodM3ISSlWIQwOVwko0Amn9syCqheoV5lns/exec?name=Александр&tovar=Ноутбук
 
Еще пример на php:

https://script.google.com/macros/s/AKfycbwhiG9zlNgI-NGSjodM3ISSlWIQwOVwko0Amn9syCqheoV5lns/exec?name=$name&address=$adr&tovar=$tovar&phone=$tel

 
Где $name, $adr, $tovar, $tel — это те переменные которые присутствуют на Вашем сайте, и содержат данные о заказе.
Эти переменные могут отличаться и быть другими от написанных выше. Если Вы их не знаете то обратитесь к программисту который настраивал, устанавливал Ваш сайт.
 
Доступные названия:
name — ФИО,
order — номер заказа,
address — адрес пропишется в ячейку «Коментарий»,
tovar — товар в заказе, каждый новый товар с новой строки, в php коде используйте символ «\n»
price — общая сумма за заказ,
phone — тел. преобразуется в необходимый формат для таблицы,
email — почта клиента, если Вы используете эту колонку,
pay — Вид оплаты (кто за что платит),
gorod — город клиента (если есть на сайте выбор города),
sklad — номер отделения Новой Почты (если есть на сайте такой выбор),
address_note — примечание клиента, например адресная доставка,
np — если используете колонку с выбором курьерской службы доставки, сюда можно прописать выбор службы, например «НП».
 
Вставив данную строчку в браузерную строку, Вы должны получить ответ:clip2net_161006135625
После тестового запуска в браузере на своем листе вы увидите новый добавленный товар в конце таблицы.
 
Если Вы видите другой текст, обратитесь по удобным Вам контактам, опишите ошибку и мы поможем Вам настроить этот скрипт.
 
ВНИМАНИЕ! Обязательно надо выбрать текущий активный лист, в него будут прописываться новые заказы.
 
Если у Вас всё получилось, теперь надо внести изменения на Вашем сайте. Необходимо найти ту часть кода, на Вашем сайте, которая отвечает за отправку данных о заказе в Базу Данных, или на почту. Файл обычно должен иметь расширение PHP. Текстовые переменные желательно вложить в функцию urlencode(), для правильного отображения русских символов. И сформировать строку, Ваши переменные надо записать в строку через точку.
А саму ссылку необходимо поместить в функцию: file() если вы используете php или же сделать обычный  GET запрос с нужными параметрами , должно получиться подобно такой строки для php:

file(«https://script.google.com/macros/s/AKfycbwJPs-GXIX7hIVtlYunpf_1vzuJeK-555iKeY3JVr0Hwm_2g/exec?name=».urlencode($name).»&address=».urlencode($adr).»&tovar=».urlencode($tovar).»&phone=».$tel); 

Или так (curl):
 
curl -X GET «https://script.google.com/macros/s/AKfycbwJPs-GXIX7hIVtlYunpf_1vzuJeK-555iKeY3JVr0Hwm_2g/exec?name=Andrey&address=myAdress&tovar=myTovar&phone=myPhone
 
Данные из аргументов будут добавлены в соответствующие ячейки таблицы (смотрите код для подробностей):
name = ФИО = col[2]
phone = Телефон = col[3]
 
Полный перечень колонок и их идентификация:

Подробнее >>>

col[0] - Дата,
col[1] - № заказа,
col[2] - ФИО,
col[3] - Телефон,
col[4] - Товар в заказе,
col[5] - Общая сумма (грн.),
col[6] - Адрес получателя,
col[7] - Номер склада для НП,
col[8] - Вид доставки,
col[9] - Номер ТТН,
col[10] - Комментарий,
col[11] - URL ТТН,
col[12] - Статус ТТН к получателю,
col[13] - Статус ТТН от получателя,
col[14] - Печать ТТН,
col[15] - Печать маркировки,
col[16] - Курьерская служба,
col[17] - Тип товара,
col[18] - Email,
col[19] - Адрес отправителя,
col[20] - Номер пакета (НП),
col[21] - Стоимость доставки,
col[22] - Обратный № ТТН,
col[23] - Дата когда забрали заказ,
col[24] - Дата создания ТТН,
col[25] - Учет товара (скрытый столб.),
col[26] - Закупка,
col[27] - Cсылка на чек, CheckBox,
col[28] - Наложка,
col[29] - Страна, для международных посылок УкрПочты,
col[30] - Штат — для отправки международных посылок УкрПочты,
col[31] - Адрес для УП — улица, номер дома, квартиры для отправки посылок УкрПочты,
col[32] - Шины и Диски для НП,
col[33] - Приват24,
col[34] - redBOX,
col[35] - Телефон отправителя (НП),
col[36] - Дата платного хранения (НП)
col[37] - Рез. суммы по заказу (Розетка)

Дополнительные колонки начинаются с номера 41:
col[41] - Дополнительная колонка 1
col[42] - Дополнительная колонка 2
col[43] - Дополнительная колонка 3
col[44] - Дополнительная колонка 4
col[45] - Дополнительная колонка 5
col[46] - Дополнительная колонка 6
col[47] - Дополнительная колонка 7
col[48] - Дополнительная колонка 8
col[49] - Дополнительная колонка 9
col[50] - Дополнительная колонка 10
col[51] - Дополнительная колонка 11
col[52] - Дополнительная колонка 12
col[53] - Дополнительная колонка 13
col[54] - Дополнительная колонка 14
col[55] - Дополнительная колонка 15
col[56] - Дополнительная колонка 16
col[57] - Дополнительная колонка 17
col[58] - Дополнительная колонка 18
col[59] - Дополнительная колонка 19
col[60] - Дополнительная колонка 20

Если вы хотите добавить свои собственные колонки то вам нужно их добавить в настройках таблицы:

Например:

дополнительная колонка 1 это в коде col[41]

дополнительная колонка 2 это в коде col[42]

 и т.д.

Что бы передавать дополнительные параметры вам нужно в коде указать название параметра и номер колонки, например будет передавать данные size в дополнительную колонку 1

https://script.google.com/macros/s/AKfycbwJPs-GXIX7hIVtlYunpf_1vzuJeK-555iKeY3JVr0Hwm_2g/exec?name=Andrey&size=10

Тогда в коде нужно добавить такую строку:

if(col[16] && e.parameter.np) ss.getRange(col[16]+last).setValue(e.parameter.np); // Устанавливает службу доставки ("НП")
if(col[18] && e.parameter.email) ss.getRange(col[18]+last).setValue(e.parameter.email); // Email клиента

if(col[41] && e.parameter.size) ss.getRange(col[18]+last).setValue(e.parameter.size); // ваш параметр

Внимание! После каждого изменения кода вам нужно делать новое развертывание, что бы новый код вступил в силу!!! И использовать новую исполняемую «exec» ссылку:

RU UA