Я пишу настольное приложение 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).Цените любые мысли об этом.