Отправьте информацию о заказе на сторонний платежный шлюз.

magento.stackexchange https://magento.stackexchange.com//questions/72642

  •  13-12-2019
  •  | 
  •  

Вопрос

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

Когда клиент нажимает кнопку «ОПЛАТИТЬ», параметры POST (детали заказа) должны быть отправлены на шлюз.(И затем после успешного/неуспешного платежа клиент должен быть перенаправлен на страницу успеха/отмены соответственно.)

Согласно инструкциям провайдера шлюза 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>

Поскольку мои знания в Magento несколько ограничены, у меня возникли проблемы с переводом этого в работающий модуль Magento.

В ходе исследований я нашел несколько возможных решений, но не уверен, какое из них правильное (и как их реализовать):

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;
}

и т. д. и т. д.

Я знаю, что это не очень конкретный вопрос, но есть ли какие-нибудь рекомендации о том, как я могу добиться этого правильно?

РЕДАКТИРОВАТЬ

Следуя некоторым урокам, я создал модуль оплаты, который на данный момент выглядит так: Платежный шлюз

С уважением...

Это было полезно?

Решение

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

и так далее с остальными полями формы...

Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top