Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.01.2009, 09:30   #1
Satim
 
Регистрация: 13.01.2009
Сообщений: 6
По умолчанию E-Port + TIdHTTP

Для проведения платежей в системе епорт надо отправлять запросы методом POST.
Проблема в том что при проведении платежа возникает 413
При том что запрос справочника и баланса счета отрабатываються нормально!!!

Запросы отправляю через TIdHTTP+TIdSSLIOHandlerSocketOpenSS L.

вот пример кода

Код:
try
    HTTPSend := TIdHTTP.Create(nil);
    MySSL    := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
    Data := TStringList.Create;
    MySSL.SSLOptions.RootCertFile := 'eport.cer';
    MySSL.OnGetPassword := MySSLGetPassword;
    MySSL.SSLOptions.Method := sslvSSLv23;
    HTTPSend.IOHandler := MySSL;
    HTTPSend.ProtocolVersion := pv1_1;
   Data.Add('OPERATION'+CRLF+'id=123'+CRLF+'checkid=123'+CRLF+'product=4420'+CRLF+'value=3.0000QTY'+CRLF+'account=9167779988');
    HTTPSend.Request.CustomHeaders.Add('Content-Type: plain/text; charset=Windows-1251');
    HTTPSend.Request.CustomHeaders.Add('Content-Length: '+IntToStr(Length(Data.Text)));
    HTTPSend.Request.CustomHeaders.Add('X-Eport-Auth: point=123456; card="209000-12345"; pin="qwert"');
    ResultMemo.Add(HTTPSend.Post('https://dealer-m1.fe.e-port.ru/cp/fe',Data));
  finally
    HTTPSend.Free;
    Data.Free;
  end;
Satim вне форума Ответить с цитированием
Старый 13.01.2009, 09:39   #2
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

The server is refusing to process a request because the request entity is larger than the server is willing or able to process. The server MAY close the connection to prevent the client from continuing the request.

If the condition is temporary, the server SHOULD include a Retry- After header field to indicate that it is temporary and after what time the client MAY try again.
http://www.w3.org/Protocols/rfc2616/...tml#sec10.4.14
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 13.01.2009, 09:52   #3
Satim
 
Регистрация: 13.01.2009
Сообщений: 6
По умолчанию

Я знаю что это за ошибка.
Почему она возникает?
Тело запроса гарантированно не превышает 4 кб.
На снифере я этот запрос видел нормальный запрос POST.
Я тут посовещался с товарищами.
Подсказали что вроде бы индейц отправляет сперва заголовки а патом тело запроса. Следовательно на сервер приходят 2 пакета в 1 заголовки а во втром само тело запроса. Но полной уверенности нет.
Может я в коде где накосячил?
Satim вне форума Ответить с цитированием
Старый 13.01.2009, 10:13   #4
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

ну на вид все правильно, не имеет значения сколько пакетов придет на сервер HTTP протокол находится выше уровнем и колд-во пакетов здесь никак не влияет
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 13.01.2009, 10:17   #5
Satim
 
Регистрация: 13.01.2009
Сообщений: 6
По умолчанию

А на сокетах как подобную функцию реализовать?
Посоветуйте направление куда рыть.
С сокетами до этого не работал(
Satim вне форума Ответить с цитированием
Старый 13.01.2009, 10:21   #6
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

Попробуйте ICS
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 13.01.2009, 10:46   #7
Satim
 
Регистрация: 13.01.2009
Сообщений: 6
По умолчанию

А на низком уровне как запрос формировать.
Подскажите документашку какую нибуть.
Satim вне форума Ответить с цитированием
Старый 13.01.2009, 10:51   #8
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

можете из инди оспользоваться компонентом IdTcpClient и в соответствии с rfc (ссылки есть в прикрепленной теме раздела) составить ручками запрос и отправить просто TCP пакет
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 13.01.2009, 14:37   #9
Satim
 
Регистрация: 13.01.2009
Сообщений: 6
По умолчанию

Сделал через IdTcpClient
Код:
 try
    Client      := TIdTCPClient.Create(nil);
    MySSL       := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
    PackStr     := TStringList.Create;
    MySSL.SSLOptions.RootCertFile := 'eport.cer';
    MySSL.SSLOptions.Method := sslvSSLv23;
    Client.IOHandler := MySSL;
    PackStr.Add('POST https://dealer-m1.fe.e-port.ru/cp/fe HTTP/1.0'+CRLF+
    'Content-Type: text/plain; charset=windows-1251'+CRLF+'Content-Length: 73'+CRLF+
    'X-Eport-Auth: point=123456; card="209000-12345"; pin="qwert"');
    Client.Host := 'https://dealer-m1.fe.e-port.ru/cp/fe';
    Client.Port := 443;
    Client.WriteHeader(PackStr);
    PackStr.Clear;
    PackStr.Add('OPERATION'+CRLF+'id=123'+CRLF+'checkid=123'+CRLF+
    'product=4420'+CRLF+'value=3.0000QTY'+CRLF+'account=9167778899');
    Client.WriteRFCStrings(PackStr);
    Client.Connect;
  finally
    Client.Free;
    MySSL.Free;
    PackStr.Free;
  end;
Видимо я чтото не так делаю вываливается "connection closed gracefully"
Не подскажите где ошибка?
Satim вне форума Ответить с цитированием
Старый 17.04.2009, 10:26   #10
LordAlex
 
Аватар для LordAlex
 
Регистрация: 30.05.2008
Сообщений: 6
По умолчанию

Satim

Подскажите, удалось реализовать соединение с Е-Портом?
Если удалось, то как?
Мои полугодовые потуги закончились ничем. (delphi6+indy9 - TIdHTTP)
sign - не принимается
если использую тестовые данные и ключи (приведенные на их сайте) - сигнатура сходится, а вот на мои сообщения их сервак отвечает - что не верно.
обмен по "card/pin" проходит успешно.
Но они требуют соединения по аутентификации с "sign".
Если туп как дерево, родишся баобабом... (с)
LordAlex вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Связка TidHttp и TidCompressorZLibEx, нужен пример работы ilich7 Работа с сетью в Delphi 2 25.09.2008 15:11
как отследить приход данных на Com- port shurik_7866 Общие вопросы Delphi 1 03.04.2008 18:27
Com Port Pepelyaev Общие вопросы Delphi 5 26.11.2006 22:31