Перейти к содержимому

Регистрация

Форумы


zordon13

Регистрация: 18 фев 2013
Не в сети Активность: мар 11 2013 11:23
-----

Мои сообщения

В теме: Интеграция Бюджетного Автомата со средствами автоматизации системы WebMoney

11 марта 2013 - 08:36

Может кому пригодится... Использование gSOAP
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;

}


В теме: X14 и Capitaller

18 февраля 2013 - 11:37

Вопрос снимается... С доходных кошельков невозможно производить возврат.