API REST WooCommerce с авторизацией заголовка Google UrlFetchApp не работает - PullRequest
1 голос
/ 18 апреля 2020

В настоящее время

Я использую API REST WooCommerce в моих скриптах Google со следующим рабочим кодом:


    var ck = "ck_longstringlongstringlongstringlongstring";
    var cs = "cs_longstringlongstringlongstringlongstring";
    var website = "https://www.mywebsite.com.au";

    var url = website + "/wp-json/wc/v3/orders?consumer_key=" + ck + "&consumer_secret=" + cs; 

    var options =
        {
          "method": "GET",
          "Content-Type": "application/x-www-form-urlencoded;charset=UTF-8",
          "muteHttpExceptions": true,
        };

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

ПРОБЛЕМА

Чтобы повысить безопасность, я хочу поместить ключ и секретный ключ в заголовок, но не могу заставить работать следующий скрипт

   var url = website + "/wp-json/wc/v3/orders; 

   let authHeader = 'Basic ' + Utilities.base64Encode(ck + ':' + cs);

    var options =
        {
          "method": "GET",
          "Content-Type": "application/x-www-form-urlencoded;charset=UTF-8",
          "muteHttpExceptions": true,
          "headers": {"Authorization": authHeader},
        };

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

Текущий результат = {"code":"woocommerce_rest_cannot_view","message":"Sorry, you cannot list resources.","data":{"status":401}}

Ожидаемый результат = JSON заказов

Это проблема с моим кодом? Или с WooCommerce API или Google Scripts?

1 Ответ

0 голосов
/ 18 апреля 2020

Есть несколько проблем с вашим кодом.

С UrlFetchApp.fetch() вам нужно использовать contentType вместо Content-Type.

Однако в этом случае вам даже не нужно устанавливать его, поскольку application/x-www-form-urlencoded является значением по умолчанию. То же самое касается свойства method; по умолчанию используется значение GET.

Более того, если вы хотите ошибиться с осторожностью, используйте Utilities.base64EncodeWebSafe(data, charset) для кодирования base64 ваших учетных данных вместо не-безопасной для Интернета версии.

let url = website + "/wp-json/wc/v3/orders"; 
let encoded = Utilities.base64EncodeWebSafe(ck + ':' + cs, Utilities.Charset.UTF_8);

let options = {
    "muteHttpExceptions":true,
    "headers": {
        "Authorization": "Basic " + encoded
    }
};

let result = UrlFetchApp.fetch(url, options);
result = JSON.parse(result);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...