Как я могу отправить данные POST с помощью curl в функцию контроллера magento с внешнего сайта?


У меня есть пользовательский контроллер с функцией на моем сайте magento, который программно создает клиента, добавляет товар в его корзину и перенаправляет его на страницу оформления заказа. Все работает нормально. Функция контроллера доступна по URL-адресу mymagentopage.de/namespace/controllername/functionname и перенаправит пользователя на одностраничную страницу оформления заказа magento.

Теперь мне нужно передать данные (имя, адрес электронной почты и адрес пользователя) с внешней страницы на эту функция. Я думал, что смогу сделать это с керлом. Но это не сработает. Я всегда получаю чистую страницу без каких-либо ошибок. Я никогда раньше не работал с curl, и я также довольно новичок в magento, поэтому я действительно не знаю, в чем может быть проблема. Кто-нибудь может мне помочь или дать подсказку? Или есть другой/лучший способ передачи данных с внешнего сайта?

Я использую код в этом примере на своем внешнем сайте для публикации пользовательских данных в моей функции mageno по ссылке mymagentopage.de/namespace/controllername/functionname . Код curl на внешнем сайте выполняется, когда пользователь отправляет форму, но я получил только пустую страницу...

Функция контроллера magento:

class MyModule_Test_CustomController extends Mage_Core_Controller_Front_Action {

    // this is the action that loads the cart and redirects to the cart page
    public function cartAction() {

        // Get customer session
        $session = Mage::getSingleton('customer/session');
        $websiteId = Mage::app()->getWebsite()->getId();
        $store = Mage::app()->getStore();
        $customer = Mage::getModel("customer/customer");
        $email = '[email protected]'
        $price = '20';

        function IscustomerEmailExists($email, $websiteId = null){
            $customer = Mage::getModel('customer/customer');

            if ($websiteId) {
                $customer->setWebsiteId($websiteId);
            }
            $customer->loadByEmail($email);
            if ($customer->getId()) {
                return $customer->getId();
            }
            return false;
        }

        $cust_exist = IscustomerEmailExists($email,$websiteId);

        if($cust_exist){

            $customer->setWebsiteId(Mage::app()->getWebsite()->getId());
            $customer->loadByEmail($email);
            $session_customer = Mage::getSingleton('customer/session')->loginById($customer->getId());

            $customerAddressId = Mage::getSingleton('customer/session')->getCustomer()->getDefaultBilling();
            if ($customerAddressId){
              $customAddress = Mage::getModel('customer/address')->load($customerAddressId);
              $customAddress->getData();
            }
        }
        else{

             $customer->setWebsiteId(Mage::app()->getWebsite()->getId());
             $customer->loadByEmail($email);

             if(!$customer->getId()) {
               $customer->setStore($store);
               $customer->setEmail($email);
               $customer->setFirstname('John');
               $customer->setLastname('Doe');
               $customer->setPassword('somepassword');
             }

             try {
               $customer->save();
               $customer->setConfirmation(null);
               $customer->save();

               $session_customer = Mage::getSingleton('customer/session')->loginById($customer->getId());
             }

             catch (Exception $ex) {
             }

             //Build billing address for customer, for checkout
             $_custom_address = array (
                'firstname' => 'John',
                'lastname' => 'Doe',
                'street' => 'Sample address part1',
                'city' => 'Munich',
                'region_id' => 'BAY',
                'region' => 'BAY',
                'postcode' => '81234',
                'country_id' => 'DE', 
                'telephone' => '0123455677',
             );

             $customAddress = Mage::getModel('customer/address');
             $customAddress->setData($_custom_address)
                        ->setCustomerId($customer->getId())
                        ->setIsDefaultBilling('1')
                        ->setIsDefaultShipping('1')
                        ->setSaveInAddressBook('1');

             try {
                $customAddress->save();
             }
             catch (Exception $ex) {
             }
        }

        Mage::getSingleton('checkout/session')->getQuote()->setBillingAddress(Mage::getSingleton('sales/quote_address')->importCustomerAddress($customAddress));

        // Get cart instance
        $cart = Mage::getSingleton('checkout/cart');

        $cart->init();

        $product = Mage::getModel('catalog/product');
        $product->load('2');
        $product->setPrice($price);
        $product->save();
        $cart->addProduct($product, array('qty' => 1));

        $session->setCartWasUpdated(true);
        $cart->save();

        Mage::app()->getResponse()->setRedirect(Mage::helper('checkout/url')->getCheckoutUrl()); //redirect to Checkout
    }
}
Author: iraira, 0000-00-00

2 answers

Хорошо, я думал слишком сложно... Мне просто нужно было указать форму "действие" моего внешнего сайта непосредственно на страницу magento, которая выполняет мое действие magento. Затем мне пришлось ловить параметры с помощью

$this->getRequest()->getPost('email');

В действии magento. И это все. Так просто...

 1
Author: iraira, 2016-02-22 09:11:59

В вашем почтовом коде поля не кодируются по URL-адресу, что может привести к ошибочным запросам или другим сбоям.

Попробуйте это:

public function post_to_url($url, $data) {
     $fields = http_build_query($fields); // encode array to POST string

     $post = curl_init();

     curl_setopt($post, CURLOPT_URL, $url);
     curl_setopt($post, CURLOPT_POST, 1);
     curl_setopt($post, CURLOPT_POSTFIELDS, $fields);
     curl_setopt($post, CURLOPT_USERAGENT, 'Mozilla/5.0');
     curl_setopt($post, CURLOPT_RETURNTRANSFER, 1);
     //curl_setopt($post, CURLOPT_FOLLOWLOCATION, true);

     $result = curl_exec($post);

     // for debugging
     var_dump(curl_getinfo($post), $result);

    //  if(false === $result) { // request failed
    //       die('Error: "' . curl_error($post) . '" - Code: ' . curl_errno($post));
    // }

     curl_close($post);

  }
 0
Author: drew010, 2016-02-21 20:06:59