shell скрипт
#!/bin/bash wsdl2h -n cap -s -o cap.h 'https://www.capitaller.ru/ws/DoPayment.asmx?WSDL' sed -i 's/#import "soap12.h"//' cap.h soapcpp2 -j -C -Iimport cap.h
DoPaymentSoapProxyPtr CapitallerCore::getDoPaymentSoapProxy(const QString& reqn) const{ DoPaymentSoapProxy* doPaymentProxy = new DoPaymentSoapProxy(); soap_ssl_client_context(doPaymentProxy->soap, SOAP_SSL_NO_AUTHENTICATION, NULL, NULL, NULL, NULL, NULL); soap_set_recv_logfile(doPaymentProxy->soap, QString("%1/DoPaymentSoap/%2_recv").arg(getLogDir()).arg(reqn).toLocal8Bit().constData()); soap_set_sent_logfile(doPaymentProxy->soap, QString("%1/DoPaymentSoap/%2_sent").arg(getLogDir()).arg(reqn).toLocal8Bit().constData()); soap_open_logfile(doPaymentProxy->soap, 0); soap_open_logfile(doPaymentProxy->soap, 1); soap_set_imode(doPaymentProxy->soap, SOAP_C_UTFSTRING); soap_set_omode(doPaymentProxy->soap, SOAP_C_UTFSTRING); soap_clr_omode(doPaymentProxy->soap, SOAP_IO_KEEPALIVE); soap_clr_imode(doPaymentProxy->soap, SOAP_IO_KEEPALIVE); return QSharedPointer<DoPaymentSoapProxy>(doPaymentProxy); } QVariantMap CapitallerCore::sendWM(const QString& from, const QString& to, double amount, const QString& purpose) const { QString reqn = nextReqId(); QByteArray ts; ts.push_back(reqn.trimmed().toUtf8()); ts.push_back(from.trimmed().toUtf8()); ts.push_back(to.trimmed().toUtf8()); ts.push_back(QString::number(amount).toLocal8Bit().constData()); ts.push_back(purpose.trimmed().toUtf8()); szptr sdata; _signer->Sign(ts.data(),sdata); DoPaymentSoapProxyPtr doPaymentProxy = getDoPaymentSoapProxy(reqn); struct __SubmitXmlParams { _cap1__SendWM *sx; _cap1__SendWMResponse *sr; DoPaymentSoapProxyPtr _doPaymentProxy; __SubmitXmlParams(const char* signer_wmid, int firmId, int reqn, const char* from, const char* to, const char* purpose, double amount, const char* sign,DoPaymentSoapProxyPtr doPaymentProxy) { sx = new _cap1__SendWM(); sr = new _cap1__SendWMResponse(); sx->firm_USCOREid = firmId; sx->paymentid = 0; sx->from = strdup(from); sx->to = strdup(to); sx->purpose = strdup(purpose); sx->sender_USCOREwmid = strdup(signer_wmid); sx->transn = reqn; sx->amount = strdup(QString::number(amount).toLocal8Bit().constData()); sx->signstr = strdup(sign); _doPaymentProxy = doPaymentProxy; } ~__SubmitXmlParams() { if (sr) { delete sr; } if (sx) { free(sx->from); free(sx->to); free(sx->purpose); free(sx->sender_USCOREwmid); free(sx->amount); free(sx->signstr); delete sx; } _doPaymentProxy->destroy(); } } sm_params(_signerWMID.trimmed().toUtf8().constData(),_firmId.toInt(), reqn.toInt(), from.trimmed().toUtf8().constData(), to.trimmed().toUtf8().constData(), purpose.trimmed().toUtf8().constData(), amount,sdata.operator const char * const(),doPaymentProxy); QVariantMap res; Log::debug(QString("Send req [%1]...").arg(reqn)); if (doPaymentProxy->SendWM(sm_params.sx, sm_params.sr) == SOAP_OK) { Log::debug(QString("Reciv req [%1]...").arg(reqn)); if(sm_params.sr->SendWMResult == 0) { res["comiss"] = sm_params.sr->comiss; res["paymentid"] = sm_params.sr->paymentid; res["wmtranid"] = sm_params.sr->wmtranid; } else { throw exc::Message(QString().arg(sm_params.sr->SendWMResult)); } } else { QString lol(doPaymentProxy->soap_fault_string()); throw exc::Message(lol); } return res; }