Magento - Как я могу запустить код, когда мой заказ отменен или возмещен - PullRequest
3 голосов
/ 25 января 2011

Мой платежный модуль необходим для отправки уведомлений в платежную службу, если заказ отменен или возмещен. Я предполагаю, что кнопка «Отмена» на странице заказа (в административном бэкэнде) отменит заказ, а кнопка «Кредитовое авизо» (после создания счета) вернет заказ.

Как мне запустить мой код для этих событий? Я пытался использовать метод cancel () в моей модели метода оплаты, но код не запустился.

Ответы [ 3 ]

2 голосов
/ 26 января 2011

На этапе обработки платежей в Magento не происходит никаких наблюдаемых событий.Вместо этого вы определяете класс для любого шлюза, который вы реализуете, а затем определяете методы, которые Magento будет автоматически вызывать, когда заказ проходит через различные методы оплаты.

Просмотрите базовый абстрактный класс оплаты, чтобы увидетьразличные методы, которые будут вызываться при обработке платежа.Определите те же методы в своем классе, чтобы подключиться к процессу оплаты в любой момент.

File: app/code/core/Mage/Payment/Model/Method/Abstract.php

class abstract class Mage_Payment_Model_Method_Abstract
{

    /**
     * Authorize
     *
     * @param   Varien_Object $orderPayment
     * @return  Mage_Payment_Model_Abstract
     */
    public function authorize(Varien_Object $payment, $amount)
    ...     
    /**
     * Capture payment
     *
     * @param   Varien_Object $orderPayment
     * @return  Mage_Payment_Model_Abstract
     */
    public function capture(Varien_Object $payment, $amount)    
    ... 

    /**
     * Void payment
     *
     * @param   Varien_Object $invoicePayment
     * @return  Mage_Payment_Model_Abstract
     */
    public function void(Varien_Object $payment)
    ...    

    /**
     * Refund money
     *
     * @param   Varien_Object $invoicePayment
     * @return  Mage_Payment_Model_Abstract
     */
    //public function refund(Varien_Object $payment, $amount)
    public function refund(Varien_Object $payment, $amount)
    ...


    /**
     * Cancel payment (GoogleCheckout)
     *
     * @param   Varien_Object $invoicePayment
     * @return  Mage_Payment_Model_Abstract
     */
    public function cancel(Varien_Object $payment)
    ...

Я не слишком часто внедряю Платежный шлюз, но я предполагаю, что refund - это метод, который вы хотите использовать для кредитных нот, а capture - для счетов.Похоже, что метод cancel является специфическим для Google Checkout.Определите все пять в вашем классе с некоторыми функциями ведения журнала и пройдитесь по поддельным заказам в вашей системе разработки, если вы хотите знать наверняка.

2 голосов
/ 26 января 2011

Похоже, ваш метод оплаты не использует транзакции или не создает идентификатор транзакции авторизации. Это распространенная ошибка новичка в разработке Платежных шлюзов.

Чтобы включить ваш платежный шлюз с онлайн-действиями, вам нужно реализовать что-то вроде этого в вашем способе оплаты:

class MyBest_Payment_Model_Method extends Mage_Payment_Model_Method_Abstract
{
    protected $_canAuthorize            = true; // Set true, if you have authorization step.
    protected $_canCapture              = true; // Set true, if you payment method allows to perform capture transaction (usally only credit cards methods)
    protected $_canRefund               = true; // Set true, if online refunds are available
    protected $_canVoid                 = true; // Set true, if you can cancel authorization via API online

    public function authorize(Varien_Object $payment, $amount)
    { 

        // ... You payment method authorization goes here ...
        // Here goes retrieving or generation non-zero, 
        // non-null value as transaction ID. 
        $transactionId = $api->someCall(); 
        // Setting tranasaction id to payment object
        // It is improtant, if you want perform online actions 
        // in future with this order!
        $payment->setTransactionId($transactionId); 

        // ... some other your actions ... 
        return $this;
    }

    public function void(Varien_Object $payment)
    {
        // ... some actions for sending cancel notification to your payment gateway
    }

    public function refund(Varien_Object $payment, $amount)
    {
        // ... some actions for performing an online refund ...
    }
}
1 голос
/ 25 января 2011

В Magento есть хуки событий, которые могут быть полезны.Список событий (немного устаревший, я думаю) можно найти здесь .И есть полезная статья о том, как события Магнето работают здесь .

Также может быть полезно посмотреть на существующие расширения платежей.Я не удивлюсь, если Google Checkout отправит подобные события для отмены заказа.В репозитории Extension будет множество способов оплаты.

Удачи!

...