주문 정보를 타사 지불 게이트웨이로 보내십시오
문제
제 3 자 지불 게이트웨이로 리디렉션하는 새로운 지불 모듈을 만들어야합니다.
고객이 PAY 버튼을 클릭하면 게이트웨이에 게시 매개 변수 (주문 세부 정보)를 보낼 필요가 있습니다. (그리고 성공적으로 / 할인되지 않은 지불 후 고객이 각각 성공 / 취소 페이지로 리디렉션되어야합니다.)
게이트웨이 공급자 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의 지식은 다소 제한적이기 때문에 이것을 마그네토 모듈로 번역하는 데 어려움이 있습니다.
연구를 연구하면서 몇 가지 적당한 해결책을 찾았지만 올바른 것 (그리고 이들을 구현하는 방법)이 확실하지는 않습니다 :
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>
.
등의 나머지 부분 필드와 함께 ...
제휴하지 않습니다 magento.stackexchange