إرسال معلومات الطلب إلى بوابة دفع تابعة لجهة خارجية

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