首页 > 解决方案 > Qt Woocommerce API 返回先前的订单数据

问题描述

我正在编写一个 Qt 桌面应用程序,以支持通过 woocommerce REST API 存储和检索 Woocommerce 商店的订单元数据。更新元数据值后,Qt 继续报告之前的值。

使用原始数据填充表格小部件(请参阅获取代码)。用户编辑数据,put 代码用于更新 woocommerce 中的订单。如果用户转到不同的订单,然后返回到之前编辑的订单,则获取代码会带回之前的数据。

例如,使用下面的 put 代码,我正在更新特定订单的元数据。在示例中,“_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”

我可以验证 put 是否成功,如 Postman 所示:

"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:1”,尽管 Postman 显示更新成功(38:2)。感谢对此的任何想法。

标签: qtrestapiwoocommerce

解决方案


事实证明,此问题与托管站点拥有的缓存插件有关。我关闭了他们的缓存插件,现在我的数据按预期立即返回。

我仍然很好奇为什么邮递员似乎不受影响。那是另一天。


推荐阅读