Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 1 654

/ вопрос открыт /

Здравствуйте!
Необходимо нарастить код в модуле программы для расширения ее функциональности. Программа является системой ввода кассовых платежей по протоколу HTTPS.
Хочу разобраться как это сделать, пример есть. Помогите "не глупому человеку" разобраться

Приложение:
  1. TMegaComProvider }
  2.  
  3. constructor TMegaComProvider.Create(ADataSet: TADOQuery; AisBeep: boolean);
  4. begin
  5. inherited Create(ADataSet, AisBeep);
  6. Port := 222;
  7. Username := '******';
  8. Password :='*****';
  9. BasicAuthentication := true;
  10. XMLData := TStringList.Create;
  11.  
  12. end;
  13.  
  14. destructor TMegaComProvider.Destroy;
  15. begin
  16. FreeAndNil(XMLData);
  17. inherited;
  18. end;
  19.  
  20. function TMegaComProvider.RemouteCheckInv: Integer;
  21. var CmdString: String;
  22. begin
  23. Result := -1;
  24. try
  25.  
  26. CmdString := 'https://10.230.164.14/bmk_kkm_int/KKM_PG_GATE.CLIENT_INFO?';
  27. CmdString := CmdString + 'P_MSISDN=996'+Trim(DataSet.FieldByName('PAYMENT_ACCOUNT_NO').AsString);
  28.  
  29. XMLData.Clear;
  30. TellRemouteServer(CmdString);
  31.  
  32. if (StrToInt(XMLData.Values ['ERROR_SQLCODE']) = 0)
  33. then
  34. begin
  35.  
  36.  
  37.  
  38. end
  39. else
  40. begin
  41.  
  42.  
  43.  
  44. end;
  45.  
  46. except on E : Exception do
  47.  
  48. end;
  49.  
  50. end;
  51.  
  52. function TMegaComProvider.RemouteCommitPay: Integer;
  53. var CmdString: String;
  54. begin
  55. Result := -1;
  56. try
  57. // CmdString := 'https://10.230.164.14/bmk_kkm_int/KKM_PG_GATE.HTTP_DEL_PAYMENT?';
  58. // CmdString := CmdString + 'P_RECEIPT_NUM='+Trim(DataSet.FieldByName('Pay_ID').AsString);
  59. // CmdString := CmdString + '&P_DATE='+FormatDateTime('dd.mm.yyyy', DataSet.FieldByName('Receip_time').AsDateTime);
  60.  
  61. CmdString := 'https://10.230.164.14/bmk_kkm_int/KKM_PG_GATE.HTTP_ADD_PAYMENT?';
  62. CmdString := CmdString + 'P_RECEIPT_NUM='+Trim(DataSet.FieldByName('Pay_ID').AsString);
  63. CmdString := CmdString + '&P_PAY_AMOUNT='+ Trim(CurrToStr(DataSet.FieldByName('Amount').AsCurrency,LocalFormatSettings));
  64. CmdString := CmdString + '&P_DATE='+FormatDateTime('dd.mm.yyyy"%20"hh:nn:ss',Now );
  65. CmdString := CmdString + '&P_MSISDN=996'+Trim(DataSet.FieldByName('PAYMENT_ACCOUNT_NO').AsString);
  66.  
  67. XMLData.Clear;
  68. TellRemouteServer(CmdString);
  69.  
  70. // SaveToFiles(CmdString + #13+ XMLData.Text);
  71.  
  72. if (StrToInt(XMLData.Values ['ERROR_SQLCODE']) = 0) or
  73. (StrToInt(XMLData.Values ['ERROR_SQLCODE']) = -20809)
  74. then
  75. begin
  76.  
  77.  
  78.  
  79. end
  80. else
  81. begin
  82.  
  83. XMLData.Values['ERROR_SQLERRM'];
  84.  
  85. end;
  86.  
  87. except on E : Exception do
  88.  
  89. end;
  90. end;
  91.  
  92. function TMegaComProvider.RemoutePingServer: Integer;
  93. var Client: TIdTCPClient;
  94. ssl: TIdSSLIOHandlerSocket;
  95. begin
  96. Result := 102;
  97. Client := TIdTCPClient.Create(nil);
  98. ssl := TIdSSLIOHandlerSocket.Create(nil);
  99. try
  100. ssl.SSLOptions.Method := sslvSSLv23;
  101. ssl.SSLOptions.Mode := sslmClient;
  102. Client.Port := Port;
  103. Client.Host := '10.230.164.14';
  104. Client.IOHandler := ssl;
  105. Client.Connect;
  106. if Client.Connected then Result := 105;
  107. finally
  108.  
  109. Client.Disconnect;
  110. FreeAndNil(ssl);
  111. FreeAndNil(Client);
  112. end;
  113. end;
  114.  
  115. function TMegaComProvider.RemouteViewPay: Integer;
  116. var CmdString: String;
  117. begin
  118.  
  119. Result := -1;
  120. try
  121.  
  122. CmdString := 'https://10.230.164.14/bmk_kkm_int/KKM_PG_GATE.CLIENT_INFO?';
  123. CmdString := CmdString + 'P_MSISDN=996'+Trim(DataSet.FieldByName('PAYMENT_ACCOUNT_NO').AsString);
  124.  
  125. XMLData.Clear;
  126.  
  127. TellRemouteServer(CmdString);
  128. // SaveToFiles('RemouteViewPay :'+ CmdString + #13+ XMLData.Text);
  129.  
  130. if (StrToInt(XMLData.Values ['ERROR_SQLCODE']) = 0) then
  131. begin
  132. _BiPostMessage.Message := XMLData.Values['ERROR_SQLERRM'];
  133. Result := 105;
  134. end;
  135. except on E : Exception do
  136.  
  137.  
  138. end;
  139. end;
  140.  
  141. procedure TMegaComProvider.SetInvokePay(const Value: Boolean);
  142. var i,AnswerRemouteServer: Integer;
  143. begin
  144. inherited;
  145. i := 0;
  146. AnswerRemouteServer := -1;
  147. try
  148.  
  149. if AnswerRemouteServer > 0 then
  150. begin
  151. DataSet.Edit;
  152. DataSet.FieldByName('ID_Action').AsInteger := AnswerRemouteServer;
  153. DataSet.Post;
  154. FInvokePay := true;
  155. end;
  156.  
  157. except on E : Exception do
  158.  
  159. end;
  160.  
  161. end;
  162.  
  163. procedure TMegaComProvider.TellRemouteServer(const ACmd: String);
  164. var
  165. XMLNode: IXMLNode;
  166. XMLDocument :TXMLDocument;
  167.  
  168. http: TIdHTTP;
  169. ssl: TIdSSLIOHandlerSocket;
  170. ms: TMemoryStream;
  171.  
  172. procedure XMLToData(Node: IXMLNode; var XMLData : TStrings);
  173. var i,j: integer;
  174. AttrNode,ChildNode : IXMLNode;
  175. begin
  176.  
  177. for I := 0 to Node.ChildNodes.Count - 1 do
  178. begin
  179. ChildNode := Node.ChildNodes[i];
  180. if ChildNode.HasChildNodes and ChildNode.IsTextElement then
  181. XMLData.Values[ChildNode.NodeName] :=ChildNode.Text
  182. else
  183. XMLToData(ChildNode,XMLData);
  184.  
  185. for j := 0 to ChildNode.AttributeNodes.Count - 1 do
  186. begin
  187. AttrNode := ChildNode.AttributeNodes.Nodes[j];
  188. XMLData.Values[ChildNode.NodeName+'_'+AttrNode.NodeName] :=AttrNode.Text;
  189. end;
  190. end;
  191.  
  192. end;
  193.  
  194.  
  195. begin
  196. ParentObj := TComponent. Create (nil);
  197. ms := TMemoryStream.Create;
  198. XMLDocument := TXMLDocument.Create(ParentObj);
  199. ssl := TIdSSLIOHandlerSocket.Create(nil);
  200. http := TIdHTTP.Create(nil);
  201. try
  202. try
  203. ssl.SSLOptions.Method := sslvSSLv23;
  204. ssl.SSLOptions.Mode := sslmClient;
  205.  
  206. http.Port := Port;
  207. http.Request.Username := Username;
  208. http.Request.Password:=Password;
  209. http.Request.BasicAuthentication := BasicAuthentication;
  210. http.Request.ContentType := 'text/html';
  211. http.IOHandler := ssl;
  212. http.HTTPOptions := [];
  213. http.Get(ACmd, ms);
  214.  
  215. ms.Position := 0;
  216. XMLDocument.XML.LoadFromStream(ms);
  217. XMLDocument.Active := true;
  218. XMLNode := XMLDocument.ChildNodes[2];
  219. XMLToData(XMLNode,XMLData);
  220. // SaveToFiles(ACmd + #13+ XMLDocument.XML.Text);
  221. finally
  222. FreeAndNil(ms);
  223. FreeAndNil(ssl);
  224. FreeAndNil(http);
  225. FreeAndNil(ParentObj);
  226. end;
  227. except on E : Exception do
  228.  
  229. end;
  230. end;


Laycreative Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Laycreative (статус: Посетитель)
Вопрос отправлен: 4 июня 2008, 08:46
Состояние вопроса: открыт, ответов: 0.


Мини-форум вопроса

Всего сообщений: 3; последнее сообщение — 6 июня 2008, 11:22; участников в обсуждении: 2.
Вадим К

Вадим К (статус: Академик), 5 июня 2008, 10:01 [#1]:

Ну так в чём вопрос, что же именно не понятно?
Есть сервер, есть клиент. у сервера есть xml протокол. Надо искать описание старндарта и читать.
Галочка "подтверждения прочтения" - вселенское зло.
Laycreative

Laycreative (статус: Посетитель), 5 июня 2008, 19:43 [#2]:

Огромное спасибо за попытку решения моей проблемы.
Вопрос в том, что ни чего не понятно.
Есть описание формирования запросов, а как работать с протоколом xml не имею даже представления (именно поэтому уже просил инфу).
Мне кажется если бы я имел предстовление что происходит в данном коде, мне былобы легче понять откуда надо "копать", я понимаю что не реально просить пошагового разъяснения.
Вадим К

Вадим К (статус: Академик), 6 июня 2008, 11:22 [#3]:

начните с запроса гуглу на тему xml delphi парсер
Галочка "подтверждения прочтения" - вселенское зло.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:28
Выполнено за 0.03 сек.