• qt wsdl 接口调用(gsoap)


    qt  wsdl的接口调用真没c# 好用。c#一分钟就能搞定,qt 呵呵。。。

    算了,开始正题:

    第一步:下载 gsoap

    1 、 下载链接:https://www.genivia.com/products.html,下载开源版本

     2、 解压文件 ,将解压后的文件随便放个地方

    第二步、 用gsoap生成接口文件

    1 、用电脑的 “命令处理器” (cmd.exe)

    2.、将cmd路径指定到   gsoap_2.8.122\gsoap-2.8\gsoap\bin\win64 下

     3、生成接口包含文件 “myESealSoap.h”,

    输入 : wsdl2h -o myESealSoap.h  http://xxxxxxxxxxx/ImpExpService?wsdl

    会在 gsoap_2.8.122\gsoap-2.8\gsoap\bin\win64 下面生成 myESealSoap.h 文件。

    wsdl2h : gsoap的程序

    myESealSoap.h: 包含接口的文件,自己随便起个

    http://xxxxx/ImpExpService?wsdl : 接口url

     4、 生成可调用接口文件

    继续输入: soapcpp2 myESealSoap.h -I C:\gsoap_2.8.122\gsoap-2.8\gsoap\import

    C:\gsoap_2.8.122\gsoap-2.8\gsoap\import :  这个根据自己放的位置修改,一定要指定到 import 文件

     

     

     5、 QT程序目录下面建个文件夹, 将上面这些文件拷贝过去,  并将 gsoap_2.8.122\gsoap-2.8\gsoap 下的 stdsoap2.cpp  stdsoap2.h 拷贝进去

     

     最终需要的文件就是这些

    第三步: qt工程调用接口

    1. 在 .pro 文件中 添加

    1. SOURCES += \
    2. myGsoap/soapC.cpp \
    3. myGsoap/soapClient.cpp \
    4. myGsoap/stdsoap2.cpp\
    5. HEADERS += \
    6. myGsoap/soapH.h \
    7. myGsoap/soapStub.h \
    8. myGsoap/stdsoap2.h
    9. INCLUDEPATH += ./myGsoap
    10. LIBS += -lws2_32 # 这个特别重要,一定要加

     2. 在主程序中,添加 头文件

    1. #include "myGsoap/soapH.h"
    2. #include "myGsoap/ImpExpServiceSoap11Binding.nsmap"
    3. #include "myGsoap/soapStub.h"
    4. #include "myGsoap/stdsoap2.h"

    3. 调用接口 

    1. void MainWindow::on_pushButton_clicked()
    2. {
    3. struct soap m_soap;
    4. soap_init(&m_soap);
    5. soap_set_mode(&m_soap,SOAP_C_UTFSTRING); //解决gsoap中文乱码问题
    6. _ns1__eUserLogin req; // 传递数据, 和接口名对应 _ns1__xxxxx
    7. _ns1__eUserLoginResponse res; // 接收数据, 和接口名对应 _ns1__xxxxxResponse
    8. // 生成json 数据
    9. QJsonObject jsonObj;
    10. jsonObj.insert ("userAccount",ui->userName->text().trimmed());
    11. jsonObj.insert ("password",ui->passWord->text().trimmed());
    12. QJsonDocument document(jsonObj);
    13. std::string jsonString = document.toJson(QJsonDocument::Compact).toStdString(); // json 转为std::string
    14. req.jsonPara = &jsonString; // 添加要传递的参数 (根据接口参数格式传递)
    15. qDebug() << document.toJson(QJsonDocument::Compact);
    16. // 调用接口 soap_call__ns1__接口名称(); soap_call__ns1 这个是固定的
    17. if (soap_call___ns1__eUserLogin(&m_soap,NULL,NULL, &req, res) == SOAP_OK)
    18. {
    19. qDebug()<<"接口调用成功";
    20. }
    21. if(m_soap.error != 0){
    22. //获取错误提示
    23. QString errStr = QString::fromLocal8Bit(*soap_faultstring(&m_soap));
    24. qDebug()<< "错误提示: " << errStr;
    25. }
    26. else {
    27. //获取结果字符串
    28. QByteArray strRes = res.return_->c_str();
    29. // 拆解json
    30. QJsonDocument doc =QJsonDocument::fromJson(strRes);
    31. if(doc.isObject())
    32. {
    33. QJsonObject obj =doc .object();
    34. qDebug()<< obj.value("retMsg").toString();
    35. }
    36. // 打印整个返回结果
    37. qDebug()<"utf8")->toUnicode(strRes);
    38. }
    39. soap_end(&m_soap);
    40. soap_done(&m_soap);
    41. }

    最后:

     这个东西真心难用, 如果接口发生改变, 就得重新生成接口文件, 麻烦的要死

  • 相关阅读:
    开路、断路和短路区别
    由浅入深,带你用JavaScript实现响应式原理(Vue2、Vue3响应式原理)
    安装nvm
    【C++ 学习 ㉕】- 万字详解 unordered_map 和 unordered_set(哈希表的查找和容器的模拟实现)
    听GPT 讲Rust源代码--library/std(7)
    漏斗分析模型
    【Redis底层解析】链表类型
    URL 路径中包含百分号需要在 Swift 中的特殊处理
    自然语言处理NLP程序包(NLTK/spaCy)使用总结
    如何将dwg文件转成kml文件
  • 原文地址:https://blog.csdn.net/chen1231985111/article/details/126125568