qt用http协议访问webservice,用crypto的sha256签名

来源:互联网 发布:药品配伍禁忌 数据库 编辑:程序博客网 时间:2024/06/06 14:14

http://blog.csdn.net/stronghill/article/details/48731253

代码如下

[cpp] view plain copy
  1. int Form::getUserFee(const QString& userNo)  
  2. {  
  3.   
  4.     QString sUrl = "http://192.168.0.102:8430/systemsoa/services/ChargeService.ChargeServiceHttpSoap12Endpoint/";  
  5.             //sUrl += "getUserTotalArrear?bankCode=08&chgBranch=02129&chgTellerId=02754&userNo=123";  
  6.             //sUrl += "getUserTotalArrear";  
  7.     //QUrl::toPercentEncoding(sUrl);//进行url编码  
  8.   
  9.     QString bankCode = "08";  
  10.     QString chgBranch = "02129";  
  11.     QString chgTellerId = "02754";  
  12.     int tag = 0;  
  13.         //QString url = "http://192.168.0.102:8430/systemsoa/services/ChargeService.ChargeServiceHttpSoap12Endpoint/";  
  14.     QString key = "7bf6e35f7a7fe23c891d395a74382b64";  
  15.     //QString userNo = "HR000069969";  
  16.     QString orderId = "20150923135600";  
  17.     QString orders = "20150902135603";  
  18.   
  19.     LogUtil::info("FormEc.getUserFee,userNo=" + userNo);  
  20.     CryptoPP::SHA256 sha256;  
  21.     //int DigestSize = sha256.DigestSize();  
  22.     char byDigest[32];  
  23.     QString aa = "0124";  
  24.     aa = "bankcode=" + bankCode + "&chgbranch=" + chgBranch + "&chgteller=" + chgTellerId +"&orderid=" + orderId  
  25.             + "&userno=" + userNo + "&key=" + key;  
  26.     sha256.CalculateDigest((byte*)byDigest, (byte*)aa.toAscii().data(), aa.toAscii().length());  
  27.     QByteArray ba = QByteArray::fromRawData(byDigest, 32);  
  28.   
  29.     LogUtil::info("FormEc.getUserFee,sha=" + QString(ba.toHex()));  
  30.   
  31.     QString content = QString("<soap:Envelope xmlns:soap=\"http://www.w3.org/2003/05/soap-envelope\" ")  
  32.                 + "xmlns:web=\"http://webservice.netcharge.ysxn.com\" xmlns:xsd=\"http://model.netcharge.ysxn.com/xsd\">"  
  33.                 + "<soap:Header/>"  
  34.                 + "<soap:Body>"  
  35.                 + "<web:getUserTotalArrear>"  
  36.                 + "<web:paramObj>"  
  37.             + "<xsd:bankCode>" + bankCode + "</xsd:bankCode>"  
  38.                 + "<xsd:chgBranch>" + chgBranch + "</xsd:chgBranch>"  
  39.                 + "<xsd:chgTeller>" + chgTellerId + "</xsd:chgTeller>"  
  40.                 + "<xsd:chgTellerId>" + chgTellerId + "</xsd:chgTellerId>"  
  41.                 + "<xsd:orderid>" + orderId + "</xsd:orderid>"  
  42.                 + "<xsd:userNo>" + userNo + "</xsd:userNo>"  
  43.                 + "<xsd:signature>" + QString(ba.toHex()) + "</xsd:signature>"  
  44.                 + "</web:paramObj>"  
  45.                 + "</web:getUserTotalArrear></soap:Body></soap:Envelope>";  
  46.     //content = "<soap:Envelope xmlns:soap=\"http://www.w3.org/2003/05/soap-envelope\"><soap:Body/></soap:Envelope>";  
  47.   
  48.   
  49.     //LogUtil::info("FormEc.getUserFee,content=" + content);  
  50.     ecCode = "3001";  
  51.     QNetworkRequest nr;  
  52.     nr.setUrl(sUrl);  
  53.     nr.setHeader(QNetworkRequest::ContentTypeHeader, " application/soap+xml;charset=UTF-8;action=\"urn:getUserTotalArrear\"");  
  54.     netManager->post(nr, content.toAscii());  
  55.     connect(netManager, SIGNAL(finished(QNetworkReply*)),  this, SLOT(getUserFeeNet(QNetworkReply*)));  
  56.   
  57.     return 0;  
  58.   
  59. }  
  60.   
  61. void Form::getUserFeeNet(QNetworkReply* reply)  
  62. {  
  63.     QByteArray rdata = reply->readAll();  
  64.     QString sret = QString::fromLocal8Bit(rdata.data());  
  65.     LogUtil::info("FormEc.getUserFeeNet,reply=" + sret);  
  66. }  

另外,这个是用qtcreator创建的工程,要想链接crypto,在pro文件中增加了LIBS +=   -lcryptopp -lpthread