2015-05-10 2 views
0

Я пытаюсь использовать cURL для входа в безопасный сайт, создания настраиваемого отчета, который содержит финансовые данные, и загрузить его на мою машину. Я решил, что процесс удаленного входа в систему работает. Проблема заключается в параметрах POST, которые я использую для создания и загрузки отчета. Я пытался заставить это работать около недели, и мне не повезло.Использование cURL для создания и загрузки пользовательских отчетов

В основном, это работает для входа в системе (упрощенно):

curl_setopt($ch, CURLOPT_URL, 'https://manager.myurl.com/login.do'); 
curl_setopt($ch, CURLOPT_POSTFIELDS, 'partnerName='.$partner.'&vendorName='.$username.'&password='.$password); 

Но тот же процесс для загрузки пользовательского отчета не работает:

curl_setopt($ch, CURLOPT_URL, 'https://manager.myurl.com/customReport.do'); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $downloadpost); 

переменного $ downloadpost (многопрофильный мерная матрица) создается таким образом:

$today = Date('d'); 
$month = Date('m'); 
$year = Date('Y'); 
$pmonth = $month - 3; 
$pyear = $year; 

if ($pmonth < 1) { 
    $pmonth = 12 + $pmonth; 
    $pyear = $year - 1; 
} 

$downloadpost=http_build_query(
    array(
     'newTemplateName' => '', 
     'dateRange' => 'Custom', 
     'fromMonth' => $pmonth, 
     'fromDate' => $today, 
     'fromYear' => $pyear, 
     'fromHour' => '00', 
     'fromMinute' => '00', 
     'fromSecond' => '00', 
     'toMonth' => $month, 
     'toDate' => $today, 
     'toYear' => $year, 
     'toHour' => '23', 
     'toMinute' => '59', 
     'toSecond' => '59', 
     'timezone' => 'U.S. Eastern', 
     'cardTypes' => 'C-5,C-4,C-2,C-1,C-0', 
     'transactionTypes' => 'S,D,O,A,F,C,V', 
     'userName' => 'MyUserName', 
     'minAmount' => '0.00', 
     'maxAmount' => '10000.00', 
     'resultOption' => 'Approvals Only', 
     'displayColumns' => array(
      'Transaction ID', 
      'ABA Routing Number', 
      'AVS Streeth Match', 
      'AVS Zip Match', 
      'Account Number', 
      'Amount', 
      'Authcode', 
      'Batch ID', 
      'Billing Address', 
      'Billing City', 
      'Billing Company Name', 
      'Billing Country', 
      'Billing Email', 
      'Billing First Name', 
      'Billing Last Name', 
      'Billing State', 
      'Billing Zip', 
      'CSC Match', 
      'Comment1', 
      'Comment2', 
      'Customer Code', 
      'Duty Amount', 
      'Expires', 
      'Freight Amount', 
      'Invoice Number', 
      'Original Transaction ID', 
      'PayPal Email ID', 
      'PayPal Fees', 
      'Purchase Order', 
      'Response Msg', 
      'Result Code', 
      'Shipping Address', 
      'Shipping City', 
      'Shipping Email', 
      'Shipping First Name', 
      'Shipping Last Name', 
      'Shipping State', 
      'Shipping Zip', 
      'Tax Amount', 
      'Tender Type', 
      'Time', 
      'Type' 
     ), 
     'sortBy' => 'Transaction ID', 
     'sortOrder' => 'Ascending', 
     'transMode' => 'Live', 
     'Download' => '1', 
     'downloadMode' => 'asciiHeaders', 
     'subaction' => 'download', 
     'oldTemplateName' => '', 
     'reportName' => 'CustomReport', 
     'reportType' => 'CustomReport', 
    ) 
); 

И это результат загрузки $ download:

newTemplateName=&dateRange=Custom&fromMonth=2&fromDate=10&fromYear=2015&fromHour=00&fromMinute=00&fromSecond=00&toMonth=05&toDate=10&toYear=2015&toHour=23&toMinute=59&toSecond=59&timezone=U.S.+Eastern&cardTypes=C-5%2CC-4%2CC-2%2CC-1%2CC-0&transactionTypes=S%2CD%2CO%2CA%2CF%2CC%2CV&userName=MyUserName&minAmount=0.00&maxAmount=10000.00&resultOption=Approvals+Only&displayColumns%5B0%5D=Transaction+ID&displayColumns%5B1%5D=ABA+Routing+Number&displayColumns%5B2%5D=AVS+Streeth+Match&displayColumns%5B3%5D=AVS+Zip+Match&displayColumns%5B4%5D=Account+Number&displayColumns%5B5%5D=Amount&displayColumns%5B6%5D=Authcode&displayColumns%5B7%5D=Batch+ID&displayColumns%5B8%5D=Billing+Address&displayColumns%5B9%5D=Billing+City&displayColumns%5B10%5D=Billing+Company+Name&displayColumns%5B11%5D=Billing+Country&displayColumns%5B12%5D=Billing+Email&displayColumns%5B13%5D=Billing+First+Name&displayColumns%5B14%5D=Billing+Last+Name&displayColumns%5B15%5D=Billing+State&displayColumns%5B16%5D=Billing+Zip&displayColumns%5B17%5D=CSC+Match&displayColumns%5B18%5D=Comment1&displayColumns%5B19%5D=Comment2&displayColumns%5B20%5D=Customer+Code&displayColumns%5B21%5D=Duty+Amount&displayColumns%5B22%5D=Expires&displayColumns%5B23%5D=Freight+Amount&displayColumns%5B24%5D=Invoice+Number&displayColumns%5B25%5D=Original+Transaction+ID&displayColumns%5B26%5D=PayPal+Email+ID&displayColumns%5B27%5D=PayPal+Fees&displayColumns%5B28%5D=Purchase+Order&displayColumns%5B29%5D=Response+Msg&displayColumns%5B30%5D=Result+Code&displayColumns%5B31%5D=Shipping+Address&displayColumns%5B32%5D=Shipping+City&displayColumns%5B33%5D=Shipping+Email&displayColumns%5B34%5D=Shipping+First+Name&displayColumns%5B35%5D=Shipping+Last+Name&displayColumns%5B36%5D=Shipping+State&displayColumns%5B37%5D=Shipping+Zip&displayColumns%5B38%5D=Tax+Amount&displayColumns%5B39%5D=Tender+Type&displayColumns%5B40%5D=Time&displayColumns%5B41%5D=Type&sortBy=Transaction+ID&sortOrder=Ascending&transMode=Live&Download=1&downloadMode=asciiHeaders&subaction=download&oldTemplateName=&reportName=CustomReport&reportType=CustomReport 

Идея заключается в том, чтобы создать отчет с параметрами, показанными и затем загрузить его в текстовый файл (.tsv) на моем сервере. Единственное, что загружается в мой текстовый файл, это страница с ошибкой (из-за потенциальных проблем безопасности мы вышли из системы ... Пожалуйста, нажмите здесь, чтобы снова войти в систему).

Это моя проблема. Итак, мой вопрос: как я могу создать запрос таким образом, который будет работать, или переписать его?

Все переменные, параметры, имена полей, URL-адреса и т. Д. Являются правильными. Я проверил четыре раза. Проблема заключается в кодировке url (я предполагаю). Я пробовал urldecode(), urlencode(), htmlentities(), rawurlencode(), rawurldecode(), но я не знаю, что я делаю на этом счету. Этот код хорошо работал около 4 лет назад. Теперь я пытаюсь оживить его, но безрезультатно.

Я уже обращался к команде поддержки на рассматриваемом сайте, но я еще не слышал назад. Я не знаю, смогут ли они мне помочь, поэтому я подумал, что тоже попробую здесь.

Любые идеи? Правильно ли это построить такой запрос? Буду признателен за любую помощь. Заранее спасибо.

+0

Похоже, это код perl? Лучше всего добавить тег 'perl'. В любом случае, пытаетесь ли вы получить запрос «привет мир» для работы с этим сайтом? Без URL и учетных данных для входа в систему мы не будем пытаться дублировать вашу проблему, поэтому наличие 60 строк кода не поможет другим пользователям отлаживать вашу проблему. Сделайте его маленьким. Удачи. – shellter

+0

Нет, на самом деле это php, а не perl. Да, я попытался создать очень простой запрос без массивов, но не повезло. Во всяком случае, я просто подумал, может быть, я сделал какую-то вопиющую ошибку с тем, как я строил запрос, но мне сказали, что этот сайт предпочел бы использовать их xml api для этой задачи, поэтому мне, вероятно, просто придется отказаться все это. – maxwell

+0

хотя бы поменять один из тэгов на 'php', тогда у вас будут тысячи пользователей, которые будут смотреть вопросы php, глядя на ваш вопрос. (обратите внимание, что для 'query-string' всего 19 последователей). Удачи. – shellter

ответ

0

Вы уверены, что все еще подключаетесь при отправке данных второго сообщения? Вы должны взглянуть на сеанс cookie с libcurl;)

Смежные вопросы