public function testStrGetCSV() { $string = 'header1,header2' . "\n"; $string .= 'val1,val2' . "\n"; $array = CybersourceHelper::str_getcsv($string); $array = $array[0]; $this->assertArrayHasKey('header1', $array); $this->assertArrayHasKey('header2', $array); $this->assertEquals('val1', $array['header1']); $this->assertEquals('val2', $array['header2']); }
/** * @param $report_name * @param $date * @return array * @throws Exceptions\CybersourceException */ private function sendReportRequest($report_name, $date) { $merchant_id = $this->configs->getMerchantId(); $reportsArray = $this->configs->getReports(); $endpoint = $reportsArray['endpoint']; $username = $reportsArray['username']; $password = $reportsArray['password']; if (!$date instanceof \DateTime) { $date = new \DateTime($date); } // get the right host and substitute in our username and password for http basic authentication $url = 'https://' . $username . ':' . $password . '@' . $endpoint . '/DownloadReport/' . $date->format('Y/m/d/') . $merchant_id . '/' . $report_name . '.csv'; $result = file_get_contents($url); if ($result === false) { // this would be a lot easier if we could just have an error handler that throws exceptions, but here it is... $error = error_get_last(); if (isset($error['message'])) { // try to parse out the specific message, minus the function and crap $message = $error['message']; preg_match('/failed to open stream: (.*)/', $message, $matches); if (isset($matches[1])) { $message = $matches[1]; } if (strpos($message, 'The report requested cannot be found on this server') !== false) { throw new CybersourceException($message, 400); // code 400? it's an HTTP 400 error. get it? } else { // we don't know exactly what type of error, throw a generic error throw new CybersourceException($message); } } // something happened, but we dont' know what - die! throw new CybersourceException(); } // parse out the results // but first, remove the first line - it's a header $result = substr($result, strpos($result, "\n") + strlen("\n")); $records = CybersourceHelper::str_getcsv($result); return $records; }