Esempio n. 1
0
 /**
  * Find open transaction in customer's profile
  *
  * @param \XLite\Model\Payment\Transaction $parentTransaction Parent transaction
  *
  * @return \XLite\Model\Payment\Transaction
  */
 protected function findOpenProfileTransaction(\XLite\Model\Payment\Transaction $parentTransaction)
 {
     $openTransaction = null;
     $login = $parentTransaction->getOrder()->getProfile()->getLogin();
     $cnd = new \XLite\Core\CommonCell();
     $class = 'XLite\\Module\\CDev\\XPaymentsConnector\\Model\\Payment\\XpcTransactionData';
     $cnd->{\XLite\Module\CDev\XPaymentsConnector\Model\Repo\Payment\XpcTransactionData::SEARCH_LOGIN} = $login;
     $profileTransactions = \XLite\Core\Database::getRepo($class)->search($cnd);
     foreach ($profileTransactions as $transactionData) {
         $transaction = $transactionData->getTransaction();
         if ($this->isSavedCardTransaction($transaction) && ($transaction->isPending() || $transaction->isInProgress())) {
             $openTransaction = $transaction;
             break;
         }
     }
     return $openTransaction;
 }
Esempio n. 2
0
 /**
  * Save init payment form data to session
  *
  * @param \XLite\Model\Payment\Transaction $transaction Transaction OPTIONAL
  * @param array                            $data        Form data OPTIONAL
  *
  * @return void 
  */
 public function saveInitDataToSession(\XLite\Model\Payment\Transaction $transaction = null, $data = null)
 {
     if ($transaction && $this->isInitDataValid($data)) {
         $formData = \XLite\Core\Session::getInstance()->xpc_form_data;
         if (!is_array($formData)) {
             $formData = array();
         }
         $data['savedCart'] = $this->prepareCart($transaction->getOrder(), $transaction->getPaymentMethod());
         $formData[$transaction->getPaymentMethod()->getMethodId()] = $data;
     } else {
         $formData = null;
     }
     \XLite\Core\Session::getInstance()->xpc_form_data = $formData;
 }
 /**
  * {@inheritDoc}
  */
 public function getOrder()
 {
     $this->__initializer__ && $this->__initializer__->__invoke($this, 'getOrder', array());
     return parent::getOrder();
 }
Esempio n. 4
0
 /**
  * Get current transaction order profile
  *
  * @return \XLite\Model\Profile
  */
 protected function getProfile()
 {
     return $this->transaction->getOrder()->getProfile();
 }
Esempio n. 5
0
 /**
  * Convert order to array for DoExpressCheckoutPayment
  *
  * @param \XLite\Model\Payment\Transaction $transaction Transaction
  * @param string                           $token       Token
  * @param string                           $payerId     Payer id
  *
  * @return array
  * @see    https://developer.paypal.com/docs/classic/api/merchant/DoExpressCheckoutPayment_API_Operation_NVP/
  */
 public function convertDoExpressCheckoutPaymentParams($transaction, $token, $payerId)
 {
     /** @var \XLite\Model\Order $order */
     $order = $transaction->getOrder();
     /** @var \XLite\Model\Currency $currency */
     $currency = $order->getCurrency();
     $orderTotal = $currency->roundValue($transaction->getValue());
     $shippingCost = $this->getShippingCost($order);
     /** @var \XLite\Module\CDev\Paypal\Model\Payment\Processor\ExpressCheckoutMerchantAPI $processor */
     $processor = $this->getProcessor();
     $params = array('TOKEN' => $token, 'PAYERID' => $payerId, 'PAYMENTREQUEST_0_AMT' => $orderTotal, 'PAYMENTREQUEST_0_PAYMENTACTION' => $this->getPaymentAction(), 'PAYMENTREQUEST_0_CURRENCYCODE' => $currency->getCode(), 'PAYMENTREQUEST_0_HANDLINGAMT' => 0, 'PAYMENTREQUEST_0_INSURANCEAMT' => 0, 'PAYMENTREQUEST_0_SHIPPINGAMT' => (double) $shippingCost, 'PAYMENTREQUEST_0_NOTIFYURL' => $processor->getPaymentCallbackUrl());
     $items = $this->getItems($order);
     // To avoid total mismatch clear tax and shipping cost
     $taxAmt = isset($items['PAYMENTREQUEST_0_TAXAMT']) ? $items['PAYMENTREQUEST_0_TAXAMT'] : 0;
     if (abs($orderTotal - $items['PAYMENTREQUEST_0_ITEMAMT'] - $taxAmt - $shippingCost) > 1.0E-10) {
         $correction = $orderTotal - $items['PAYMENTREQUEST_0_ITEMAMT'] - $taxAmt - $shippingCost;
         $correction = round($correction, 2);
         $index = $order->countItems() + 1;
         $items['L_PAYMENTREQUEST_0_AMT' . $index] = $correction;
         $items['L_PAYMENTREQUEST_0_NAME' . $index] = 'Correction';
         $items['L_PAYMENTREQUEST_0_QTI' . $index] = 1;
         $items['PAYMENTREQUEST_0_ITEMAMT'] += $correction;
     }
     $params += $items;
     return $params;
 }
Esempio n. 6
0
 /**
  * Get order
  *
  * @param \XLite\Model\Payment\Transaction $entity Payment transaction
  *
  * @return string
  */
 protected function getOrderColumnValue(\XLite\Model\Payment\Transaction $entity)
 {
     /** @var \XLite\Model\Order $order */
     $order = $entity->getOrder();
     return $order instanceof \XLite\Model\Cart ? null : $order->getOrderNumber();
 }
Esempio n. 7
0
 /**
  * Convert order to array for DoExpressCheckoutPayment
  *
  * @param \XLite\Model\Payment\Transaction $transaction Transaction
  * @param string                           $token       Token
  * @param string                           $payerId     Payer id
  *
  * @return array
  * @see    https://www.paypalobjects.com/webstatic/en_US/developer/docs/pdf/pfp_expresscheckout_pp.pdf
  */
 public function convertDoExpressCheckoutPaymentParams($transaction, $token, $payerId)
 {
     /** @var \XLite\Model\Order $order */
     $order = $transaction->getOrder();
     /** @var \XLite\Model\Currency $currency */
     $currency = $order->getCurrency();
     $orderTotal = $currency->roundValue($transaction->getValue());
     $shippingCost = $this->getShippingCost($order);
     /** @var \XLite\Module\CDev\Paypal\Model\Payment\Processor\ExpressCheckoutMerchantAPI $processor */
     $processor = $this->getProcessor();
     $params = array('TRXTYPE' => $this->getPaymentAction(), 'TENDER' => 'P', 'ACTION' => 'D', 'TOKEN' => $token, 'PAYERID' => $payerId, 'AMT' => $orderTotal, 'CURRENCY' => $currency->getCode(), 'FREIGHTAMT' => (double) $shippingCost, 'HANDLINGAMT' => 0, 'INSURANCEAMT' => 0, 'NOTIFYURL' => $processor->getPaymentCallbackUrl(), 'ALLOWNOTE' => 1);
     $items = $this->getItems($order);
     // To avoid total mismatch clear tax and shipping cost
     $taxAmt = isset($items['TAXAMT']) ? $items['TAXAMT'] : 0;
     if (abs($orderTotal - $items['ITEMAMT'] - $taxAmt - $shippingCost) > 1.0E-10) {
         $items['ITEMAMT'] = $orderTotal;
         $items['TAXAMT'] = 0;
         $params['FREIGHTAMT'] = 0;
     }
     $params += $items;
     return $params;
 }
Esempio n. 8
0
 /**
  * Return order entity for given transaction
  *
  * @param \XLite\Model\Payment\Transaction $entity Transaction entity
  *
  * @return \XLite\Model\Order
  */
 protected function getOrder($entity)
 {
     return $entity->getOrder();
 }