コード例 #1
0
 /**
  * @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;
 }
コード例 #2
0
 /**
  * @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'])));
     }
 }