void метод не вызывается при интеграции с пользовательским платежным шлюзом magento - PullRequest
2 голосов
/ 26 декабря 2011

Редактировать : Это пересмотренный вопрос, и я надеюсь, что он даст мне несколько ответов :) (Оригинальный вопрос ниже черты)

Я пытаюсь интегрировать пользовательский метод оплаты в magento, в котором рабочий процесс аналогичен стандарту Paypal. Это означает, что пользователь будет перенаправлен на платежный шлюз для заполнения реквизитов CC. До сих пор я реализовал эту часть, и она работает отлично.

Проблема в том, что при отмене заказа у администратора мне нужно вызвать api обновления платежного шлюза. Итак, в классе модели пользовательских методов оплаты я установил для переменной $_canVoid значение true и реализовал метод void, который будет вызывать API. Но это не называется.

После поиска вызывающих функций и помещения точек останова в основной код magento я обнаружил, что void не вызывается, потому что метод Mage_Sales_Model_Order_Payment canVoid возвращает false, что, в свою очередь, связано с тем, что следующее выражение оценивается как false

$authTransaction = $this->getAuthorizationTransaction();

Я думал, что это происходит, потому что я не реализовал метод authorize в модели метода оплаты. Поэтому я добавил authorize метод, но даже он не вызывается. В файле config.xml «authorize» добавляется в узел payment_action.

Я не могу понять, когда и откуда будет разрешен вызов метода и что мне нужно сделать, чтобы void работал при отмене заказа.

Пожалуйста, помогите ..


Оригинальный вопрос:

Мне нужно некоторое базовое понимание концепций, связанных с платежным шлюзом, таких как авторизация и захват.

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

Теперь, кроме этого, мне нужно вызвать update-api платежного шлюза, чтобы установить статус транзакции как отменен всякий раз, когда отменяется любой заказ. Поэтому я добавил следующий код в мой класс методов оплаты

protected $_canVoid = true;

public function void(Varien_Object $payment) {
    // some code here.. 
    var_dump($payment); exit; 
}

Но этот метод вообще не вызывается. После просмотра кода кажется, что magento ищет транзакцию авторизации и, если она не найдена, не вызывает вышеуказанный метод void. Означает ли это, что сначала необходимо вызвать метод authorize, и только тогда он может быть аннулирован? Но когда пользователь вводит данные кредитной карты на веб-сайте платежных шлюзов, Насколько я понимаю, мне не нужно реализовывать авторизацию и захват, как об этом заботится служба шлюза. Пожалуйста, исправьте, если это не так ..

Я проверил код Paypal Standard в magento, и там также нет метода void. Означает ли это, что для стандартных PayPal, таких как платежные шлюзы, это не сработает в magento?

Любая помощь приветствуется.

PS. Я уже прошел через этот вопрос - Поток платежей Magento , но он не совсем объясняет, почему метод void не будет вызываться в моем случае.

1 Ответ

1 голос
/ 13 апреля 2012

Если вы хотите аннулировать авторизацию, вы должны предотвратить закрытие транзакции.

Конечно, вы можете сделать это неправильно (повторная реализация _addTransaction так же, как реализация authorize.net)

Но лучший подход - вызвать метод setIsTransactionClosed со значением false в методе authorize вашего пользовательского платежного шлюза.

Это недокументированная функция, и вам будет сложно найти ее в своей среде IDE, поскольку этот метод устанавливает внутреннего члена Mage_Sales_Model_Order_Payment через магический метод PHP __call.

$payment->setIsTransactionClosed(false);
...