Magento: получение платежной информации с помощью шлюза Authorize.net

Я использую платежный шлюз Authorize.net в своей корзине покупок на основе magento. Это только авторизация, что означает, что я сначала авторизую карту, а после доставки продукта покупателю я фиксирую сумму.

Authorize paygate хранит информацию, такую ​​​​как cc_exp_month, cc_exp_year, внутри поля «additional_information» в таблице sales_flat_order_payment в сериализованной форме.

Есть ли в magento способ просто получить эти значения (cc_exp_month, cc_exp_year) из столбца Additional_information?


person Prashant    schedule 14.11.2012    source источник


Ответы (3)


Я считаю, что следующие 2 строки сделают свое дело:

$ccExpMonth = $order->getPayment()->getAdditionalInformation('cc_exp_month');
$ccExpYear = $order->getPayment()->getAdditionalInformation('cc_exp_year');

Конечно, $order является экземпляром Mage_Sales_Model_Order.

Для справки вы также можете проверить: как получить платежную информацию в Magento?

person ceckoslab    schedule 14.11.2012
comment
Я видел этот пост ранее и пробовал так же, как вы предложили, но он не получает такие значения. Я проверил и обнаружил, что authorize.net хранит эту информацию внутри массива authorize_cards, поэтому, если мы попытаемся получить их напрямую, они не придут. Для этого я применил цикл foreach, а затем получил значения, но не уверен, что это логично и правильно или нет? - person Prashant; 14.11.2012

Есть ли в magento способ просто получить эти значения (cc_exp_month, cc_exp_year) из столбца Additional_information?

Нет, нет. Вам нужно углубиться в массив Additional_information. Вот метод, который я добавил для получения значения cc_type. Его можно легко настроить так, чтобы он возвращал все данные или просто еще одну часть:

public function getCcType(Mage_Sales_Model_Order_Payment $payment)
{
    if(count($payment->getAdditionalInformation()))
    {
        foreach($payment->getAdditionalInformation() as $auth_cards)
        {
            foreach($auth_cards as $ac_id)
            {
                if(isset($ac_id['cc_type']))
                {
                    return $ac_id['cc_type'];
                }
            }
        }
    }
    return false;
}
person Chris    schedule 11.07.2013

Пытаться

$order_id = 113
$order = Mage::getModel('sales/order')->load($order_id);

Если информация хранится cc_exp_month и cc_exp_year

$ccExpMonth = $order->getPayment()->getCcExpMonth();
$ccExpYear = $order->getPayment()->getCcExpYear();

Если информация хранится в дополнительной информации

$ccExpMonth = $order->getPayment()->getAdditionalInformation('cc_exp_month');
$ccExpYear = $order->getPayment()->getAdditionalInformation('cc_exp_year');
person Renon Stewart    schedule 14.11.2012
comment
RS - Таким образом, значения не извлекаются, подробности см. В моем комментарии, добавленном в ответ ceckoslab. - person Prashant; 14.11.2012
comment
Взгляните на мой обновленный ответ. У вас есть какая-либо информация в cc_exp_month и cc_exp_year (та же таблица), где мой модуль cim хранит ее? - person Renon Stewart; 14.11.2012
comment
В каком столбце базы данных находится «authorize_cards»? выполните print_r($order->getPayment()->getAdditionalInformation()-getData()) и посмотрите, какой результат вы получите - person Renon Stewart; 14.11.2012