qt - 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)。感谢对此的任何想法。
解决方案
事实证明,此问题与托管站点拥有的缓存插件有关。我关闭了他们的缓存插件,现在我的数据按预期立即返回。
我仍然很好奇为什么邮递员似乎不受影响。那是另一天。
推荐阅读
- php - 子要求方法可选签名
- rx-java - 为什么主线程不等待调度程序线程的完成?
- r - 如何在按其他列分组时对 data.table 中的列子集应用函数?
- swift - 如何检测是否点击了 TabelCell 内的 UITextView 内的链接,Swift
- c# - 在 C# 中使用清除与使用 ConcurrentDictionary 重置对象?
- compiler-errors - 无法编译 Mesa,x.org
- sql - Visual Studio SSDT 查找数据类型不匹配
- python - Flask app.py 在 pycharm 中停止工作
- c# - 在 C# 中,如何使用特殊字符正确编码 QBXML 请求
- haskell - 一类改变类型的替换