Нужна помощь в преобразовании скручиваемого API-запроса в Google APP Script. - PullRequest
0 голосов
/ 06 января 2019

Согласно документации API, запрос curl должен быть:

$data =array ('currentPage' => 1,
'itemsPerPage' => 10
);
$hash = sha1(http_build_query($data) . sha1('password'));
$requestData = array(
'code' => ‘usercode',
'username' => 'username',
'data' => $data,
'hash' => $hash);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://mktp-stage.emag.ro/api-3/vat/read');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($requestData));
$result = curl_exec($ch);

Мой скрипт приложения:

var headers = {
"Content-Type": "application/json",
"Authorization": "Basic "+ Utilities.base64Encode(user+":"+password)
};

var options = {
"method" : "POST",
"headers" : headers,
"payload" : {
"modifiedAfter" : "2018-12-31 01:00:00",
"status" : 4
}
};

var response = UrlFetchApp.fetch(url,options);

Я получаю результаты, но не отфильтрован по "ifiedAfter ":" 2018-12-31 01:00:00 ", «статус»: 4. Что я делаю не так?

ОБНОВЛЕНИЕ: я использовал пример Dimu Designs, но результаты все еще не отфильтрованы. Они (владелец API) сказали, что я должен отправить фильтры в массиве, как в запросе curl, поскольку API не принимает запросы json, а только возвращает формат json:

 $data =
    array (
        'currentPage' => 1,
        'itemsPerPage' => 10
);

$hash = sha1(http_build_query($data) . sha1('password'));

$requestData = array(
    'code' => ‘usercode',
    'username' => 'username',
    'data' => $data,
    'hash' => $hash);


curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($requestData));

Спасибо!

1 Ответ

0 голосов
/ 06 января 2019

Ваш код страдает от двух проблем.

Во-первых, есть странное предостережение со скриптом Apps, в котором заголовок типа контента задается как свойство объекта options, а не как свойство объекта headers.

Во-вторых, вам нужно JSON.stringify ваш объект полезной нагрузки.

Таким образом, ваш код должен выглядеть так:

var headers = {
    "Authorization":"Basic "+ Utilities.base64Encode(user+":"+password)
};

var payload = JSON.Stringify({
    "modifiedAfter":"2018-12-31 01:00:00",
    "status":4
});

var options = {
    "method":"POST",
    "contentType":"application/json",
    "headers":headers,
    "payload":payload
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...