| 
| 
 | Вопрос # 1 654/ вопрос открыт / | 
 |  Здравствуйте!Необходимо нарастить код в модуле программы для расширения ее функциональности. Программа является системой ввода кассовых платежей по протоколу HTTPS.
 Хочу разобраться как это сделать, пример есть. Помогите "не глупому человеку" разобраться
 Приложение:Переключить в обычный режим  TMegaComProvider } constructor TMegaComProvider.Create(ADataSet: TADOQuery; AisBeep: boolean);begin  inherited Create(ADataSet, AisBeep);  Port := 222;  Username := '******';  Password :='*****';  BasicAuthentication := true;  XMLData := TStringList.Create; end; destructor TMegaComProvider.Destroy;begin  FreeAndNil(XMLData);  inherited;end; function TMegaComProvider.RemouteCheckInv: Integer;var CmdString: String;begin     Result := -1;     try      CmdString := 'https://10.230.164.14/bmk_kkm_int/KKM_PG_GATE.CLIENT_INFO?';     CmdString := CmdString +
'P_MSISDN=996'+Trim(DataSet.FieldByName('PAYMENT_ACCOUNT_NO').AsString);      XMLData.Clear;     TellRemouteServer(CmdString);      if (StrToInt(XMLData.Values ['ERROR_SQLCODE']) = 0)     then       begin          end       else         begin             end;     except  on E : Exception do      end; end; function TMegaComProvider.RemouteCommitPay: Integer;var CmdString: String;begin  Result := -1;    try//     CmdString := 'https://10.230.164.14/bmk_kkm_int/KKM_PG_GATE.HTTP_DEL_PAYMENT?';//     CmdString := CmdString + 'P_RECEIPT_NUM='+Trim(DataSet.FieldByName('Pay_ID').AsString);//     CmdString := CmdString + '&P_DATE='+FormatDateTime('dd.mm.yyyy',
DataSet.FieldByName('Receip_time').AsDateTime);      CmdString := 'https://10.230.164.14/bmk_kkm_int/KKM_PG_GATE.HTTP_ADD_PAYMENT?';     CmdString := CmdString + 'P_RECEIPT_NUM='+Trim(DataSet.FieldByName('Pay_ID').AsString);     CmdString := CmdString + '&P_PAY_AMOUNT='+
Trim(CurrToStr(DataSet.FieldByName('Amount').AsCurrency,LocalFormatSettings));     CmdString := CmdString + '&P_DATE='+FormatDateTime('dd.mm.yyyy"%20"hh:nn:ss',Now
);     CmdString := CmdString +
'&P_MSISDN=996'+Trim(DataSet.FieldByName('PAYMENT_ACCOUNT_NO').AsString);      XMLData.Clear;     TellRemouteServer(CmdString); //     SaveToFiles(CmdString + #13+ XMLData.Text);      if (StrToInt(XMLData.Values ['ERROR_SQLCODE']) = 0) or        (StrToInt(XMLData.Values ['ERROR_SQLCODE']) = -20809)     then       begin          end       else         begin            XMLData.Values['ERROR_SQLERRM'];           end;     except  on E : Exception do      end;end; function TMegaComProvider.RemoutePingServer: Integer;var Client: TIdTCPClient;    ssl: TIdSSLIOHandlerSocket;begin   Result := 102;   Client := TIdTCPClient.Create(nil);   ssl := TIdSSLIOHandlerSocket.Create(nil);  try    ssl.SSLOptions.Method := sslvSSLv23;    ssl.SSLOptions.Mode := sslmClient;    Client.Port := Port;    Client.Host := '10.230.164.14';    Client.IOHandler := ssl;    Client.Connect;    if Client.Connected then Result := 105;  finally     Client.Disconnect;    FreeAndNil(ssl);    FreeAndNil(Client);  end;end; function TMegaComProvider.RemouteViewPay: Integer;var CmdString: String;begin     Result := -1;    try      CmdString := 'https://10.230.164.14/bmk_kkm_int/KKM_PG_GATE.CLIENT_INFO?';     CmdString := CmdString +
'P_MSISDN=996'+Trim(DataSet.FieldByName('PAYMENT_ACCOUNT_NO').AsString);      XMLData.Clear;      TellRemouteServer(CmdString);//     SaveToFiles('RemouteViewPay :'+ CmdString + #13+ XMLData.Text);      if (StrToInt(XMLData.Values ['ERROR_SQLCODE']) = 0) then       begin         _BiPostMessage.Message := XMLData.Values['ERROR_SQLERRM'];         Result := 105;       end;    except  on E : Exception do       end;end; procedure TMegaComProvider.SetInvokePay(const Value: Boolean);var i,AnswerRemouteServer: Integer;begininherited;i := 0;AnswerRemouteServer := -1;try if AnswerRemouteServer > 0 then    begin      DataSet.Edit;      DataSet.FieldByName('ID_Action').AsInteger :=  AnswerRemouteServer;      DataSet.Post;      FInvokePay := true;    end; except  on E : Exception do end; end; procedure TMegaComProvider.TellRemouteServer(const ACmd: String);var    XMLNode: IXMLNode;    XMLDocument :TXMLDocument;     http: TIdHTTP;    ssl: TIdSSLIOHandlerSocket;    ms: TMemoryStream;  procedure XMLToData(Node: IXMLNode; var XMLData : TStrings);  var i,j: integer;         AttrNode,ChildNode : IXMLNode;  begin      for I := 0 to Node.ChildNodes.Count - 1 do      begin         ChildNode := Node.ChildNodes[i];         if ChildNode.HasChildNodes and ChildNode.IsTextElement then            XMLData.Values[ChildNode.NodeName] :=ChildNode.Text         else          XMLToData(ChildNode,XMLData);           for j := 0 to ChildNode.AttributeNodes.Count - 1 do            begin            AttrNode := ChildNode.AttributeNodes.Nodes[j];            XMLData.Values[ChildNode.NodeName+'_'+AttrNode.NodeName] :=AttrNode.Text;            end;            end;       end;  begin   ParentObj := TComponent. Create (nil);   ms := TMemoryStream.Create;   XMLDocument := TXMLDocument.Create(ParentObj);   ssl := TIdSSLIOHandlerSocket.Create(nil);   http := TIdHTTP.Create(nil);  try   try    ssl.SSLOptions.Method := sslvSSLv23;    ssl.SSLOptions.Mode := sslmClient;     http.Port := Port;    http.Request.Username := Username;    http.Request.Password:=Password;    http.Request.BasicAuthentication := BasicAuthentication;    http.Request.ContentType := 'text/html';    http.IOHandler := ssl;    http.HTTPOptions := [];    http.Get(ACmd, ms);     ms.Position := 0;    XMLDocument.XML.LoadFromStream(ms);    XMLDocument.Active := true;    XMLNode := XMLDocument.ChildNodes[2];    XMLToData(XMLNode,XMLData);//    SaveToFiles(ACmd + #13+ XMLDocument.XML.Text);    finally       FreeAndNil(ms);       FreeAndNil(ssl);       FreeAndNil(http);       FreeAndNil(ParentObj);    end;  except  on E : Exception do      end;end;
|  |   Вопрос задал: Laycreative (статус: Посетитель)Вопрос отправлен: 4 июня 2008, 08:46
 Состояние вопроса: открыт, ответов: 0.
 |  
 Мини-форум вопросаВсего сообщений: 3; последнее сообщение — 6 июня 2008, 11:22; участников в обсуждении: 2. 
|   | Вадим К (статус: Академик), 5 июня 2008, 10:01 [#1]:Ну так в чём вопрос, что же именно не понятно? Есть сервер, есть клиент. у сервера есть xml протокол. Надо искать описание старндарта и читать.
 Галочка "подтверждения прочтения" - вселенское зло. |  
|   | Laycreative (статус: Посетитель), 5 июня 2008, 19:43 [#2]:Огромное спасибо за попытку решения моей проблемы. Вопрос в том, что ни чего не понятно.
 Есть описание формирования запросов, а как работать с протоколом xml не имею даже представления (именно поэтому уже просил инфу).
 Мне кажется если бы я имел предстовление что происходит в данном коде, мне былобы легче понять откуда надо "копать", я понимаю что не реально просить пошагового разъяснения.
 |  
|   | Вадим К (статус: Академик), 6 июня 2008, 11:22 [#3]:начните с запроса гуглу на тему xml delphi парсер Галочка "подтверждения прочтения" - вселенское зло. |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |