/** * 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())); } }
/** * 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))); }