Envoyer les informations de commande à une passerelle de paiement tierce
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...
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...