JoeyBloggs
JoeyBloggs

Reputation: 13

How can i add a SSL Cert to my code in QT

What I'm trying to do is send a https request to https://mapi.alipay.com/gateway.do? in QT and get a response. Whenever I send the request I get the error below.

qt.network.ssl: QSslSocket: cannot call unresolved function SSLv23_client_method qt.network.ssl: QSslSocket: cannot call unresolved function SSL_CTX_new qt.network.ssl: QSslSocket: cannot call unresolved function SSL_library_init qt.network.ssl: QSslSocket: cannot call unresolved function ERR_get_error qt.network.ssl: QSslSocket: cannot call unresolved function ERR_get_error Failure "Error creating SSL context ()"

I was told I need a SSL cert so I used

openssl s_client -connect mapi.alipay.com:443 -showcerts 

To get the cert. But when ever

How can I add a SSL Cert to my project code in QT?

    #include <QCoreApplication>
    #include <QDebug>
    #include <QNetworkAccessManager>
    #include <QNetworkRequest>
    #include <QNetworkReply>
    #include <QUrl>
    #include <QUrlQuery>
    #include <QFile>
    #include <QSslSocket>

    void sendRequest();

    int main(int argc, char *argv[])
    {
        QCoreApplication a(argc, argv);
        sendRequest();
        return a.exec();
    }
    void sendRequest(){



    // create custom temporary event loop on stack
    QEventLoop eventLoop;

    // "quit()" the event-loop, when the network request "finished()"
    QNetworkAccessManager mgr;
    QObject::connect(&mgr, SIGNAL(finished(QNetworkReply*)), &eventLoop, SLOT(quit()));

    // the HTTP request
    QNetworkRequest req( QUrl( QString("https://mapi.alipay.com/gateway.do/_input_charset=UTF-8&currency=USD&notify_url=10.237.221.84:80&out_trade_no=123456789&partner=2088101122136241&sign=760bdzec6y9goq7ctyx96ezkz78287de&subject=Coke&sign_type=MD5&service=create_forex_trade&total_fee=0.01") ) );
    QNetworkReply *reply = mgr.get(req);
    eventLoop.exec(); // blocks stack until "finished()" has been called

    if (reply->error() == QNetworkReply::NoError) {
        //success
        qDebug() << "Success" <<reply->readAll();
        delete reply;
    }
    else {
        //failure
        qDebug() << "Failure" <<reply->errorString();
        delete reply;
    }
}

Upvotes: 1

Views: 3210

Answers (1)

Elijan9
Elijan9

Reputation: 1304

To add additional SSL certificates to your Qt program, you can use:

QSslSocket::addDefaultCaCertificates("example.pem");

However, I don't think that solves any of your errors. The errors in your question are not related to a missing SSL certificate, but to missing SSL functions. You are probably using an outdated SSL library? (e.g. older or incompatible versions of libeay32.dll and ssleay32.dll on Windows?)

Upvotes: 1

Related Questions