/** * Eventhandler for the update of the client with new data on email change * @param $arguments */ public function onUpdateCustomerEmail($arguments) { $user = Shopware()->System()->sMODULES['sAdmin']->sGetUserData(); $userId = $user['billingaddress']['userID']; $modelHelper = new Shopware_Plugins_Frontend_PaymPaymentCreditcard_Components_ModelHelper(); $clientId = $modelHelper->getPaymillClientId($userId); //If there is a client for the customer if ($clientId !== "") { $email = $arguments['email']; $description = $user['billingaddress']['customernumber'] . " " . Shopware()->Config()->get('shopname'); $description = substr($description, 0, 128); //Update the client $swConfig = Shopware()->Plugins()->Frontend()->PaymPaymentCreditcard()->Config(); $privateKey = trim($swConfig->get("privateKey")); $apiUrl = "https://api.paymill.com/v2/"; require_once dirname(__FILE__) . '/lib/Services/Paymill/Clients.php'; $client = new Services_Paymill_Clients($privateKey, $apiUrl); $client->update(array('id' => $clientId, 'email' => $email, 'description' => $description)); } }
/** * 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))); }