Por lo tanto, horray: estoy intentando crear una nueva puerta de enlace de pago personalizada. Está diseñado para realizar auth/capture a través de una API de terceros, pero NO necesita redireccionar al sitio de terceros.Puerta de enlace de pago personalizada de Magento que no activa los métodos de 'autorizar' o 'capturar'
Según mi entender, cuando se coloca/finaliza una orden en Magento, y la puerta de enlace se establece en "Autorizar y capturar", se debe activar el método de "captura" desde el modelo de puerta de enlace. Actualmente, no está haciendo esto.
Por supuesto, si capturo específicamente de la vista de Orden de administración, intentará capturar, pero esto debe suceder inmediatamente después de finalizar la compra (y de nuevo, entiendo que ya debería).
En mi puerta de entrada del modelo, tengo el siguiente (se trunca para facilitar la lectura):
<?php
class Example_Gateway_Model_Payment extends Mage_Payment_Model_Method_Cc
{
protected $_code = 'example';
protected $_isGateway = true;
protected $_canAuthorize = true;
protected $_canCapture = true;
protected $_canUseInternal = true;
protected $_canUseCheckout = true;
// This is an empty block class that extends Mage_Payment_Block_Form_Cc
protected $_formBlockType = 'example/form_example';
public function authorize(Varien_Object $payment, $amount)
{
Mage::log('Authorizing!');
}
public function capture(Varien_Object $payment, $amount)
{
Mage::log('** Capturing **');
// Third-party API stuff would go here, with exceptions being thrown if the gateway determines they've provided an invalid card, etc.
}
public function assignData($data)
{
Mage::log('Assigning Data');
}
}
Este mismo modelo de pago definitivamente las obras - consigo el registro de salida para assignData()
y validate()
, así como __construct()
si lo añado . Pero no importa lo que haga, ni los métodos de captura o autorización se disparan cuando realizo el pedido.
Mi config.xml dice algo como esto:
<?xml version="1.0"?>
<config>
<modules>
<Example_Gateway>
<version>0.0.5</version>
</Example_Gateway>
</modules>
<global>
<blocks>
<gateway>
<class>Example_Gateway_Block</class>
</gateway>
</blocks>
<models>
<gateway>
<class>Example_Gateway_Model</class>
</gateway>
</models>
<helpers>
<gateway>
<class>Example_Gateway_Helper</class>
</gateway>
</helpers>
</global>
<frontend>
<!-- Snip.. Nothing special here -->
</frontend>
<default>
<payment>
<gateway>
<sort_order>0</sort_order>
<model>gateway/payment</model>
<enabled>1</enabled>
<order_staus>processing</order_status>
<payment_action>authorize_capture</payment_action>
<cctypes>VI,MC,AE,DI</cctypes>
<useccv>1</useccv>
</gateway>
</payment>
</default>
</config>
No creo que hay una necesidad de un modelo de recursos, ya que no necesito ningún mesas adicionales; mi expectativa es que simplemente usará sales_flat_order_payment
y tablas relacionadas para almacenar cualquier información relacionada con entrada/gateway (txn id, etc.)
De manera similar, simplemente extiendo el bloque CC predeterminado para obtener el formulario de pago estándar.
¿Qué me estoy perdiendo? Tiene que ser algo pequeño y simple que estoy pasando por alto.
¡Gracias de antemano!
ACTUALIZACIÓN: Hasta el momento, se han implementado una solución que utiliza un observador al evento checkout_type_onepage_save_order que llama al método de captura() de forma manual - pero estoy bastante seguro de que esta no es la manera correcta de ir.
No me equivoco al pensar que Magento debe llamar automáticamente al capture()
al guardar la orden inicial, si la puerta de enlace está establecida en authorize_capture, ¿verdad ...?
¿Se puede agregar el registro para ver si y cuándo se están llamando a 'authorize()' o 'capture()' para otras pasarelas de pago? – nachito
¿Ha intentado cambiar la clase auxiliar de 'Example_Gateway_Model' por' Example_Gateway_Helper' en su 'config.xml'? Además, ¿cómo se ve el 'system.xml' y tiene instalados módulos de pago de terceros? También una versión de Magento puede ayudar también. – B00MER
@ B00MER - Disculpa, fue un error tipográfico; es apropiadamente 'Ayudante' en mi código actual. Esta es una instancia de Enterprise 1.11. No hay módulos de Checkout de terceros instalados. Publicaré mi system.xml, pero no me puedo imaginar que arroje demasiada luz sobre nada. – Morgon