API Qt Woocommerce возвращает данные предыдущего заказа - PullRequest
0 голосов
/ 22 декабря 2018

Я пишу настольное приложение Qt для поддержки хранения и извлечения метаданных заказа для магазина Woocommerce через API REST woocommerce.После обновления значения метаданных Qt продолжает сообщать о предыдущем значении.

Виджет таблицы заполняется исходными данными (см. Код get).Пользователь редактирует данные, а введенный код используется для обновления заказа в woocommerce.Если пользователь переходит к другому порядку, а затем возвращается к ранее отредактированному, код получения возвращает предыдущие данные.

В качестве примера, используя приведенный ниже код вставки, я обновляю метаданныеконкретный заказ.В этом примере исходное значение «_shipment» равно «38: 1».Я хочу изменить его на "38: 2".

Введите код:

void MainWindow::ULShippmentItemMeta()
{
    //Put order item metadata back to woo

    //{"meta_data":[{"key":"_shipment","value":"38:2"}]}
    QByteArray qba = "{\"meta_data\":[{\"key\":\"_shipment\",\"value\":\"38:2\"}]}";

    QNetworkAccessManager *m_nam_putordermeta = new QNetworkAccessManager(this);

    connect(m_nam_putordermeta, SIGNAL(finished(QNetworkReply*)), this, SLOT(PostOrderItemMetaFinished(QNetworkReply*)));

    QUrl url(urlpath + "/wp-json/wc/v3/orders/853";

    QByteArray postDataSize = QByteArray::number(qba.size());
    QNetworkRequest request(url);

    request.setRawHeader("Content-Type", "application/json");
    request.setRawHeader("Content-Length", postDataSize);

    QString concatenated = api_key + ":" + api_secret;
    QByteArray data = concatenated.toLocal8Bit().toBase64();
    QString headerData = "Basic " + data;
    request.setRawHeader("Authorization", headerData.toLocal8Bit());

    m_nam_putordermeta->put(request, qba);
}

void MainWindow::PostOrderItemMetaFinished(QNetworkReply *reply)
{
    qWarning() << ("Server Replied With Code " + reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toString() +
                       reply->attribute(QNetworkRequest::HttpReasonPhraseAttribute).toString());

    reply->deleteLater();

}

Отладчик Qt говорит:

"Сервер ответил с кодом 200OK"

Я могу убедиться, что сдача прошла успешно, как это видно на примере Почтальона:

"meta_data": [
        {
            "id": 10362,
            "key": "_shipment",
            "value": "38:2"
        }
    ]

Однако при использовании кода get для извлечения значения после обновления он продолжает показыватьпредыдущее значение.

Получить код:

    void MainWindow::on_twOrders_cellDoubleClicked()
    {
        //The order was double clicked, so lets pull it!
        QNetworkAccessManager *m_nam_singleorder = new QNetworkAccessManager(this);

        connect(m_nam_singleorder, SIGNAL(finished(QNetworkReply*)), this, SLOT(dlSingleOrderFinished(QNetworkReply*)));

        QUrl url(urlpath + "/wp-json/wc/v3/orders/853");
        QUrlQuery query;

        url.setQuery(query.query());

        QNetworkRequest request(url);

        QString concatenated = api_key + ":" + api_secret;
        QByteArray data = concatenated.toLocal8Bit().toBase64();
        QString headerData = "Basic " + data;
        request.setRawHeader("Authorization", headerData.toLocal8Bit());

        m_nam_singleorder->get(request);
    }

void MainWindow::dlSingleOrderFinished(QNetworkReply *reply)
{            
        //Gather the order data from woo, returned in JSON
        QJsonDocument d = QJsonDocument::fromJson(reply->readAll());
        qWarning() << d;
}

Отладчик Qt Вывод GET:

"meta_data": [
            {
                "id": 10362,
                "key": "_shipment",
                "value": "38:1"
            }
        ]

Я не понимаю, почему Qt продолжает показывать "38: 1msgstr "несмотря на то, что почтальон показал, что обновление прошло успешно (38: 2).Цените любые мысли об этом.

1 Ответ

0 голосов
/ 26 декабря 2018

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

Мне все еще интересно, почему почтальон кажется незатронутым.Это на другой день.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...