Как получить доступ к Woocommerce API с Flutter?

Woocommerce API реализует Oauth1 с ключом / секретом потребителя.

Вот мой код для доступа к WordPress API с Flutter

Future<String> getData() async {

var response = await http.get(
    Uri.encodeFull( "http://jalania.com/wp-json/wp/v2/posts" ),
    headers: {"Accept": "application/json"});
this.setState(() {
  data = JSON.decode(response.body);
});
}

Я изменил URL-адрес API на Woocommerce API, http://jalania.com/wp-json/wc/v2/products и получил пустые ответы.

Кто-нибудь знает, как получить доступ к Woocommerce API с флаттером?

Официальный пакет уже вышел. pub.dartlang.org/packages/woocommerce_api

mn128b 11.04.2019 04:54
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
3
1
5 098
7

Ответы 7

Необходимо добавить авторизацию в WooCommerce API. Не знаю, как добавить во Flutter параметр авторизации. Но вам нужно добавить что-то вроде кода ниже.

Future<String> getData() async {

var response = await http.get(
    Uri.encodeFull( "http://jalania.com/wp-json/wp/v2/posts" ),
    authorization:{"consumer_key": "XXXXXXXX1212","consumer_secret":"XXXXX1212"},
    headers: {"Accept": "application/json"});
this.setState(() {
  data = JSON.decode(response.body);
});
}

Вы можете использовать это: https://github.com/lakexyde/dart-woocommerce-api. Хотя все еще нужна чистка, но она работает.

Map<String,dynamic> params = {
  "url": 'https://example.com',
  "consumerKey": "ck_XXXXXXXXXXXXXXXXXXXXXXXXX",
  "consumerSecret": "cs_XXXXXXXXXXXXXXXXXXXXXXXX",
  "wpAPI": true,
  "version": 'wc/v2'
}

А потом:

WooCommerceAPI wooAPI = new WooCommerceAPI(params);

Надеюсь, поможет.

List<Widget> products = [];

Future getProducts() async {

    /// Initialize the API
    WooCommerceAPI wc_api = new WooCommerceAPI(
        "https://www.yourwebsite.com",
        "ck_your_consumer_key",
        "cs_your_consumer_secret"
    );

    /// Get data using the endpoint
    var p = await wc_api.getAsync("products");
    return p;
}

Вам может помочь: https://pub.dev/packages/woocommerce_api#-installing-tab-

Вот что я использую: https://pub.dev/packages/woosignal

Он также возвращает объектные модели, вот некоторая документация - https://woosignal.com/docs/api/1.0/installing-flutter-sdk

Packages get

dependencies:
  woosignal: ^1.0.2
// CONFIG FOR WOOSIGNAL
var wsConfig = {
"appKey":"your app key",
"debugMode":true
};

// CREATING AN INSTANCE
WooSignal.getInstance(config: wsConfig).then( (wcStore) {

    wcStore.getProducts().then( (products) {
        print(products[0].name);
    });

});

Если вам нужен полноценный Woocommerce Sdk с функцией Plug and Play, который обрабатывает для вас аутентификацию, продукты, клиентов, доставку и т. д., Вы можете использовать библиотеку Woo Commerce SDK для флаттера на https://pub.dev/packages/woocommerce

Woocommerce myWoocommerce = WooCommerce(baseUrl: yourBaseUrl, consumerKey: yourConsumerKey, consumerSecret: consumerSecret);

Затем просто зарегистрируйте своего нового клиента.

WooCustomer newCustomer = WooCustomer(id: id, firstName:firstName, etc);
myWoocommerce.createCustomer(newCustomer); //Returns the created Woocommerce customer.

Я пытался использовать документ api flutter wooCommerce https://pub.dev/packages/woocommerce_api#-readme-tab-

Но в моем случае это не сработало, там есть consumerKey и consumerSecret с URL-адресом. В Postman он возвращает значение но не в коде Flutter. В моем проекте работают следующие шаги

Future<dynamic> getData() async {
    var response = await http.get("URL",
      headers: {
        "Authorization": "AuthorizationToken"},
    ).catchError(
          (error) {
        return false;
      },
    );

    return json.decode(response.body);
  }

Где «Авторизация» можно получить с помощью Почтальона. После попадания по URL-адресу с помощью consumerKey и consumerSecret, Postman генерирует AuthorizationToken, после чего вы можете использовать AuthorizationTokenin таким образом.

Это мое решение, если вам нужны пользовательские данные:

Сначала я установил пакет https://pub.dev/packages/woocommerce, но их api woocommerce.getProducts() не дал необходимой мне информации (пользовательские данные внутри acf), поэтому я сделал следующее:

  1. Сделал форк проекта github: https://github.com/RayOkaah/woocommerce

  2. Я клонировал разветвленный проект с помощью терминала git clone [FORKED PROJECT URL] (пример git clone https://github.com/MireilleKhalifeh/woocommerce.git)

  3. Я внес свои изменения в файл products.dart (расположенный внутри / wocommerce / lib / models /): я создал класс Acf, а затем добавил переменную Acf в класс WooProduct, как и остальные переменные.

  4. Протолкнул мои изменения.

  5. В моем проекте flutter в pubspec.yaml я добавил в разделе зависимостей:

    dependencies:
    
      woocommerce:
        git: [FORKED PROJECT URL] #for example https://github.com/MireilleKhalifeh/woocommerce.git
    

Теперь я могу получить доступ к данным внутри класса Acf из их класса Product.

Future getProducts() async {
  WooCommerce woocommerce = WooCommerce(
    baseUrl: '[url]',
    consumerKey: '[consumerKey]',
    consumerSecret: '[consumerSecret]',
    isDebug: false);
  Machine.products = await woocommerce.getProducts();
  return Future.value(MyHomePage());
}

И я получаю к нему доступ так:

Machine.products[0].acf.model

Я надеюсь, что это поможет.

Другие вопросы по теме