/** * @param \Enlight_Controller_ActionEventArgs $args * @return bool */ public function onPreRedirectToPayPal($args) { $controller = $args->getSubject(); $view = $controller->View(); $userData = $view->getAssign('sUserData'); $paymentId = $this->session->offsetGet('PaypalPlusPayment'); $payment = $userData['additional']['payment']; $this->session->sOrderVariables['sPayment'] = $payment; $this->session->sOrderVariables['sUserData']['additional']['payment'] = $payment; $requestData = array(array('op' => 'add', 'path' => '/transactions/0/item_list/shipping_address', 'value' => $this->getShippingAddress($userData))); $uri = 'payments/payment/' . $paymentId; $view->loadTemplate(''); try { $this->restClient->patch($uri, $requestData); } catch (Exception $e) { $this->logException('An error occurred on patching the address to the payment', $e); echo json_encode(array('success' => false)); return true; } echo json_encode(array('success' => true)); return true; }
/** * @param \Enlight_Controller_ActionEventArgs $args */ public function onPreDispatchPaymentPaypal(\Enlight_Controller_ActionEventArgs $args) { $request = $args->getRequest(); /** @var \Shopware_Controllers_Frontend_PaymentPaypal $controller */ $controller = $args->getSubject(); if ($request->getActionName() != 'return') { return; } $paymentId = $request->get('paymentId'); if (!$paymentId) { return; } $payerId = $request->getParam('PayerID'); $uri = 'payments/payment/' . $paymentId; $payment = array(); try { $payment = $this->restClient->get($uri, array('payer_id' => $payerId)); } catch (Exception $e) { $this->logException('An error occurred on getting the payment on returning from PayPal', $e); } if (!empty($payment['transactions'][0]['amount']['total'])) { $ppAmount = floatval($payment['transactions'][0]['amount']['total']); $ppCurrency = floatval($payment['transactions'][0]['amount']['currency']); } else { $ppAmount = 0; $ppCurrency = ''; } $swAmount = $controller->getAmount(); $swCurrency = $controller->getCurrencyShortName(); if (abs($swAmount - $ppAmount) >= 0.01 || $ppCurrency != $swCurrency) { $controller->redirect(array('controller' => 'checkout', 'action' => 'confirm')); return; } $paypalConfig = $this->paypalBootstrap->Config(); $orderNumber = null; if ($payment['state'] == 'created') { if ($paypalConfig->get('paypalSendInvoiceId')) { $orderNumber = $controller->saveOrder($payment['id'], sha1($payment['id'])); $params = array(array('op' => 'add', 'path' => '/transactions/0/invoice_number', 'value' => $orderNumber)); $prefix = $paypalConfig->get('paypalPrefixInvoiceId'); if ($prefix) { // Set prefixed invoice id - Remove special chars and spaces $prefix = str_replace(' ', '', $prefix); $prefix = preg_replace('/[^A-Za-z0-9\\_]/', '', $prefix); $params[0]['value'] = $prefix . $orderNumber; } $uri = 'payments/payment/' . $paymentId; try { $this->restClient->patch($uri, $params); } catch (Exception $e) { $this->logException('An error occurred on patching the order number to the payment', $e); } } $uri = "payments/payment/{$paymentId}/execute"; try { $payment = $this->restClient->create($uri, array('payer_id' => $payerId)); } catch (Exception $e) { $this->logException('An error occurred on executing the payment', $e); } } if ($payment['state'] == 'approved') { if (!empty($payment['transactions'][0]['related_resources'][0]['sale']['id'])) { $transactionId = $payment['transactions'][0]['related_resources'][0]['sale']['id']; } else { $transactionId = $payment['id']; } if (!$orderNumber) { $orderNumber = $controller->saveOrder($transactionId, sha1($payment['id'])); } else { $sql = 'UPDATE s_order SET transactionID = ? WHERE ordernumber = ?;'; $controller->get('db')->query($sql, array($transactionId, $orderNumber)); } if (!empty($payment['transactions'][0]['related_resources'][0]['sale']['state'])) { $paymentStatus = ucfirst($payment['transactions'][0]['related_resources'][0]['sale']['state']); $this->paypalBootstrap->setPaymentStatus($transactionId, $paymentStatus); } if ($payment['payment_instruction']) { $this->saveInvoiceInstructions($orderNumber, $payment); } try { $sql = ' INSERT INTO s_order_attributes (orderID, swag_payal_express) SELECT id, 2 FROM s_order WHERE ordernumber = ? ON DUPLICATE KEY UPDATE swag_payal_express = 2 '; $controller->get('db')->query($sql, array($orderNumber)); } catch (Exception $e) { } $controller->redirect(array('controller' => 'checkout', 'action' => 'finish', 'sUniqueID' => sha1($payment['id']))); } }