|
Вопрос # 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;
- begin
- inherited;
- 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 парсер
Галочка "подтверждения прочтения" - вселенское зло.
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|