Новости | FAQ | Авторы | Документация | В действии | Библиотека |
Инструменты | Полезные ссылки | Хостинги | Скачать | Примеры | Форум |
Никита Козин 08.08.2005 11:20 / 08.08.2005 11:24
Может быть кто-нибудь сталкивался с таким продуктом как «e-port дилер»?..Группа e-port представляет универсальное решение, разработанное специально для крупных предприятий, занимающих солидные позиции на рынке. Данный продукт будет полезен организациям, которые желают включить в перечень своих услуг прием платежей за услуги различных операторов мобильной связи, Интернет-провайдеров, операторов спутникового телевидения, а также продажу PIN-кодов или расчеты за услуги предприятий электронной коммерции.Сейчас уже есть чужой написанный механизм, который заносит всю информацию о пользователе и операции в базу данных. Мне нужно написать механизм, который будет по cron-у доставать данные из базы и передавать их e-port-у... Передача может происходить только методом POST и только через SSL.
use strict; use Net::SSLeay qw(post_https make_headers); ##### параметры подключения ##### # номер точки e-port my $point = 123; # номер карты e-port my $card = "249000-00000"; # пин-код карты e-port my $pin = "1234567890"; ##### исходные данные запроса операции ##### # тип запроса (OPERATION/CONFIRM/CANCEL) my $req_type = "OPERATION"; # идентификатор операции my $req_id = "12345"; # номер чека my $req_checkid = "12345"; # артикул товара из справочника(в данном случае - МТС ESPP) my $req_product = 4420; # объем сделки (в данном случае - 100 рублей) my $req_value = "100.00RUR"; # реквизиты л/с клиента, объединенные точкой с запятой # в данном случае ракуизит один - номер телефона my $req_account = "9161234567"; # тайм-аут запроса в синхронном режиме my $req_timeout = 15; # режим транзакции (1 - однофазный, 2 - двухфазный) my $req_cnfmode = 2; ##### Формирование запроса text/plain##### my $CRLF = "\r\n"; my $request = $req_type . $CRLF . "id=" . $req_id . $CRLF . "checkid=" . $req_checkid . $CRLF . "product=" . $req_product . $CRLF . "value=" . $req_value . $CRLF . "account=" . $req_account . $CRLF . "timeout=" . $req_timeout . $CRLF . "cnfmode=" . $req_cnfmode . $CRLF; print "=== Operation Request ===\n"; print $request; ##### формируем http-заголовки запроса ##### my $reqHeaders; # добавляем заголовок аутентификации $reqHeaders .= make_headers("X-Eport-Auth"=>"point=$point; card=$card; pin=$pin"); # добавляем признак синхронного режима $reqHeaders .= make_headers("X-Eport-Mode"=>"1"); # указываем кодировку сообщения и формат данных $reqHeaders .= make_headers("Content-Type"=>"text/plain; charset=koi8-r"); ##### обмениваемся данными с сервером ##### my $host = "dealer.e-port.ru"; my $port = "443"; my $uri = "/cp/fe"; my ($body, $status, %resHeaders) = post_https($host,$port,$uri,$reqHeaders,$request); # http-код ответа указывает на ошибку if($status ne 'HTTP/1.1 200 OK'){ print "HTTP ERROR: $status\n"; print "$body\n"; # http-код ответа 200 (успешно) }else{ # разбираем построчно my @lines = split(/\r\n/, $body); my $i = 0; # ответ по операции должен начинаться с ключевого слова "RESULT" die "Response: Bad format, RESULT required\n" unless $lines[$i++] eq 'RESULT'; # затем следуют обязательные параметры ответа в определенном порядке # идентификатор операции die "Response: Bad format, id required\n" unless $lines[$i++] =~ /^id=(.*)$/; my $res_id = $1; # код ответа die "Response: Bad format, code required\n" unless $lines[$i++] =~ /^code=(.*)$/; my $res_code = $1; # сообщение для разработчика/оператора системы die "Response: Bad format, omsg required\n" unless $lines[$i++] =~ /^omsg=(.*)$/; my $res_omsg = $1; # сообщение для клиента die "Response: Bad format, cmsg required\n" unless $lines[$i++] =~ /^cmsg=(.*)$/; my $res_cmsg = $1; # далее следуют необязательные параметры операции my ($res_time, $res_pmsg, $res_card, $res_pin); while( my $line = $lines[$i++]){ # дата/время операции на сервере if($line=~ /^time=(.*)$/){ $res_time = $1 # сообщение для печати }elsif($line=~ /^pmsg=(.*)$/){ $res_pmsg = $1 # номер карты e-port клиента }elsif($line=~ /^card=(.*)$/){ $res_card = $1 # пин-код карты e-port клиента }elsif($line=~ /^pin=(.*)$/){ $res_pin = $1 }else{ die "Response: Bad format\n"; } } # обрабатываем полученные данные print "=== Operation result ===\n"; print "id :" . $res_id . "\n"; print "code :" . $res_code . "\n"; print "omsg :" . $res_omsg . "\n"; print "cmsg :" . $res_cmsg . "\n"; print "time :" . $res_time . "\n"; print "pmsg :" . $res_pmsg . "\n"; print "card :" . $res_card . "\n"; print "pin :" . $res_pin . "\n"; }Я хочу Парсером доставать все данные в табличку из базы, им же генерировать весь запрос, а потом сократить немного прведенный пример на Perl, чтобы он только отправлял бы подготовленные данные и возвращал бы результат, который опять же обрабатывался бы Парсером. Приходится все это делать через Perl-овую связку, потому что Парсер не умеет работать с SSL :(