Pregunta

Tengo que hacer un nuevo módulo de pago que redirige a una pasarela de pago de terceros.

Cuando el cliente haga clic en el botón PAGO, los parámetros POST (detalles del pedido) deben enviarse a la puerta de enlace. (Y luego, después del exitoso / sin éxito, el cliente debe ser redirigido a una página de éxito / cancelación, respectivamente).

de acuerdo con las instrucciones proporcionadas por el proveedor de la puerta de enlace An easy way to implement this functionality is to insert fields of type hidden at the e-shop payment form. These fields would contain values about the merchant, amount, payment details etc. For example:

<form action="https://www.gateway.com/.../" method="post" ID="Form1">
<input type="hidden" id="AmountToPay" name="AmountToPay" value="amount"/>
<input type="hidden" id="AmountCurrency" name="AmountCurrency" value="currency"/>
<input type="hidden" id="Details1" name="Details1" value="details"/>
<input type="hidden" id="Details2" name="Details2" value="orderID"/>
<input type="hidden" id="PayToMerchant" name="PayToMerchant" value="merchantID"/>
<input type="hidden" id="MerchantName" name="MerchantName" value="merchant"/>
<input type="hidden" id="PaymentOKURL" name="PaymentOKURL" value="https://shop.com/e-shopOK.html"/>
<input type="hidden" id="PaymentFailURL" name="PaymentFailURL" value="https://eshop.com/e-shopCancel.html"/>
</form>

Dado que mi conocimiento en Magento es algo limitado, tengo problemas para traducirlo en un módulo Magento de trabajo.

Mientras se investiga encontré varias soluciones posibles, pero no estoy seguro de cuál es el correcto (y cómo implementarlos):

1.

$client = new Varien_Http_Client('http://www.example.com/');
$client->setMethod(Varien_Http_Client::POST);
$client->setParameterPost('name', $name);
$client->setParameterPost('address', $address);
//more parameters
try{
    $response = $client->request();
    if ($response->isSuccessful()) {
        echo $response->getBody();
    }
} catch (Exception $e) {
}

2.

public function automatic(Varien_Event_Observer $observer) {
    $orderIds = $observer->getEvent()->getOrderIds();
    if (empty($orderIds) || !is_array($orderIds)) {
        return;
    }
    foreach ($orderIds as $eachOrderId) {
        $order = Mage::getModel('sales/order')->load($eachOrderId);
        //right our third party code
        client = new Zend_Http_Client();
        $client->setUri('http://eshop.com');
        $client->>setParameterPost(array(
        'api_key' => 'yourapi',
        'apikey' => 'xxxx',
        'message' => $message,
        'order_id' => $order_id,
        ...//more params
        ));
        $response = $client->request('POST');
        // Yet another way of preforming a POST request
        $client->setMethod(Zend_Http_Client::POST);
        if (!$response->isSuccessful()) {
            Mage::log($response);
        }
    }
    return $this;
}

etc..

Sé que no es una pregunta muy específica, ¡pero cualquier pauta de cómo podría lograr esto de la manera correcta?

editar

Siguiendo algunos tutoriales, creé un módulo de pago que actualmente se parece a esto: PAGO DE PAGO PAGO DE PAGO

Saludos ...

¿Fue útil?

Solución

<?php $_order = new Mage_Sales_Model_Order();
$orderId = Mage::getSingleton('checkout/session')->getLastRealOrderId();
$_order->loadByIncrementId($orderId);

$amountToPay = $_order->getBaseGrandTotal();
?>

<form action='https://www.gateway.com/.../' method='post'>
<input id='AmountToPay' name='AmountToPay' value="<?php echo $amountToPay; ?>" type='hidden' />
<input id='Details2' name='Details2' value='<?php echo $orderId; ?>' type='hidden' />
</form>

y así sucesivamente con el resto de los campos de formulario ...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a magento.stackexchange
scroll top