/** * Process payment * @return boolean */ private function processPayment() { $this->payment_processor = new Services_Paymill_PaymentProcessor(Configuration::get('PIGMBH_PAYMILL_PRIVATEKEY'), 'https://api.paymill.com/v2/'); $this->payment_processor->setAmount((int) round($this->context->cart->getOrderTotal(true, Cart::BOTH) * 100)); $this->payment_processor->setToken($this->token); $this->payment_processor->setCurrency(Tools::strtolower($this->iso_currency)); $this->payment_processor->setName($this->context->customer->lastname . ', ' . $this->context->customer->firstname); $this->payment_processor->setEmail($this->context->customer->email); $this->payment_processor->setDescription(''); $this->payment_processor->setLogger($this); $this->payment_processor->setSource(Configuration::get('PIGMBH_PAYMILL_VERSION') . '_prestashop_' . _PS_VERSION_); if ($this->payment == 'creditcard') { $sql = 'SELECT `clientId`,`paymentId` FROM `' . _DB_PREFIX_ . 'pigmbh_paymill_creditcard_userdata` WHERE `userId`=' . (int) $this->context->customer->id; } elseif ($this->payment == 'debit') { $sql = 'SELECT `clientId`,`paymentId` FROM `' . _DB_PREFIX_ . 'pigmbh_paymill_directdebit_userdata` WHERE `userId`=' . (int) $this->context->customer->id; } $user_data = $this->db->getRow($sql); $this->payment_processor->setClientId(!empty($user_data['clientId']) ? $user_data['clientId'] : null); if ($this->token === 'dummyToken') { $this->payment_processor->setPaymentId(!empty($user_data['paymentId']) ? $user_data['paymentId'] : null); } $capture_now = true; if ($this->payment == 'creditcard') { $capture_now = Configuration::get('PIGMBH_PAYMILL_CAPTURE') !== 'on'; } $result = $this->payment_processor->processPayment($capture_now); $this->log('Payment processing resulted in', $result ? 'Success' : 'Fail'); return $result; }
private function proceedCapture($preauth_id) { $result = false; $this->init(); $this->load->model('sale/order'); $orderId = $this->getPost('orderId', 0); $preauth = $this->paymillPreauth->getOne($preauth_id); if (is_array($preauth)) { $this->paymillProcessor->setAmount($preauth['amount']); $this->paymillProcessor->setCurrency($preauth['currency']); $this->paymillProcessor->setPreauthId($preauth_id); $this->paymillProcessor->setDescription('Capture ' . $preauth_id); try { $result = $this->paymillProcessor->capture(); $this->log('Capture resulted in', var_export($result, true)); $this->log('Capture successfully', $this->paymillProcessor->getTransactionId()); $this->saveTransactionId($orderId, $this->paymillProcessor->getTransactionId()); $orderStatusId = $this->db->query('SELECT `order_status_id` FROM `' . DB_PREFIX . 'order_status` WHERE `name`= "Complete"')->row['order_status_id']; $this->model_sale_order->addOrderHistory($orderId, array('order_status_id' => $orderStatusId, 'notify' => false, 'comment' => '')); } catch (Exception $ex) { $result = false; } } return $result; }
public function capturePreauth() { $transaction = oxNew('paymill_transaction'); $transaction->load($this->getEditObjectId()); $params = array(); $params['amount'] = (int) (int) ($this->_getRefundAmount() * 100); $params['currency'] = strtoupper($this->getEditObject()->oxorder__oxcurrency->rawValue); $paymentProcessor = new Services_Paymill_PaymentProcessor(trim(oxRegistry::getConfig()->getShopConfVar('PAYMILL_PRIVATEKEY')), paymill_util::API_ENDPOINT, null, $params, $this); oxRegistry::getSession()->setVariable('preauth', true); $paymentProcessor->setPreauthId($transaction->paymill_transaction__preauth_id->rawValue); if (!$paymentProcessor->capture()) { oxRegistry::getSession()->setVariable('error', true); } else { $transaction->assign(array('transaction_id' => $paymentProcessor->getTransactionId())); $transaction->save(); oxRegistry::getSession()->setVariable('success', true); } }
function saveClient() { if ($this->code === 'paymill_cc') { $this->fastCheckout->saveCcIds($_SESSION['customer_id'], $this->paymentProcessor->getClientId(), ''); } if ($this->code === 'paymill_elv') { $this->fastCheckout->saveElvIds($_SESSION['customer_id'], $this->paymentProcessor->getClientId(), ''); } }
function saveClient() { if ($this->code === 'paymillCc') { $result = $this->fastCheckout->saveCcIds($_SESSION['customer_id'], $this->paymentProcessor->getClientId()); } if ($this->code === 'paymillElv') { $result = $this->fastCheckout->saveElvIds($_SESSION['customer_id'], $this->paymentProcessor->getClientId()); } $this->log("Client " . $result ? "" : "not " . "saved.", var_export(array('userId' => $_SESSION['customer_id'], 'clientId' => $this->paymentProcessor->getClientId()), true)); }
/** * Creates an instance of the paymentProcessor class. This class from the paymill lib allows easier access to most * calls used during the payment process. * * @param array $params * @param string $processId */ public function __construct($params, $processId) { $swConfig = Shopware()->Plugins()->Frontend()->PaymPaymentCreditcard()->Config(); $privateKey = trim($swConfig->get("privateKey")); $apiUrl = "https://api.paymill.com/v2/"; $source = Shopware()->Plugins()->Frontend()->PaymPaymentCreditcard()->getVersion(); $source .= "_shopware"; $source .= "_" . Shopware()->Config()->get('version'); $this->setSource($source); $loggingManager = new Shopware_Plugins_Frontend_PaymPaymentCreditcard_Components_LoggingManager(); $loggingManager->setProcessId($processId); parent::__construct($privateKey, $apiUrl, null, $params, $loggingManager); }
private function _fastCheckout($code) { if ($this->_fastCheckout->canCustomerFastCheckoutCc($_SESSION['customer']->customers_id) && $code === 'xt_paymill_cc') { $data = $this->_fastCheckout->loadFastCheckoutData($_SESSION['customer']->customers_id); if (!empty($data->paymentID_CC)) { $this->_paymentProcessor->setPaymentId($data->paymentID_CC); } } if ($this->_fastCheckout->canCustomerFastCheckoutElv($_SESSION['customer']->customers_id) && $code === 'xt_paymill_dd') { $data = $this->_fastCheckout->loadFastCheckoutData($_SESSION['customer']->customers_id); if ($data->paymentID_ELV) { $this->_paymentProcessor->setPaymentId($data->paymentID_ELV); } } }
public function processInvoice($invoice, $payment) { $data = $payment->getAdditionalInformation(); if (array_key_exists('paymillPreauthId', $data) && !empty($data['paymillPreauthId'])) { $params = array(); $params['amount'] = (int) Mage::helper("paymill/paymentHelper")->getAmount($invoice); $params['currency'] = Mage::helper("paymill/paymentHelper")->getCurrency($invoice); $params['description'] = Mage::helper('paymill/paymentHelper')->getDescription($payment->getOrder()); $params['source'] = Mage::helper('paymill')->getSourceString(); $paymentProcessor = new Services_Paymill_PaymentProcessor(Mage::helper('paymill/optionHelper')->getPrivateKey(), Mage::helper('paymill')->getApiUrl(), null, $params, Mage::helper('paymill/loggingHelper')); $paymentProcessor->setPreauthId($data['paymillPreauthId']); if (!$paymentProcessor->capture()) { Mage::throwException(Mage::helper("paymill/paymentHelper")->getErrorMessage($paymentProcessor->getErrorCode())); } Mage::helper('paymill/loggingHelper')->log("Capture created", var_export($paymentProcessor->getLastResponse(), true)); $payment->setAdditionalInformation('paymillTransactionId', $paymentProcessor->getTransactionId()); } parent::processInvoice($invoice, $payment); }
/** * Returns an instance of the paymentProcessor class. * @param String $paymentCode name of the payment * @param String $token Token generated by the Javascript * @return Services_Paymill_PaymentProcessor */ public function createPaymentProcessor($paymentCode, $token) { $quote = Mage::getSingleton('checkout/session')->getQuote(); $params = array(); $params['token'] = $token; $params['amount'] = (int) $this->getAmount(); $params['currency'] = $this->getCurrency($quote); $params['payment'] = $this->getPaymentType($paymentCode); // The chosen payment (cc | elv) $params['name'] = Mage::helper("paymill/customerHelper")->getCustomerName($quote); $params['email'] = Mage::helper("paymill/customerHelper")->getCustomerEmail($quote); $params['description'] = substr($this->getDescription($quote), 0, 128); $paymentProcessor = new Services_Paymill_PaymentProcessor(Mage::helper('paymill/optionHelper')->getPrivateKey(), Mage::helper('paymill')->getApiUrl(), null, $params, Mage::helper('paymill/loggingHelper')); $paymentProcessor->setSource(Mage::helper('paymill')->getSourceString()); return $paymentProcessor; }
<?php require_once 'includes/application_top.php'; require_once DIR_WS_CLASSES . 'order.php'; require_once dirname(__FILE__) . '/../ext/modules/payment/paymill/lib/Services/Paymill/PaymentProcessor.php'; if (isset($_GET['oID']) && !empty($_GET['oID'])) { $order = new order($_GET['oID']); $transaction = tep_db_fetch_array(tep_db_query("SELECT * FROM pi_paymill_transaction WHERE order_id = '" . $_GET['oID'] . "'")); require_once dirname(__FILE__) . '/../includes/modules/payment/' . $transaction['payment_code'] . '.php'; include dirname(__FILE__) . '/../includes/languages/' . $_SESSION['language'] . '/modules/payment/' . $transaction['payment_code'] . '.php'; $payment = new $transaction['payment_code'](); $params = array(); $params['amount'] = $transaction['amount']; $params['currency'] = $order->info['currency']; $paymentProcessor = new Services_Paymill_PaymentProcessor($payment->privateKey, $payment->apiUrl, null, $params, $payment); $paymentProcessor->setPreauthId($transaction['preauth_id']); try { $result = $paymentProcessor->capture(); } catch (Exception $ex) { } if ($result) { $statusArray = tep_db_fetch_array(tep_db_query("select orders_status_id from " . TABLE_ORDERS_STATUS . " where orders_status_name = 'Paymill [Captured]' limit 1")); tep_db_query("UPDATE " . TABLE_ORDERS . " SET orders_status='" . $statusArray['orders_status_id'] . "' WHERE orders_id='" . $_GET['oID'] . "'"); tep_db_query("UPDATE pi_paymill_transaction SET transaction_id = '" . tep_db_prepare_input($paymentProcessor->getTransactionId()) . "' WHERE order_id = " . (int) $_GET['oID']); $messageStack->add_session(PAYMILL_CAPTURE_SUCCESS, 'success'); } else { $messageStack->add_session(PAYMILL_CAPTURE_ERROR, 'error'); } } tep_redirect(tep_href_link(FILENAME_ORDERS, 'oID=' . $_GET['oID'] . '&action=edit', true, false));
public function confirm() { $preauth = (bool) $this->config->get($this->getPaymentName() . '_preauth'); // read transaction token from session if (isset($this->request->post['paymillToken'])) { $paymillToken = $this->request->post['paymillToken']; } if (isset($this->request->post['paymillFastcheckout'])) { $fastcheckout = $this->request->post['paymillFastcheckout']; } $this->_logId = time(); $this->language->load('payment/' . $this->getPaymentName()); // check if token present if (empty($paymillToken)) { $this->log("No paymill token was provided. Redirect to payments page.", ''); $this->redirect($this->url->link('checkout/checkout')); } else { $this->log("Start processing payment with token.", $paymillToken); $this->load->model('checkout/order'); $this->order_info = $this->model_checkout_order->getOrder($this->session->data['order_id']); $amountRaw = $this->currency->format($this->order_info['total'], $this->order_info['currency_code'], false, false); $amount = number_format($amountRaw, 2, '.', '') * 100; $source = $this->getVersion() . "_opencart_" . VERSION; $privateKey = trim($this->config->get($this->getPaymentName() . '_privatekey')); $paymentProcessor = new Services_Paymill_PaymentProcessor(); $paymentProcessor->setToken($paymillToken); $paymentProcessor->setAmount((int) $amount); $paymentProcessor->setPrivateKey($privateKey); $paymentProcessor->setApiUrl('https://api.paymill.com/v2/'); $paymentProcessor->setCurrency($this->order_info['currency_code']); $paymentProcessor->setDescription(substr("OrderID:" . $this->session->data['order_id'] . " " . $this->order_info['email'], 0, 128)); $paymentProcessor->setEmail($this->order_info['email']); $paymentProcessor->setLogger($this); $paymentProcessor->setName($this->order_info['firstname'] . ' ' . $this->order_info['lastname']); $paymentProcessor->setSource($source); if ($this->customer->getId() != null) { $table = $this->getDatabaseName(); $row = $this->db->query("SELECT `clientId`, `paymentId` FROM {$table} WHERE `userId`=" . $this->customer->getId()); if ($row->num_rows === 1) { if ($fastcheckout === "true") { $paymentID = empty($row->row['paymentId']) ? null : $row->row['paymentId']; $paymentProcessor->setPaymentId($paymentID); } $clientObject = new Services_Paymill_Clients($privateKey, 'https://api.paymill.com/v2/'); $client = $clientObject->getOne($row->row['clientId']); $paymentProcessor->setClientId($row->row['clientId']); if (array_key_exists('email', $client)) { if ($client['email'] !== $this->order_info['email']) { $clientObject->update(array('id' => $row->row['clientId'], 'email' => $this->order_info['email'])); $this->log("Client-mail has been changed. Client updated", $this->order_info['email']); } } } } $captureNow = !$preauth; // process the payment $result = $paymentProcessor->processPayment($captureNow); $this->log("Payment processing resulted in: ", $result ? "Success" : "Fail"); if (!$captureNow) { $preauthId = $paymentProcessor->getPreauthId(); $transId = ''; } else { $preauthId = ''; $transId = $paymentProcessor->getTransactionId(); } $comment = ''; if ($this->getPaymentName() == 'paymilldirectdebit') { $daysUntil = (int) $this->config->get($this->getPaymentName() . '_sepa_date'); $comment = $this->language->get('paymill_infotext_sepa') . ": "; $comment .= date("d.m.Y", strtotime("+ {$daysUntil} DAYS")); } // finish the order if payment was sucessfully processed if ($result === true) { $this->log("Finish order.", ''); $this->_saveUserData($this->customer->getId(), $paymentProcessor->getClientId(), $paymentProcessor->getPaymentId()); $this->model_checkout_order->confirm($this->session->data['order_id'], $this->config->get('config_order_status_id'), $comment, true); $this->_updateOrderComment($this->session->data['order_id'], $comment); $this->_saveOrderDetails($this->session->data['order_id'], $transId, $preauthId); $this->redirect($this->url->link('checkout/success')); } else { $responseCode = array_key_exists($paymentProcessor->getErrorCode(), $this->_response_codes) ? $this->_response_codes[$paymentProcessor->getErrorCode()] : 'unknown error'; $this->session->data['error_message'] = 'An error occured while processing your payment: ' . $responseCode; $this->redirect($this->url->link('payment/' . $this->getPaymentName() . '/error')); } } }
public function initContent($cart, $user, $shopname) { session_start(); unset($_SESSION['log_id']); $_SESSION['log_id'] = time(); $db = Db::getInstance(); $token = Tools::getValue('paymillToken'); $payment = Tools::getValue('payment'); $validPayments = array(); if (Configuration::get('PIGMBH_PAYMILL_DEBIT')) { $validPayments[] = 'debit'; } if (Configuration::get('PIGMBH_PAYMILL_CREDITCARD')) { $validPayments[] = 'creditcard'; } if (empty($token)) { $this->log('No paymill token was provided. Redirect to payments page.', null); Tools::redirect('order.php?step=1&paymillerror=1&paymillpayment=' . $payment); } elseif (!in_array($payment, $validPayments)) { $this->log('The selected Paymentmethod is not valid.', $payment); Tools::redirect('order.php?step=1&paymillerror=1&paymillpayment=' . $payment); } $this->log('Start processing payment with token', $token); $paymentProcessor = new Services_Paymill_PaymentProcessor(Configuration::get('PIGMBH_PAYMILL_PRIVATEKEY'), "https://api.paymill.com/v2/"); $currency = Currency::getCurrency((int) $cart->id_currency); $iso_currency = $currency['iso_code']; $paymentProcessor->setAmount($_SESSION['pigmbhPaymill']['authorizedAmount']); $paymentProcessor->setPreAuthAmount($_SESSION['pigmbhPaymill']['authorizedAmount']); $paymentProcessor->setToken($token); $paymentProcessor->setCurrency(strtolower($iso_currency)); $paymentProcessor->setName($user["lastname"] . ', ' . $user["firstname"]); $paymentProcessor->setEmail($user["email"]); $paymentProcessor->setDescription(" "); $paymentProcessor->setLogger($this); $paymentProcessor->setSource(Configuration::get('PIGMBH_PAYMILL_VERSION') . "_prestashop_" . _PS_VERSION_); if ($payment == 'creditcard') { $userData = $db->getRow('SELECT `clientId`,`paymentId` FROM `pigmbh_paymill_creditcard_userdata` WHERE `userId`=' . $user["id_customer"]); } elseif ($payment == 'debit') { $userData = $db->getRow('SELECT `clientId`,`paymentId` FROM `pigmbh_paymill_directdebit_userdata` WHERE `userId`=' . $user["id_customer"]); } $paymentProcessor->setClientId(!empty($userData['clientId']) ? $userData['clientId'] : null); if ($token === "dummyToken") { $paymentProcessor->setPaymentId(!empty($userData['paymentId']) ? $userData['paymentId'] : null); } $result = $paymentProcessor->processPayment(); $this->log('Payment processing resulted in', $result ? 'Success' : 'Fail'); $paymill = new PigmbhPaymill(); // finish the order if payment was sucessfully processed if ($result === true) { $customer = new Customer((int) $cart->id_customer); if ($payment === 'debit') { $days = Configuration::get('PIGMBH_PAYMILL_DEBIT_DAYS'); if (!is_numeric($days)) { $days = '7'; } $paymentText = $paymill->l('ELV /SEPA Debit Date: ') . date('Y-m-d', strtotime("+{$days} day")); } else { $paymentText = $paymill->l('Credit Card'); } $_SESSION['piPaymentText'] = $paymentText; $this->saveUserData($paymentProcessor->getClientId(), $paymentProcessor->getPaymentId(), (int) $cart->id_customer); $orderID = $paymill->validateOrder((int) $cart->id, Configuration::get('PIGMBH_PAYMILL_ORDERSTATE'), $cart->getOrderTotal(true, Cart::BOTH), $paymentText, null, array(), null, false, $customer->secure_key); $_SESSION['piOrderId'] = $orderID; $this->updatePaymillTransaction($paymentProcessor->getTransactionId(), 'OrderID: ' . $orderID . ' - Name:' . $user["lastname"] . ', ' . $user["firstname"]); Tools::redirect('order-confirmation.php?key=' . $customer->secure_key . '&id_cart=' . (int) $cart->id . '&id_module=' . (int) $paymill->id . '&id_order=' . (int) $paymill->currentOrder); } else { $errorMessage = $paymill->errorCodeMapping($paymentProcessor->getErrorCode()); $this->log('ErrorCode', $errorMessage); Tools::redirect('order.php?paymillpayment=' . $payment . '&step=3&paymillerror=1&errorCode=' . $paymentProcessor->getErrorCode()); } }
/** * tests _validateResult for unknown errors */ public function testValidateResultCapture() { $payment = new Services_Paymill_PaymentProcessor($this->_apiTestKey, $this->_apiUrl, null, null, $this); $this->assertFalse($payment->capture()); }