
(前提是你已经有了腾讯云数据库哦)
新建QT工程不多说
在.pro文件中加入
QT += network
在.h文件中加入头文件
#include#include
腾讯微信小程序开发文档中对获取小程序全局唯一后台接口调用凭据(access_token)的描述为
请求地址
GET https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
使用微信公众平台接口调试工具调试显示成功即可。
因为需要http访问,我们使用QNetworkAccessManager完成访问数据 *** 作的控制。
在.h中定义
signals:
bool managerLoaded(bool);
private slots:
void initial();
void getAccess_token();
void slotGetAccess_token();
QString getAccess_Token();
void managerLoad(QString account,QString pw);
QString slotManagerLoad();
QJsonObject getManagerInfo();
void on_select_clicked();
void on_initial_clicked();
void getNetImage(QString imageName, QString imageUrl);
void slotGetImage(QNetworkReply* r);
void imageLoaded(QPixmap pixmap, QString imageName);
private:
QNetworkAccessManager *manager;
QNetworkRequest *request;//网络请求的URL,Header参数等信息
QNetworkReply *reply;//获知网络 *** 作中的各种状态。当QNetworkReply发出readyRead()信号后,获取应答对象中的数据。
QTimer *timer = new QTimer(this);//自动获取最新凭证
QString Access_Token;//调用凭证
int Access_Token_expries;//剩余凭证有效时间
QJsonObject managerObject;//由于小程序的云数据库中数据为JSON数据包,因此使用QJsondocument来对获取的数据进行处理
void NetDataConnect::initial()
{
manager = new QNetworkAccessManager(this);
request = new QNetworkRequest();
getAccess_token();
connect(timer, SIGNAL(timeout()), this, SLOT(getAccess_token()));
timer->start(Access_Token_expries);
}
void NetDataConnect::getAccess_token()
{
request->setUrl(QUrl(tr("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%1&secret=%2").arg(appid,secret)));//appid,secret参数为小程序AppID,AppSecret
request->setHeader(QNetworkRequest::ContentTypeHeader,"application/json; encoding=utf-8");
reply = manager->get(*request);
connect(reply,SIGNAL(readyRead()),this,SLOT(slotGetAccess_token()));
}
void NetDataConnect::slotGetAccess_token()
{
QByteArray ba = reply->readAll();
QJsondocument js = QJsondocument::fromJson(ba);
Access_Token = js["access_token"].toString();
Access_Token_expries = js["expires_in"].toInt()-200;//为了提前更新凭证,提前200S
timer->setInterval(Access_Token_expries*1000);
}
QString NetDataConnect::getAccess_Token()
{
return Access_Token;//返回获取到的Access_Token值
}
腾讯微信小程序开发文档中对数据库查询记录描述为:
请求地址
POST https://api.weixin.qq.com/tcb/databasequery?access_token=ACCESS_TOKEN
因为需要POST发送数据,我们使用QNetworkAccessManager完成访问数据 *** 作的控制。使用QJsonObject处理需要发送的data数据(JSON)。
void NetDataConnect::managerLoad(QString account,QString pw)
{
request->setUrl(QUrl(tr("https://api.weixin.qq.com/tcb/databasequery?access_token=%1").arg(Access_Token)));
QString query = tr("db.collection('login').where({_id: '%1',password: '%2'}).get()").arg(account,pw);//login为查询的数据集,_id和password为数据集字段,此行会获取符合条件的整个数据集
QString env = "cloud1";//env为自己小程序云数据库的云环境ID,可在云开发控制台中找到
QJsonObject obj
{
{"query",query},//query为微信小程序云数据库的查询语句,云数据库介绍可查看微信官方文档中的介绍。
{"env",env}
};
QByteArray objBy = QJsondocument(obj).toJson();//将JSON对象obj用QJsondocument转为QByteArray字节数组,当QNetworkReply发出readyRead()信号后,获取应答对象中的数据。
reply = manager->post(*request,objBy);
connect(reply,SIGNAL(readyRead()),this,SLOT(slotManagerLoad()));
}
void NetDataConnect::slotManagerLoad()
{
QByteArray ba = reply->readAll();
QJsondocument js = QJsondocument::fromJson(ba);
int totalInt = js["pager"].toObject()["Total"].toInt();
QJsonValue dataValue = js["data"].toArray().first();
qDebug()<
查询到的表单如下所示,做用find函数和substr函数做字符解析即可:
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)