/**
  * Action Listener to execute the capture for applicable transactions
  */
 public function captureAction()
 {
     $result = false;
     require_once dirname(__FILE__) . '/../../lib/Services/Paymill/Preauthorizations.php';
     $swConfig = Shopware()->Plugins()->Frontend()->PaymPaymentCreditcard()->Config();
     $modelHelper = new Shopware_Plugins_Frontend_PaymPaymentCreditcard_Components_ModelHelper();
     $preAuthObject = new Services_Paymill_Preauthorizations(trim($swConfig->get("privateKey")), 'https://api.paymill.com/v2/');
     //Gather Data
     $orderNumber = $modelHelper->getOrderNumberById($this->Request()->getParam("orderId"));
     $preAuthId = $modelHelper->getPaymillPreAuthorization($orderNumber);
     $preAuthObject = $preAuthObject->getOne($preAuthId);
     //Create Transaction
     $parameter = array('amount' => $preAuthObject['amount'], 'currency' => $preAuthObject['currency'], "description" => $preAuthObject['client']['email'] . ' ' . Shopware()->Config()->get('shopname'));
     $paymentProcessor = new Shopware_Plugins_Frontend_PaymPaymentCreditcard_Components_PaymentProcessor($parameter, $orderNumber);
     $paymentProcessor->setPreauthId($preAuthId);
     try {
         $result = $paymentProcessor->capture();
         $modelHelper->setPaymillTransactionId($orderNumber, $paymentProcessor->getTransactionId());
         $this->View()->assign(array('success' => $result));
         if ($result) {
             $this->_updatePaymentStatus(12, $this->Request()->getParam("orderId"));
         }
     } catch (Exception $exception) {
         $this->View()->assign(array('success' => $result, 'code' => $exception->getMessage()));
     }
 }
Exemplo n.º 2
0
 /**
  * Frontend index action controller
  */
 public function indexAction()
 {
     //Initialise variables
     $privateKey = trim($this->config->get("privateKey"));
     $user = Shopware()->Session()->sOrderVariables['sUserData'];
     $sState = array('reserviert' => 18, 'bezahlt' => 12);
     $processId = md5(time() . " " . $user['billingaddress']['lastname'] . ', ' . $user['billingaddress']['firstname']);
     Shopware()->Session()->paymillProcessId = $processId;
     $this->logging->setProcessId($processId);
     // read transaction token from session
     $paymillToken = Shopware()->Session()->paymillTransactionToken;
     // check if token present
     if (empty($paymillToken)) {
         $this->logging->log("No paymill token was provided. Redirect to payments page.", null);
         $url = $this->Front()->Router()->assemble(array('action' => 'payment', 'sTarget' => 'checkout', 'sViewport' => 'account', 'appendSession' => true, 'forceSecure' => true));
         $this->redirect($url . '&paymill_error=1');
     }
     $this->logging->log("Start processing payment " . $paymillToken === "NoTokenRequired" ? "without" : "with" . " token.", $paymillToken);
     // process the payment
     $userId = $user['billingaddress']['userID'];
     $paymentShortcut = $this->getPaymentShortName();
     $params = array('token' => $paymillToken, 'authorizedAmount' => (int) Shopware()->Session()->paymillTotalAmount, 'amount' => (int) round($this->getAmount() * 100, 0), 'currency' => $this->getCurrencyShortName(), 'name' => Shopware()->Session()->paymillTransactionName ? Shopware()->Session()->paymillTransactionName : $user['billingaddress']['lastname'] . ', ' . $user['billingaddress']['firstname'], 'email' => $user['additional']['user']['email'], 'description' => substr($user['additional']['user']['email'] . " " . Shopware()->Config()->get('shopname'), 0, 128), 'payment' => $paymentShortcut);
     $paymentProcessor = new Shopware_Plugins_Frontend_PaymPaymentCreditcard_Components_PaymentProcessor($params, $processId);
     $modelHelper = new Shopware_Plugins_Frontend_PaymPaymentCreditcard_Components_ModelHelper();
     $clientId = $modelHelper->getPaymillClientId($userId);
     $paymentId = $modelHelper->getPaymillPaymentId($this->getPaymentShortName(), $userId);
     if ($clientId != "") {
         $apiUrl = "https://api.paymill.com/v2/";
         require_once dirname(dirname(dirname(__FILE__))) . '/lib/Services/Paymill/Clients.php';
         $client = new Services_Paymill_Clients($privateKey, $apiUrl);
         $client->update(array('id' => $clientId, 'email' => $user['additional']['user']['email']));
         $paymentProcessor->setClientId($clientId);
     }
     if ($paymentId != "") {
         if ($paymillToken === "NoTokenRequired") {
             $paymentProcessor->setPaymentId($paymentId);
         }
     }
     $preAuthOption = $this->config->get("paymillPreAuth");
     $isCCPayment = $paymentShortcut === 'paymillcc';
     $captureNow = !($preAuthOption && $isCCPayment);
     $result = $paymentProcessor->processPayment($captureNow);
     $this->logging->log("Payment processing resulted in: " . ($result ? "Success" : "Failure"), print_r($result, true));
     // finish the order if payment was successfully processed
     if ($result !== true) {
         Shopware()->Session()->paymillTransactionToken = null;
         Shopware()->Session()->pigmbhErrorMessage = $this->_getSnippet('PAYMILL_' . $paymentProcessor->getErrorCode());
         return $this->forward('error');
     }
     //Save Client Id
     $modelHelper->setPaymillClientId($userId, $paymentProcessor->getClientId());
     //Save Fast Checkout Data
     $isFastCheckoutEnabled = $this->config->get("paymillFastCheckout");
     if ($isFastCheckoutEnabled) {
         $paymentId = $paymentProcessor->getPaymentId();
         $modelHelper->setPaymillPaymentId($this->getPaymentShortName(), $userId, $paymentId);
     }
     //Create the order
     $statusId = $captureNow ? $sState['bezahlt'] : $sState['reserviert'];
     $transactionId = $captureNow ? $paymentProcessor->getTransactionId() : $paymentProcessor->getPreauthId();
     $orderNumber = $this->saveOrder($this->createPaymentUniqueId(), md5($this->createPaymentUniqueId()), $statusId);
     $this->logging->log("Finish order.", "Ordernumber: " . $orderNumber, "using TransactionId: " . $transactionId);
     if ($captureNow) {
         $modelHelper->setPaymillTransactionId($orderNumber, $paymentProcessor->getTransactionId());
     } else {
         $modelHelper->setPaymillPreAuthorization($orderNumber, $paymentProcessor->getPreauthId());
     }
     $this->_updateTransaction($orderNumber, $paymentProcessor);
     // reset the session field
     Shopware()->Session()->paymillTransactionToken = null;
     return $this->redirect(array('controller' => 'checkout', 'action' => 'finish', 'forceSecure' => 1, 'sUniqueID' => md5($transactionId)));
 }