Question

Je dois créer un nouveau module de paiement qui redirige vers une passerelle de paiement tierce.

Lorsque le client clique sur le bouton PAYER, les paramètres POST (détails de la commande) doivent être envoyés à la passerelle.(Et puis après le paiement réussi/échec, le client doit être redirigé respectivement vers une page de réussite/annulation.)

Selon les instructions données par le fournisseur de passerelle 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>

Étant donné que mes connaissances de Magento sont quelque peu limitées, j'ai du mal à traduire cela dans un module magento fonctionnel.

En faisant des recherches, j'ai trouvé plusieurs solutions possibles, mais je ne sais pas laquelle est la bonne (et comment les mettre en œuvre) :

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.

Je sais que ce n'est pas une question très spécifique, mais avez-vous des lignes directrices sur la manière d'y parvenir de la bonne manière ?

MODIFIER

Suite à quelques tutoriels, j'ai créé un module de paiement qui ressemble actuellement à ceci : Passerelle de paiement

Salutations...

Était-ce utile?

La solution

<?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>

et ainsi de suite avec le reste des champs du formulaire...

Licencié sous: CC-BY-SA avec attribution
Non affilié à magento.stackexchange
scroll top