/** * 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}."); }