Esempio n. 1
0
 /**
  * Save payment information.
  */
 public function savePayment($order, $payzenResponse)
 {
     $payments = $order->getOrderPayments();
     if (is_array($payments) && !empty($payments)) {
         foreach ($payments as $payment) {
             $payment->delete();
         }
         $order->total_paid_real = 0;
     }
     if (!$this->_isSuccessState($order)) {
         // no payment creation
         return;
     }
     // save transaction info
     $this->logger->logInfo("Save payment information for cart #{$order->id_cart}.");
     $invoices = $order->getInvoicesCollection();
     $invoice = count($invoices) > 0 ? $invoices[0] : null;
     $currency = $this->getLoadedApi()->findCurrencyByNumCode($payzenResponse->get('currency'));
     $paymentIds = array();
     if ($payzenResponse->get('card_brand') == 'MULTI') {
         $sequences = json_decode($payzenResponse->get('payment_seq'));
         $transactions = $sequences->transactions;
         foreach ($transactions as $trs) {
             $amount = $currency->convertAmountToFloat($trs->{'amount'});
             $transaction_id = $trs->{'sequence_number'} . '-' . $trs->{'trans_id'};
             if ($trs->{'ext_trans_id'}) {
                 $transaction_id .= '-' . $trs->{'ext_trans_id'};
             }
             if (!$order->addOrderPayment($amount, null, $transaction_id, null, null, $invoice)) {
                 throw new PrestaShopException('Can\'t save Order Payment');
             }
             $pcc = new OrderPayment($this->_lastOrderPaymentId($order));
             $paymentIds[] = $pcc->id;
             // set card info
             $pcc->card_number = $trs->{'card_number'};
             $pcc->card_brand = $trs->{'card_brand'};
             if ($trs->{'expiry_month'} && $trs->{'expiry_year'}) {
                 $pcc->card_expiration = str_pad($trs->{'expiry_month'}, 2, '0', STR_PAD_LEFT) . '/' . $trs->{'expiry_year'};
             }
             $pcc->card_holder = NULL;
             $pcc->update();
         }
     } else {
         $amount = $currency->convertAmountToFloat($payzenResponse->get('amount'));
         if (!$order->addOrderPayment($amount, null, $payzenResponse->get('trans_id'), null, null, $invoice)) {
             throw new PrestaShopException('Can\'t save Order Payment');
         }
         $pcc = new OrderPayment($this->_lastOrderPaymentId($order));
         $paymentIds[] = $pcc->id;
         // set card info
         $pcc->card_number = $payzenResponse->get('card_number');
         $pcc->card_brand = $payzenResponse->get('card_brand');
         if ($payzenResponse->get('expiry_month') && $payzenResponse->get('expiry_year')) {
             $pcc->card_expiration = str_pad($payzenResponse->get('expiry_month'), 2, '0', STR_PAD_LEFT) . '/' . $payzenResponse->get('expiry_year');
         }
         $pcc->card_holder = NULL;
         $pcc->update();
     }
     $paymentIds = implode(', ', $paymentIds);
     $this->logger->logInfo("Payment information with ID(s) {$paymentIds} saved successfully for cart #{$order->id_cart}.");
 }