public function execute(ListenerMessage $msg)
 {
     $tl = new TaggedLogger('ChargebackInitiatedAction');
     if ($msg instanceof ChargebackReversed) {
         // I've never even seen one of these messages so we'll just have to wait
         // and see
         $tl->error("Oh hai! We got a chargeback reversal on pspReference '{$msg->pspReference}' with correlation id '" . "{$msg->correlationId}'! What do we do now?", $msg);
     }
     return true;
 }
 public function execute(ListenerMessage $msg)
 {
     $tl = new TaggedLogger('CaptureResponseAction');
     if ($msg instanceof Capture) {
         if ($msg->success) {
             $tl->info("Adding record capture job for {$msg->currency} {$msg->amount} with id {$msg->correlationId} and psp reference {$msg->pspReference}.");
             $recordJob = RecordCaptureJob::factory($msg);
             $jobQueue = Configuration::getDefaultConfig()->object('data-store/jobs-adyen');
             $jobQueue->push(json_decode($recordJob->toJson(), true));
         } else {
             $tl->warning("Capture failed for payment with reference {$msg->pspReference} and correlation id {$msg->correlationId}.", $msg);
         }
     }
     return true;
 }
 public function execute(ListenerMessage $msg)
 {
     $tl = new TaggedLogger('PaymentCaptureAction');
     if ($msg instanceof Authorisation) {
         $jobQueueObj = Configuration::getDefaultConfig()->object('data-store/jobs-adyen');
         if ($msg->success) {
             // Here we need to capture the payment, the job runner will collect the
             // orphan message
             $tl->info("Adding Adyen capture job for {$msg->currency} {$msg->amount} " . "with id {$msg->correlationId} and psp reference {$msg->pspReference}.");
             $job = ProcessCaptureRequestJob::factory($msg);
             $jobQueueObj->push(json_decode($job->toJson(), true));
         } else {
             // And here we just need to destroy the orphan
             $tl->info("Adyen payment with correlation id {$msg->correlationId} " . "reported status failed: '{$msg->reason}'. " . 'Queueing job to delete pending records.');
             $job = DeletePendingJob::factory('adyen', $msg->merchantReference, $msg->correlationId);
             $jobQueueObj->push(json_decode($job->toJson(), true));
         }
     }
     return true;
 }
 public function cancel($pspReference)
 {
     $data = new WSDL\cancel();
     $data->modificationRequest = new WSDL\ModificationRequest();
     $data->modificationRequest->merchantAccount = $this->account;
     $data->modificationRequest->originalReference = $pspReference;
     $tl = new TaggedLogger('RawData');
     $tl->info('Launching SOAP cancel request', $data);
     try {
         $resp = $this->soapClient->cancel($data);
     } catch (\Exception $ex) {
         Logger::error('SOAP cancel request threw exception!', null, $ex);
         return false;
     }
     if ($resp->cancelResult->response == '[cancel-received]') {
         return $resp->cancelResult->pspReference;
     } else {
         Logger::error('SOAP cancel request did not work as expected!', $resp);
         return false;
     }
 }
 protected function cancelAuthorization()
 {
     $this->logger->debug("Cancelling authorization with reference '{$this->pspReference}'");
     $api = $this->getApi();
     $result = $api->cancel($this->pspReference);
     if ($result) {
         $this->logger->debug("Successfully cancelled authorization");
     } else {
         // Not a big deal
         $this->logger->warning("Failed to cancel authorization, it will remain in the payment console");
     }
 }
 public function execute()
 {
     $this->logger = new TaggedLogger(__CLASS__);
     $c = Context::get()->getConfiguration();
     // Construct the temporary file path
     $fileName = basename($this->reportUrl);
     $this->downloadLoc = $c->val("payment-provider/adyen/accounts/{$this->account}/report-location") . '/' . $fileName;
     $user = $c->val("payment-provider/adyen/accounts/{$this->account}/report-username");
     $pass = $c->val("payment-provider/adyen/accounts/{$this->account}/report-password");
     $this->logger->info("Beginning report download from {$this->reportUrl} using username {$user} into {$this->downloadLoc}");
     $fp = fopen($this->downloadLoc, 'w');
     if (!$fp) {
         $str = "Could not open {$this->downloadLoc} for writing! Will not download report.";
         $this->logger->error($str);
         throw new SmashPigException($str);
     }
     $ch = curl_init();
     curl_setopt($ch, CURLOPT_URL, $this->reportUrl);
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, false);
     curl_setopt($ch, CURLOPT_FILE, $fp);
     curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
     curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
     curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
     curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
     curl_setopt($ch, CURLOPT_USERPWD, "{$user}:{$pass}");
     $result = curl_exec($ch);
     $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
     $error = curl_error($ch);
     curl_close($ch);
     if ($result === false) {
         $this->logger->error("Could not download report due to cURL error {$error}");
         throw new SmashPigException("Could not download report.");
     } elseif ($httpCode !== 200) {
         $this->logger->error("Report downloaded(?), but with incorrect HTTP code: {$httpCode}");
         throw new SmashPigException("Could not download report.");
     }
     return true;
 }