2013-09-13 4 views
0

Попробовал много вариантов обновления продукта в ECWID с помощью метода puts(), установленного в Google Apps Script UrlFetchApp.fetch(), но не удалось. Ниже приведены различные способы написания кода и тестирования, но я получаю разные типы ошибок.Метод ввода UrlFetch с использованием скрипта Google Apps

Я думаю, я пропустил небольшую вещь, которая не в состоянии понять это. Пожалуйста, помогите мне исправить эту проблему.

API: Ecwid Продукты API (http://kb.ecwid.com/w/page/25285101/Product%20API#RESTAPIMethodupdateaproduct) Метод: PUT (обновить сведения о продукте)


Пример кода 1: -

function updateProducts(){ 
var products_authkey = "xxxxxxxx"; 

    try{ 
    var url ="https://app.ecwid.com/api/v1/xxxxx/product?id=xxxxxxxx&secure_auth_key="+products_authkey; 
    var payload = {price:62755}; 

    var options ={method:"put",ContentType:"application/json",payload:payload};  
    var result = UrlFetchApp.fetch(url, options);  
    var response = result.getContentText(); 
    }catch(e){ 
    Browser.msgBox(e); 
    } 
} 

Ошибка: - "{" Ошибка »:« OTHER »,« errorMessage »:« Анализ ошибок JSON: текст JSONObject должен начинаться с «{« при знаке 0 »}»


Версия 2: - Пробовал преобразование объекта в json stringify, но с той же ошибкой.

function updateProducts_version2(){ 
    try{ 
    var url ="https://app.ecwid.com/api/v1/xxxx/product?id=xxxxx&secure_auth_key="+products_authkey; 
    var payload = {price:62755}; 
    var payload_json = Utilities.jsonStringify(payload); 
    var options ={method:"put",ContentType:"application/json",payload:payload_json,muteHttpExceptions:true}; 
    var result = UrlFetchApp.fetch(url, options); 
    var response = result.getContentText(); 
    var res_code = result.getResponseCode(); 
    var x = 1; 
    }catch(e){ 
    Browser.msgBox(e); 
    } 
} 

Ошибка: - "{ "ошибка": "ДРУГИЕ", "ErrorMessage": "Ошибка разбора JSON: Текст JSONObject должен начинаться с '{' на символ 0"}"


версии 3: - (Пробовал прохождение secure_auth_key с помощью авторизацией в заголовках)

function updateProducts_version3(){ 
    try{ 
    var url ="https://app.ecwid.com/api/v1/xxxxx/product?id=xxxxx"; 
    var payload = {price:62755}; 
    var headers = {Authorization: 'xxxxxxx'}; 
    var options = {headers:headers,method:"put",ContentType:"application/json",payload:payload}; 
    var options ={method:"put",ContentType:"application/json",payload:payload,muteHttpExceptions:true}; 
    var result = UrlFetchApp.fetch(url, options); 
    var response = result.getContentText(); 
    var res_code = result.getResponseCode(); 
    var x = 1; 
    }catch(e){ 
    Browser.msgBox(e); 
    } 
} 

ошибка: - { "ошибка": "ДРУГИЕ", "ErrorMessage": "ключ API не найден в параметрах запроса"}


Также обратите внимание, что я пробовал использовать плагин Chrome для Chrome, он обновляется правильно. Это означает, что проблема связана с использованием UrlFetch. Пожалуйста, помогите мне устранить эту проблему ...

Спасибо заранее ...

+0

было бы просто, что вам нужно поставить свою полезную нагрузку в кавычки? – patt0

+0

Вы пытались использовать параметр «Отладка» (возможно, вам придется удалить свою попытку)? Тогда вы сможете точно увидеть, как выглядит полезная информация. Мне любопытно, какая строка бросает ошибку. У меня нет доверия к службе, но я получаю ожидаемую ошибку 400 в строке 'UrlFetchApp.fetch'. – fooby

+0

@patto: попробовал иметь объект в кавычках, как показано ниже, а затем получить ту же ошибку, что и раньше: var payload = "{price: 62758}"; – pavan

ответ

1

Полномочия необходимы, чтобы проверить это, так что до вас. Вероятно, вам нужно как stringify & кодировать полезную нагрузку. У вас также была неправильная капитализация на contentType, которую вы могли проверить с помощью UrlFetchApp.getRequest().

function updateProducts_version2a(){ 
    try{ 
    var url ="https://app.ecwid.com/api/v1/xxxx/product?id=xxxxx&secure_auth_key="+products_authkey; 
    var payload = {price:62755}; 
    var payload_json = encodeURIComponent(JSON.stringify(payload)); 
    var options ={method:"put",contentType:"application/json",payload:payload_json,muteHttpExceptions:true}; 
    var result = UrlFetchApp.fetch(url, options); 
    var response = result.getContentText(); 
    var res_code = result.getResponseCode(); 
    var x = 1; 
    }catch(e){ 
    Browser.msgBox(e); 
    } 
} 

Это следующая версия казался работать - подавляя изменение цены и использование ID в магазине, он передразнил продукт «получить», согласно документации вы ссылочная. На этот раз сообщение об ошибке может указывать на некоторый уровень успеха: «У этой учетной записи Ecwid нет доступа к API Ecwid. Пожалуйста, подумайте об обновлении».

Вы заметите, что URL-адрес был отделен, а основная информация заголовка идентификатора продукта и ключа auth вместе.

function updateProducts_version4(){ 
    try{ 
    var url ="https://app.ecwid.com/api/v1/xxxx/product"; 
    var payload = encodeURIComponent(JSON.stringify({ 
     price:62755 
     })); 
    var headers = {id:'xxxx', 
        secure_auth_key: 'xxxxxxx' 
        }; 
    var options = { 
     headers:headers, 
     method:"put", 
     contentType:"application/json", 
     muteHttpExceptions:true, 
     payload:payload 
    }; 
    var request = UrlFetchApp.getRequest(url, options); // Debug: check what would be fetched 
    var result = UrlFetchApp.fetch(url, options); 
    var response = result.getContentText(); 
    var res_code = result.getResponseCode(); 
    var respHeaders = result.getHeaders(); /// 
    debugger; 
    }catch(e){ 
    Logger.log(e); 
    //Browser.msgBox(e); 
    } 
} 

Без ваших верительных грамот, это насколько я могу принять его ... расскажите, как это работает для вас.

+0

updateProducts_version2a – pavan

+0

Спасибо, что посмотрели на это и предоставили свои предложения. К сожалению, это не сработало. Вы можете найти сообщение об ошибке msg следующим образом: updateProducts_version2a response: «{« error »:« OTHER »,« errorMessage »:« Анализ ошибок JSON: текст JSONObject должен начинаться с «{« в символе 1 »}« response_code: 400 – pavan

+0

Второе предложение. Использовали предоставленный код, который дает мне внутреннюю ошибку сервера (error_code: 500), которая также не работает. Спасибо за ваши предложения и дайте мне знать, если какой-либо другой вариант доступен, увидев коды ошибок. – pavan

Смежные вопросы