예제 #1
1
 public function getSocketConnect()
 {
     $userId = Mage::getSingleton('adminhtml/session')->getUserId();
     $is_sesson = $this->checkConfigurationChange();
     if (!$is_sesson || !is_int($userId)) {
         $sock = $this->getSocket();
         $msg = new xmlrpcmsg('login');
         $msg->addParam(new xmlrpcval(self::$odoo_db, "string"));
         $msg->addParam(new xmlrpcval(self::$odoo_user, "string"));
         $msg->addParam(new xmlrpcval(self::$odoo_pwd, "string"));
         $resp = $sock->send($msg);
         if ($resp->faultCode()) {
             $userId = $resp->faultString();
         } else {
             $val = $resp->value();
             $id = $val->scalarval();
             if ($id > 0) {
                 $userId = $id;
             } else {
                 $userId = 'Invalid Odoo Login Details.';
             }
         }
         Mage::getSingleton('adminhtml/session')->setUserId($userId);
     }
 }
예제 #2
0
 function xmlrpcCall($url, $method, $params)
 {
     // xmlrpc encode parameters
     for ($i = 0; $i < count($params); $i++) {
         if (get_class($params[$i]) != 'xmlrpcval') {
             $params[$i] = xmlrpc_encode($params[$i]);
         }
     }
     // send request
     $message = new xmlrpcmsg($method, $params);
     debug("XML-RPC message", $message->serialize());
     $addr = parse_url($url);
     $client = new xmlrpc_client($url, $addr['host'], $addr['port']);
     //if($debug)
     //  $client->setDebug(1);
     debug("XML-RPC", "call to " . $url);
     $response = $client->send($message);
     // process response
     debug("XML-RPC Response", $response->serialize());
     if (!$response) {
         debug("No response", "probably host is unreachable");
     } elseif ($response->faultCode() != 0) {
         // there was an error
         debug("Error response: ", $response->faultCode() . "  " . $response->faultString());
     } else {
         $retval = $response->value();
         if ($retval) {
             $retval = xmlrpc_decode($retval);
         }
         debug("Response", $retval);
         return $retval;
     }
     return NULL;
 }
예제 #3
0
 function __createXmlRpcMsg($server_method, $params_arr)
 {
     $xml_val = my_xmlrpc_encode($params_arr);
     $xml_msg = new xmlrpcmsg($server_method);
     $xml_msg->addParam($xml_val);
     return $xml_msg;
 }
예제 #4
0
function gFaultXmlRequest($faultCode, $faultString)
{
    global $stylevar;
    $faultMethod = 'return_fault';
    $xml = new xmlrpcmsg($faultMethod);
    $xml->addParam($faultCode);
    $xml->addParam($faultString);
    $rxml = $xml->serialize($stylevar['charset']);
    return $rxml;
}
예제 #5
0
 public function syncStoreAtOdoo($store_data)
 {
     $response = 0;
     $auto_warehouse_generation = Mage::getStoreConfig('magerpsync/mobmultishop/auto_warehouse_generation');
     $auto_pricelist_generation = Mage::getStoreConfig('magerpsync/mobmultishop/auto_pricelist_generation');
     $store_data['auto_warehouse'] = $auto_warehouse_generation;
     $store_data['auto_pricelist'] = $auto_pricelist_generation;
     $store_array = php_xmlrpc_encode($store_data);
     $helper = Mage::helper('magerpsync/connection');
     $context = $helper->getOdooContext();
     $client = $helper->getClientConnect();
     $userId = Mage::getSingleton('adminhtml/session')->getUserId();
     $msg = new xmlrpcmsg('execute');
     $msg->addParam(new xmlrpcval($helper::$odoo_db, "string"));
     $msg->addParam(new xmlrpcval($userId, "int"));
     $msg->addParam(new xmlrpcval($helper::$odoo_pwd, "string"));
     $msg->addParam(new xmlrpcval("magento.store.view", "string"));
     $msg->addParam(new xmlrpcval("sync_store_view", "string"));
     $msg->addParam($store_array);
     $msg->addParam(new xmlrpcval($context, "struct"));
     $resp = $client->send($msg);
     if ($resp->faultCode()) {
         $error = "Sync Error, Store " . $store_data['name'] . " >>" . $resp->faultString();
         Mage::log($error, null, 'odoo_connector.log');
     } else {
         $response = 1;
         $odoo_id = $resp->value()->me["int"];
         $store = Mage::getModel("mobmultishop/mobmultishop");
         $store->setOdooStoreId($odoo_id);
         $store->setMageStoreId($store_data['store_id']);
         $store->setCreatedBy($helper::$mage_user);
         $store->save();
     }
     return $response;
 }
예제 #6
0
 public function exportAttributeSet($setName, $setId)
 {
     $helper = Mage::helper('magerpsync/connection');
     $client = $helper->getClientConnect();
     $context = $helper->getOdooContext();
     $mapped_ids = $this->getMappedAttributeSetIds();
     if (!in_array($setId, $mapped_ids)) {
         $userId = Mage::getSingleton('adminhtml/session')->getUserId();
         $attributeset_array = array('name' => new xmlrpcval($setName, "string"), 'set_id' => new xmlrpcval($setId, "int"), 'created_by' => new xmlrpcval($helper::$mage_user, "string"));
         $msg = new xmlrpcmsg('execute');
         $msg->addParam(new xmlrpcval($helper::$odoo_db, "string"));
         $msg->addParam(new xmlrpcval($userId, "int"));
         $msg->addParam(new xmlrpcval($helper::$odoo_pwd, "string"));
         $msg->addParam(new xmlrpcval("magento.attribute.set", "string"));
         $msg->addParam(new xmlrpcval("create", "string"));
         $msg->addParam(new xmlrpcval($attributeset_array, "struct"));
         $msg->addParam(new xmlrpcval($context, "struct"));
         $resp = $client->send($msg);
         if ($resp->faultCode()) {
             $error_message = $resp->faultString();
             return array('erp_set_id' => 0, 'success' => false, 'message' => $error_message);
         } else {
             $odoo_id = $resp->value()->me["int"];
             $mapping_data = array('name' => $setName, 'mage_id' => $setId, 'odoo_id' => $odoo_id, 'created_by' => $helper::$mage_user);
             $this->setmapping($mapping_data);
             return array('success' => true, 'erp_set_id' => $odoo_id);
         }
     }
     return array('success' => true);
 }
예제 #7
0
 /**
  * Dekodiere die via XMLRPC übertragenen Atributte, dann führe die
  * parent Methode aus und transformiere die Antwort.
  *
  * @param xmlrpcmsg $xmlrpcmsg Die XMLRPC Anfrage
  * @return xmlrpcresp Gibt den Statuscode 1 für Erfolg zurück
  */
 public function register($xmlrpcmsg)
 {
     $name = $xmlrpcmsg->getParam(0)->scalarval();
     //Zugriff auf den ersten Parameter
     $age = $xmlrpcmsg->getParam(1)->scalarval();
     //Zugriff auf den zweiten Parameter
     $res = parent::register($name, $age);
     //übergebe Parameter an parent Methode
     $resConverted = new xmlrpcval($res, "int");
     //Kodiere Rückgabewert der parent Methode
     return new xmlrpcresp($resConverted);
     //Erstelle XMLRPC Antwort aus dem Rückgabewert für Clienten
 }
예제 #8
0
 function exec($method, $params = NULL)
 {
     $message = new xmlrpcmsg($method);
     if ($params && is_array($params)) {
         foreach ($params as $value) {
             $message->addParam(php_xmlrpc_encode($value));
         }
     }
     $result = $this->db->send($message, 15);
     if ($result->faultCode()) {
         throw new Exception($result->faultString());
     }
     return $result->value();
 }
예제 #9
0
파일: Data.php 프로젝트: babycarenl/360
 public function CheckOdooActiveConfig()
 {
     $helper = Mage::helper('magerpsync/connection');
     $helper->getSocketConnect();
     $userId = Mage::getSingleton('adminhtml/session')->getUserId();
     if ($userId > 0) {
         $mage_url = Mage::getBaseUrl();
         $client = $helper->getClientConnect();
         $fields = array('magento_url' => new xmlrpcval($mage_url, "string"));
         $msg2 = new xmlrpcmsg('execute');
         $msg2->addParam(new xmlrpcval($helper::$odoo_db, "string"));
         $msg2->addParam(new xmlrpcval($userId, "int"));
         $msg2->addParam(new xmlrpcval($helper::$odoo_pwd, "string"));
         $msg2->addParam(new xmlrpcval("magento.configure", "string"));
         $msg2->addParam(new xmlrpcval("fetch_connection_info", "string"));
         $msg2->addParam(new xmlrpcval($fields, "struct"));
         $resp = $client->send($msg2);
         if ($resp->faultcode()) {
             $error = $this->__("Fetch Odoo Config Error,") . $resp->faultString();
             Mage::log($error, null, 'odoo_connector.log');
         } else {
             $data = $resp->value()->scalarval();
             if ($data) {
                 $this->ERP_CATEG = $data['category']->me['array'][0]->me['int'];
                 $this->ERP_LANG = $data['language']->me['string'];
                 $this->ERP_WAREHOUSE = $data['warehouse_id']->me['array'][0]->me['int'];
                 $this->ERP_INSTANCE = $data['id']->me['int'];
                 $this->setToSession();
                 return true;
             }
         }
     }
     return false;
 }
예제 #10
0
 public function CheckOdooActiveConfig()
 {
     $helper = Mage::helper('magerpsync/connection');
     $mage_url = Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_WEB);
     /*$fields = array('magento_url'=>new xmlrpcval($mage_url, "string"),);*/
     $helper->getSocketConnect();
     $userId = Mage::getSingleton('adminhtml/session')->getUserId();
     if ($userId > 0) {
         $client = $helper->getClientConnect();
         $fields = array('magento_url' => new xmlrpcval($mage_url, "string"));
         $msg2 = new xmlrpcmsg('execute');
         $msg2->addParam(new xmlrpcval($helper::$odoo_db, "string"));
         $msg2->addParam(new xmlrpcval($userId, "int"));
         $msg2->addParam(new xmlrpcval($helper::$odoo_pwd, "string"));
         $msg2->addParam(new xmlrpcval("magento.configure", "string"));
         $msg2->addParam(new xmlrpcval("fetch_connection_info", "string"));
         $msg2->addParam(new xmlrpcval($fields, "struct"));
         $resp = $client->send($msg2);
         $data = $resp->value()->scalarval();
         if ($data) {
             $this->ERP_CATEG = $data['category']->me['array'][0]->me['int'];
             $this->ERP_LANG = $data['language']->me['string'];
             $this->ERP_WAREHOUSE = $data['warehouse_id']->me['array'][0]->me['int'];
             $this->ERP_INSTANCE = $data['id']->me['int'];
             $this->setToSession();
             return true;
         }
     }
     return false;
 }
예제 #11
0
/**
 * Forward an xmlrpc request to another server, and return to client the response received.
 * @param xmlrpcmsg $m (see method docs below for a description of the expected parameters)
 * @return xmlrpcresp
 */
function forward_request($m)
{
    // create client
    $timeout = 0;
    $url = php_xmlrpc_decode($m->getParam(0));
    $c = new xmlrpc_client($url);
    if ($m->getNumParams() > 3) {
        // we have to set some options onto the client.
        // Note that if we do not untaint the received values, warnings might be generated...
        $options = php_xmlrpc_decode($m->getParam(3));
        foreach ($options as $key => $val) {
            switch ($key) {
                case 'Cookie':
                    break;
                case 'Credentials':
                    break;
                case 'RequestCompression':
                    $c->setRequestCompression($val);
                    break;
                case 'SSLVerifyHost':
                    $c->setSSLVerifyHost($val);
                    break;
                case 'SSLVerifyPeer':
                    $c->setSSLVerifyPeer($val);
                    break;
                case 'Timeout':
                    $timeout = (int) $val;
                    break;
            }
            // switch
        }
    }
    // build call for remote server
    /// @todo find a weay to forward client info (such as IP) to server, either
    /// - as xml comments in the payload, or
    /// - using std http header conventions, such as X-forwarded-for...
    $method = php_xmlrpc_decode($m->getParam(1));
    $pars = $m->getParam(2);
    $m = new xmlrpcmsg($method);
    for ($i = 0; $i < $pars->arraySize(); $i++) {
        $m->addParam($pars->arraymem($i));
    }
    // add debug info into response we give back to caller
    xmlrpc_debugmsg("Sending to server {$url} the payload: " . $m->serialize());
    return $c->send($m, $timeout);
}
예제 #12
0
파일: Order.php 프로젝트: babycarenl/360
 public function createOdooOrder($This_order, $pricelist_id, $erpAddressArray)
 {
     $odoo_order_id = 0;
     $partner_id = $erpAddressArray[0];
     $partner_invoice_id = $erpAddressArray[1];
     $partner_shipping_id = $erpAddressArray[2];
     $increment_id = $This_order->getIncrementId();
     $helper = Mage::helper('magerpsync/connection');
     $client = $helper->getClientConnect();
     $userId = Mage::getSingleton('adminhtml/session')->getUserId();
     $warehouse_id = Mage::getSingleton('adminhtml/session')->getErpWarehouse();
     $order_array = array('partner_id' => new xmlrpcval($partner_id, "int"), 'partner_invoice_id' => new xmlrpcval($partner_invoice_id, "int"), 'partner_shipping_id' => new xmlrpcval($partner_shipping_id, "int"), 'pricelist_id' => new xmlrpcval($pricelist_id, "int"), 'date_order' => new xmlrpcval($This_order->getCreatedAt(), "string"), 'client_order_ref' => new xmlrpcval($increment_id, "string"), 'warehouse_id' => new xmlrpcval($warehouse_id, "int"), 'channel' => new xmlrpcval('magento', "string"));
     /* Adding Shipping Information*/
     if ($This_order->getShippingMethod()) {
         $shipping_method = $This_order->getShippingMethod();
         $shipping_code = explode('_', $shipping_method);
         if ($shipping_code) {
             $shipping_code = $shipping_code[0];
             $erp_carrier_id = Mage::getModel('magerpsync/carrier')->checkSpecificCarrier($shipping_code);
             if ($erp_carrier_id > 0) {
                 $order_array['carrier_id'] = new xmlrpcval($erp_carrier_id, "int");
             }
         }
     }
     /* Adding Payment Information*/
     $payment_method = $This_order->getPayment()->getMethodInstance()->getTitle();
     if ($payment_method) {
         $payment_info = 'Payment Information:- ' . $payment_method;
         $order_array['note'] = new xmlrpcval($payment_info, "string");
     }
     /* Adding Store Information */
     $store_id = $This_order->getStoreId();
     $collection = Mage::getModel('mobmultishop/mobmultishop')->getCollection()->addFieldToFilter('mage_store_id', array('eq' => $store_id));
     foreach ($collection as $col) {
         $erp_store_id = $col->getOdooStoreId();
         $order_array['wk_shop'] = new xmlrpcval($erp_store_id, "int");
     }
     $msg = new xmlrpcmsg('execute');
     $msg->addParam(new xmlrpcval($helper::$odoo_db, "string"));
     $msg->addParam(new xmlrpcval($userId, "int"));
     $msg->addParam(new xmlrpcval($helper::$odoo_pwd, "string"));
     $msg->addParam(new xmlrpcval("sale.order", "string"));
     $msg->addParam(new xmlrpcval("create", "string"));
     $msg->addParam(new xmlrpcval($order_array, "struct"));
     $resp = $client->send($msg);
     if ($resp->faultcode()) {
         $error = "Export Error, Order " . $increment_id . " >>" . $resp->faultString();
         Mage::log($error, null, 'odoo_connector.log');
     } else {
         $odoo_order_id = $resp->value()->me["int"];
     }
     return $odoo_order_id;
 }
예제 #13
0
function atheme($hostname, $port, $path, $sourceip, $username, $password, $service, $command, $params)
{
    $message = new xmlrpcmsg("atheme.login");
    $message->addParam(new xmlrpcval($username, "string"));
    $message->addParam(new xmlrpcval($password, "string"));
    $client = new xmlrpc_client($path, $hostname, $port);
    $response = $client->send($message);
    $session = NULL;
    if (!$response->faultCode()) {
        $session = explode("<string>", $response->serialize());
        $session = explode("</string", $session[1]);
        $session = $session[0];
    } else {
        return "Authorisation failed";
    }
    $message = new xmlrpcmsg("atheme.command");
    $message->addParam(new xmlrpcval($session, "string"));
    $message->addParam(new xmlrpcval($username, "string"));
    $message->addParam(new xmlrpcval($sourceip, "string"));
    $message->addParam(new xmlrpcval($service, "string"));
    $message->addParam(new xmlrpcval($command, "string"));
    if ($params != NULL) {
        if (sizeof($params) < 2) {
            foreach ($params as $param) {
                $message->addParam(new xmlrpcval($param, "string"));
            }
        } else {
            $firstparam = $params[0];
            $secondparam = "";
            for ($i = 1; $i < sizeof($params); $i++) {
                $secondparam .= $params[$i] . " ";
            }
            $message->addParam(new xmlrpcval($firstparam, "string"));
            $message->addParam(new xmlrpcval($secondparam, "string"));
        }
        $response = $client->send($message);
    }
    if (!$response->faultCode()) {
        return $response->serialize();
    } else {
        return "Command failed: " . $response->faultString();
    }
}
예제 #14
0
 function call($url, $method, $params)
 {
     // xmlrpc encode parameters
     for ($i = 0; $i < count($params); $i++) {
         if (get_class($params[$i]) != 'xmlrpcval') {
             $params[$i] = xmlrpc_encode($params[$i]);
         }
     }
     // send request
     $message = new xmlrpcmsg($method, $params);
     if ($this->debug) {
         //  $this->display_xml($message->serialize());
         print "<PRE>" . htmlentities($message->serialize()) . "</PRE>\n";
         //("XML-RPC message:\n $message->serialize()",0);
     }
     $addr = parse_url($url);
     $client = new xmlrpc_client($url, $addr['host'], $addr['port']);
     if ($this->debug) {
         $client->setDebug(1);
     }
     debug("XML-RPC", "call to " . $url);
     $response = $client->send($message);
     if ($this->debug) {
         print "<PRE>" . htmlentities($response->serialize()) . "</PRE>\n";
     }
     // process response
     //debug("XML-RPC Response", $response->serialize());
     if (!$response) {
         addError("No response: probably host is unreachable");
     } elseif ($response->faultCode() > 0) {
         // there was an error
         addError("Error response: " . $response->faultCode() . "  " . $response->faultString());
     } else {
         $retval = $response->value();
         if ($retval) {
             $retval = xmlrpc_decode($retval);
         }
         //debug("Response", $retval);
         return $retval;
     }
     return NULL;
 }
예제 #15
0
 public function Erp_customer_create($customer_array, $mage_customer_id, $mage_address_id)
 {
     $odoo_id = 0;
     $helper = Mage::helper('magerpsync/connection');
     $userId = Mage::getSingleton('adminhtml/session')->getUserId();
     $client = $helper->getClientConnect();
     $context = $helper->getOdooContext();
     $customer = Mage::getModel('customer/customer')->load($mage_customer_id);
     $mage_id = $customer->getStoreId();
     $language_mapping = Mage::getModel('mobmultilang/mobmultilang')->getCollection()->addFieldToFilter('mage_store_id', array('eq' => $mage_id));
     $erp_lang = '';
     foreach ($language_mapping as $mapping) {
         $erp_lang = $mapping->getOdooLang();
     }
     $customer_array['lang'] = new xmlrpcval($erp_lang, "string");
     $msg = new xmlrpcmsg('execute');
     $msg->addParam(new xmlrpcval($helper::$odoo_db, "string"));
     $msg->addParam(new xmlrpcval($userId, "int"));
     $msg->addParam(new xmlrpcval($helper::$odoo_pwd, "string"));
     $msg->addParam(new xmlrpcval("res.partner", "string"));
     $msg->addParam(new xmlrpcval("create", "string"));
     $msg->addParam(new xmlrpcval($customer_array, "struct"));
     $msg->addParam(new xmlrpcval($context, "struct"));
     $resp = $client->send($msg);
     if ($resp->faultCode()) {
         $error = "Export Error, Customer Id " . $mage_customer_id . "(" . $mage_address_id . ") >>" . $resp->faultString();
         $response['odoo_id'] = 0;
         $response['error'] = $error;
         Mage::log($error, null, 'odoo_connector.log');
     } else {
         $odoo_id = $resp->value()->me["int"];
         /* entry inside Mapping table*/
         if ($odoo_id && $mage_customer_id && $mage_address_id) {
             $mapping_data = array('erp_customer_id' => $odoo_id, 'mage_customer_id' => $mage_customer_id, 'mage_address_id' => $mage_address_id, 'created_by' => $helper::$mage_user);
             Mage::getModel("magerpsync/magerpsync")->mappingerp($mapping_data);
             if ($odoo_id > 0 && $mage_address_id) {
                 $map_array = array('cus_name' => new xmlrpcval($odoo_id, "int"), 'oe_customer_id' => new xmlrpcval($odoo_id, "int"), 'mag_customer_id' => new xmlrpcval($mage_customer_id, "string"), 'mag_address_id' => new xmlrpcval($mage_address_id, "string"), 'created_by' => new xmlrpcval($helper::$mage_user, "string"), 'instance_id' => $context['instance_id']);
                 $map = new xmlrpcmsg('execute');
                 $map->addParam(new xmlrpcval($helper::$odoo_db, "string"));
                 $map->addParam(new xmlrpcval($userId, "int"));
                 $map->addParam(new xmlrpcval($helper::$odoo_pwd, "string"));
                 $map->addParam(new xmlrpcval("magento.customers", "string"));
                 $map->addParam(new xmlrpcval("create", "string"));
                 $map->addParam(new xmlrpcval($map_array, "struct"));
                 $msg->addParam(new xmlrpcval($context, "struct"));
                 $resp = $client->send($map);
             }
         }
     }
     return $odoo_id;
 }
function doPing($title, $URI)
{
    include "include/xmlrpc.inc";
    $client = new xmlrpc_client("http://sindice.com/xmlrpc/api");
    $payload = new xmlrpcmsg("weblogUpdates.ping");
    $payload->addParam(new xmlrpcval($title));
    $payload->addParam(new xmlrpcval($URI));
    $response = $client->send($payload);
    $xmlresponsestr = $response->serialize();
    $xml = simplexml_load_string($xmlresponsestr);
    $result = $xml->xpath("//value/boolean/text()");
    if ($result) {
        if ($result[0] == "0") {
            // echo "<p>Submitting $URI to $servicetitle succeeded.</p>";
            return;
        }
    } else {
        $err = "Error Code: " . $response->faultCode() . "<br /> Error Message: " . $response->faultString();
        // echo "<p>Failed to submit $URI to $servicetitle.</p>";
    }
}
예제 #17
0
 private function run($service, $command, $params)
 {
     if (!$this->ci->config->item('atheme_enabled')) {
         return;
     }
     $hostname = $this->ci->config->item('atheme_server');
     $port = $this->ci->config->item('atheme_port');
     $path = $this->ci->config->item('atheme_path');
     $username = $this->ci->config->item('atheme_username');
     $password = $this->ci->config->item('atheme_password');
     $sourceip = '127.0.0.1';
     $message = new xmlrpcmsg("atheme.login");
     $message->addParam(new xmlrpcval($username, "string"));
     $message->addParam(new xmlrpcval($password, "string"));
     $client = new xmlrpc_client($path, $hostname, $port);
     $response = $client->send($message);
     $session = NULL;
     if (!$response->faultCode()) {
         $session = explode("<string>", $response->serialize());
         $session = explode("</string", $session[1]);
         $session = $session[0];
     } else {
         return "Authorization failed";
     }
     $message = new xmlrpcmsg("atheme.command");
     $message->addParam(new xmlrpcval($session, "string"));
     $message->addParam(new xmlrpcval($username, "string"));
     $message->addParam(new xmlrpcval($sourceip, "string"));
     $message->addParam(new xmlrpcval($service, "string"));
     $message->addParam(new xmlrpcval($command, "string"));
     if ($params != NULL) {
         foreach ($params as $param) {
             $message->addParam(new xmlrpcval($param, "string"));
         }
         $response = $client->send($message);
     }
     if (!$response->faultCode()) {
         return $response->serialize();
     } else {
         return "Command failed: " . $response->faultString();
     }
 }
예제 #18
0
 protected function _mapOnErp($mage_id, $erp_id)
 {
     $helper = Mage::helper('magerpsync/connection');
     $helper->getSocketConnect();
     $userId = Mage::getSingleton('adminhtml/session')->getUserId();
     if ($userId > 0) {
         $client = $helper->getClientConnect();
         $map_array = array('cat_name' => new xmlrpcval($erp_id, "int"), 'oe_category_id' => new xmlrpcval($erp_id, "int"), 'mag_category_id' => new xmlrpcval($mage_id, "int"), 'created_by' => new xmlrpcval('Manual Mapping', "string"));
         $catg_map = new xmlrpcmsg('execute');
         $catg_map->addParam(new xmlrpcval($helper::$odoo_db, "string"));
         $catg_map->addParam(new xmlrpcval($userId, "int"));
         $catg_map->addParam(new xmlrpcval($helper::$odoo_pwd, "string"));
         $catg_map->addParam(new xmlrpcval("magento.category", "string"));
         $catg_map->addParam(new xmlrpcval("create", "string"));
         $catg_map->addParam(new xmlrpcval($map_array, "struct"));
         $catg_map_resp = $client->send($catg_map);
     }
 }
예제 #19
0
파일: Tax.php 프로젝트: babycarenl/360
 public static function getErpTaxArray()
 {
     $Tax = array();
     $helper = Mage::helper('magerpsync/connection');
     $helper->getSocketConnect();
     $userId = Mage::getSingleton('adminhtml/session')->getUserId();
     if ($userId > 0) {
         if (!Mage::helper('magerpsync')->CheckOdooActiveConfig()) {
             array_push($Category, array('label' => Mage::helper('magerpsync')->__('Check Odoo Configuration Default Settings'), 'value' => ''));
             return $Category;
         }
         $context = $helper->getOdooContext();
         $client = $helper->getClientConnect();
         $key = array();
         $msg_ser = new xmlrpcmsg('execute');
         $msg_ser->addParam(new xmlrpcval($helper::$odoo_db, "string"));
         $msg_ser->addParam(new xmlrpcval($userId, "int"));
         $msg_ser->addParam(new xmlrpcval($helper::$odoo_pwd, "string"));
         $msg_ser->addParam(new xmlrpcval("account.tax", "string"));
         $msg_ser->addParam(new xmlrpcval("search", "string"));
         $msg_ser->addParam(new xmlrpcval($key, "array"));
         $resp0 = $client->send($msg_ser);
         if ($resp0->faultCode()) {
             array_push($Tax, array('label' => Mage::helper('magerpsync')->__('Not Available(Error in Fetching)'), 'value' => ''));
             return $Tax;
         } else {
             $val = $resp0->value()->me['array'];
             $key1 = array(new xmlrpcval('id', 'int'), new xmlrpcval('name', 'string'), new xmlrpcval('amount', 'string'));
             $msg_ser1 = new xmlrpcmsg('execute');
             $msg_ser1->addParam(new xmlrpcval($helper::$odoo_db, "string"));
             $msg_ser1->addParam(new xmlrpcval($userId, "int"));
             $msg_ser1->addParam(new xmlrpcval($helper::$odoo_pwd, "string"));
             $msg_ser1->addParam(new xmlrpcval("account.tax", "string"));
             $msg_ser1->addParam(new xmlrpcval("read", "string"));
             $msg_ser1->addParam(new xmlrpcval($val, "array"));
             $msg_ser1->addParam(new xmlrpcval($key1, "array"));
             $msg_ser1->addParam(new xmlrpcval($context, "struct"));
             $resp1 = $client->send($msg_ser1);
             if ($resp1->faultCode()) {
                 $msg = Mage::helper('magerpsync')->__('Not Available- Error: ') . $resp1->faultString();
                 array_push($Tax, array('label' => $msg, 'value' => ''));
                 return $Tax;
             } else {
                 $value_array = $resp1->value()->scalarval();
                 $count = count($value_array);
                 for ($x = 0; $x < $count; $x++) {
                     $id = $value_array[$x]->me['struct']['id']->me['int'];
                     $name = $value_array[$x]->me['struct']['name']->me['string'] . ' (' . $value_array[$x]->me['struct']['amount']->me['double'] * 100 . '%)';
                     array_push($Tax, array('value' => $id, 'label' => Mage::helper('adminhtml')->__($name)));
                 }
             }
         }
         array_unshift($Tax, array('label' => Mage::helper('magerpsync')->__('--Select Odoo Tax--'), 'value' => ''));
         return $Tax;
     } else {
         array_push($Tax, array('label' => Mage::helper('magerpsync')->__('Not Available(Connection Error)'), 'value' => ''));
         return $Tax;
     }
 }
예제 #20
0
 /**
  * Attempt to boxcar $msgs via system.multicall.
  * Returns either an array of xmlrpcreponses, an xmlrpc error response
  * or false (when received response does not respect valid multicall syntax)
  * @access private
  */
 function _try_multicall($msgs, $timeout, $method)
 {
     // Construct multicall message
     $calls = array();
     foreach ($msgs as $msg) {
         $call['methodName'] = new xmlrpcval($msg->method(), 'string');
         $numParams = $msg->getNumParams();
         $params = array();
         for ($i = 0; $i < $numParams; $i++) {
             $params[$i] = $msg->getParam($i);
         }
         $call['params'] = new xmlrpcval($params, 'array');
         $calls[] = new xmlrpcval($call, 'struct');
     }
     $multicall = new xmlrpcmsg('system.multicall');
     $multicall->addParam(new xmlrpcval($calls, 'array'));
     // Attempt RPC call
     $result =& $this->send($multicall, $timeout, $method);
     if ($result->faultCode() != 0) {
         // call to system.multicall failed
         return $result;
     }
     // Unpack responses.
     $rets = $result->value();
     if ($this->return_type == 'xml') {
         return $rets;
     } else {
         if ($this->return_type == 'phpvals') {
             ///@todo test this code branch...
             $rets = $result->value();
             if (!is_array($rets)) {
                 return false;
                 // bad return type from system.multicall
             }
             $numRets = count($rets);
             if ($numRets != count($msgs)) {
                 return false;
                 // wrong number of return values.
             }
             $response = array();
             for ($i = 0; $i < $numRets; $i++) {
                 $val = $rets[$i];
                 if (!is_array($val)) {
                     return false;
                 }
                 switch (count($val)) {
                     case 1:
                         if (!isset($val[0])) {
                             return false;
                             // Bad value
                         }
                         // Normal return value
                         $response[$i] = new xmlrpcresp($val[0], 0, '', 'phpvals');
                         break;
                     case 2:
                         ///	@todo remove usage of @: it is apparently quite slow
                         $code = @$val['faultCode'];
                         if (!is_int($code)) {
                             return false;
                         }
                         $str = @$val['faultString'];
                         if (!is_string($str)) {
                             return false;
                         }
                         $response[$i] = new xmlrpcresp(0, $code, $str);
                         break;
                     default:
                         return false;
                 }
             }
             return $response;
         } else {
             $rets = $result->value();
             if ($rets->kindOf() != 'array') {
                 return false;
                 // bad return type from system.multicall
             }
             $numRets = $rets->arraysize();
             if ($numRets != count($msgs)) {
                 return false;
                 // wrong number of return values.
             }
             $response = array();
             for ($i = 0; $i < $numRets; $i++) {
                 $val = $rets->arraymem($i);
                 switch ($val->kindOf()) {
                     case 'array':
                         if ($val->arraysize() != 1) {
                             return false;
                             // Bad value
                         }
                         // Normal return value
                         $response[$i] = new xmlrpcresp($val->arraymem(0));
                         break;
                     case 'struct':
                         $code = $val->structmem('faultCode');
                         if ($code->kindOf() != 'scalar' || $code->scalartyp() != 'int') {
                             return false;
                         }
                         $str = $val->structmem('faultString');
                         if ($str->kindOf() != 'scalar' || $str->scalartyp() != 'string') {
                             return false;
                         }
                         $response[$i] = new xmlrpcresp(0, $code->scalarval(), $str->scalarval());
                         break;
                     default:
                         return false;
                 }
             }
             return $response;
         }
     }
 }
예제 #21
0
<html>
<head><title>xmlrpc</title></head>
<body>
<h1>Getstatename demo</h1>
<h2>Send a U.S. state number to the server and get back the state name</h2>
<h3>The code demonstrates usage of the php_xmlrpc_encode function</h3>
<?php 
include "xmlrpc.inc";
// Play nice to PHP 5 installations with REGISTER_LONG_ARRAYS off
if (!isset($HTTP_POST_VARS) && isset($_POST)) {
    $HTTP_POST_VARS = $_POST;
}
if (isset($HTTP_POST_VARS["stateno"]) && $HTTP_POST_VARS["stateno"] != "") {
    $stateno = (int) $HTTP_POST_VARS["stateno"];
    $f = new xmlrpcmsg('examples.getStateName', array(php_xmlrpc_encode($stateno)));
    print "<pre>Sending the following request:\n\n" . htmlentities($f->serialize()) . "\n\nDebug info of server data follows...\n\n";
    $c = new xmlrpc_client("/server.php", "phpxmlrpc.sourceforge.net", 80);
    $c->setDebug(1);
    $r =& $c->send($f);
    if (!$r->faultCode()) {
        $v = $r->value();
        print "</pre><br/>State number " . $stateno . " is " . htmlspecialchars($v->scalarval()) . "<br/>";
        // print "<HR>I got this value back<BR><PRE>" .
        //  htmlentities($r->serialize()). "</PRE><HR>\n";
    } else {
        print "An error occurred: ";
        print "Code: " . htmlspecialchars($r->faultCode()) . " Reason: '" . htmlspecialchars($r->faultString()) . "'</pre><br/>";
    }
} else {
    $stateno = "";
}
예제 #22
0
 /**
  * Parse an xml chunk containing an xmlrpc request and execute the corresponding
  * php function registered with the server
  * @param string $data the xml request
  * @param string $req_encoding (optional) the charset encoding of the xml request
  * @return xmlrpcresp
  * @access private
  */
 function parseRequest($data, $req_encoding = '')
 {
     // 2005/05/07 commented and moved into caller function code
     //if($data=='')
     //{
     //	$data=$GLOBALS['HTTP_RAW_POST_DATA'];
     //}
     // G. Giunta 2005/02/13: we do NOT expect to receive html entities
     // so we do not try to convert them into xml character entities
     //$data = xmlrpc_html_entity_xlate($data);
     $GLOBALS['_xh'] = array();
     $GLOBALS['_xh']['ac'] = '';
     $GLOBALS['_xh']['stack'] = array();
     $GLOBALS['_xh']['valuestack'] = array();
     $GLOBALS['_xh']['params'] = array();
     $GLOBALS['_xh']['pt'] = array();
     $GLOBALS['_xh']['isf'] = 0;
     $GLOBALS['_xh']['isf_reason'] = '';
     $GLOBALS['_xh']['method'] = false;
     // so we can check later if we got a methodname or not
     $GLOBALS['_xh']['rt'] = '';
     // decompose incoming XML into request structure
     if ($req_encoding != '') {
         if (!in_array($req_encoding, array('UTF-8', 'ISO-8859-1', 'US-ASCII'))) {
             error_log('XML-RPC: ' . __METHOD__ . ': invalid charset encoding of received request: ' . $req_encoding);
             $req_encoding = $GLOBALS['xmlrpc_defencoding'];
         }
         /// @BUG this will fail on PHP 5 if charset is not specified in the xml prologue,
         // the encoding is not UTF8 and there are non-ascii chars in the text...
         /// @todo use an empty string for php 5 ???
         $parser = xml_parser_create($req_encoding);
     } else {
         $parser = xml_parser_create();
     }
     xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, true);
     // G. Giunta 2005/02/13: PHP internally uses ISO-8859-1, so we have to tell
     // the xml parser to give us back data in the expected charset
     // What if internal encoding is not in one of the 3 allowed?
     // we use the broadest one, ie. utf8
     // This allows to send data which is native in various charset,
     // by extending xmlrpc_encode_entitites() and setting xmlrpc_internalencoding
     if (!in_array($GLOBALS['xmlrpc_internalencoding'], array('UTF-8', 'ISO-8859-1', 'US-ASCII'))) {
         xml_parser_set_option($parser, XML_OPTION_TARGET_ENCODING, 'UTF-8');
     } else {
         xml_parser_set_option($parser, XML_OPTION_TARGET_ENCODING, $GLOBALS['xmlrpc_internalencoding']);
     }
     if ($this->functions_parameters_type != 'xmlrpcvals') {
         xml_set_element_handler($parser, 'xmlrpc_se', 'xmlrpc_ee_fast');
     } else {
         xml_set_element_handler($parser, 'xmlrpc_se', 'xmlrpc_ee');
     }
     xml_set_character_data_handler($parser, 'xmlrpc_cd');
     xml_set_default_handler($parser, 'xmlrpc_dh');
     if (!xml_parse($parser, $data, 1)) {
         // return XML error as a faultCode
         $r = new xmlrpcresp(0, $GLOBALS['xmlrpcerrxml'] + xml_get_error_code($parser), sprintf('XML error: %s at line %d, column %d', xml_error_string(xml_get_error_code($parser)), xml_get_current_line_number($parser), xml_get_current_column_number($parser)));
         xml_parser_free($parser);
     } elseif ($GLOBALS['_xh']['isf']) {
         xml_parser_free($parser);
         $r = new xmlrpcresp(0, $GLOBALS['xmlrpcerr']['invalid_request'], $GLOBALS['xmlrpcstr']['invalid_request'] . ' ' . $GLOBALS['_xh']['isf_reason']);
     } else {
         xml_parser_free($parser);
         // small layering violation in favor of speed and memory usage:
         // we should allow the 'execute' method handle this, but in the
         // most common scenario (xmlrpcvals type server with some methods
         // registered as phpvals) that would mean a useless encode+decode pass
         if ($this->functions_parameters_type != 'xmlrpcvals' || isset($this->dmap[$GLOBALS['_xh']['method']]['parameters_type']) && $this->dmap[$GLOBALS['_xh']['method']]['parameters_type'] == 'phpvals') {
             if ($this->debug > 1) {
                 $this->debugmsg("\n+++PARSED+++\n" . var_export($GLOBALS['_xh']['params'], true) . "\n+++END+++");
             }
             $r = $this->execute($GLOBALS['_xh']['method'], $GLOBALS['_xh']['params'], $GLOBALS['_xh']['pt']);
         } else {
             // build an xmlrpcmsg object with data parsed from xml
             $m = new xmlrpcmsg($GLOBALS['_xh']['method']);
             // now add parameters in
             for ($i = 0; $i < count($GLOBALS['_xh']['params']); $i++) {
                 $m->addParam($GLOBALS['_xh']['params'][$i]);
             }
             if ($this->debug > 1) {
                 $this->debugmsg("\n+++PARSED+++\n" . var_export($m, true) . "\n+++END+++");
             }
             $r = $this->execute($m);
         }
     }
     return $r;
 }
예제 #23
0
include "xmlrpc.inc";
$inAr = array("Dave" => 24, "Edd" => 45, "Joe" => 37, "Fred" => 27);
reset($inAr);
print "<BR>This was the input data<BR><PRE>";
while (list($key, $val) = each($inAr)) {
    print $key . ", " . $val . "\n";
}
// create parameters from the input array
$p = array();
reset($inAr);
while (list($key, $val) = each($inAr)) {
    $p[] = new xmlrpcval(array("name" => new xmlrpcval($key), "age" => new xmlrpcval($val, "int")), "struct");
}
$v = new xmlrpcval($p, "array");
// print "Output values look like this: <PRE>\n" .  htmlentities($v->serialize()). "</PRE>\n";
$f = new xmlrpcmsg('examples.sortByAge', array($v));
$c = new xmlrpc_client("/server.php", "phpxmlrpc.sourceforge.net", 80);
$c->setDebug(1);
print "\nAnd I sent\n\n";
print htmlspecialchars($f->serialize());
print "</PRE>";
print "Sending request...<BR>\n";
$r = $c->send($f);
//if (!$r) { die("send failed"); }
$v = $r->value();
if (!$r->faultCode()) {
    print "The server gave me these results:<PRE>";
    $max = $v->arraysize();
    for ($i = 0; $i < $max; $i++) {
        $rec = $v->arraymem($i);
        $n = $rec->structmem("name");
예제 #24
0
 public static function getErpPaymentArray()
 {
     $Payment = array();
     $helper = Mage::helper('magerpsync/connection');
     $helper->getSocketConnect();
     $context = $helper->getOdooContext();
     $userId = Mage::getSingleton('adminhtml/session')->getUserId();
     if ($userId > 0) {
         if (!Mage::helper('magerpsync')->CheckOdooActiveConfig()) {
             array_push($Payment, array('label' => 'At Odoo Magento Connection Not Found', 'value' => ''));
             return $Payment;
         }
         $client = $helper->getClientConnect();
         $key1 = array(new xmlrpcval('bank', 'string'), new xmlrpcval('cash', 'string'));
         $key = array(new xmlrpcval(array(new xmlrpcval('type', "string"), new xmlrpcval('in', "string"), new xmlrpcval($key1, "array")), "array"));
         $msg_ser = new xmlrpcmsg('execute');
         $msg_ser->addParam(new xmlrpcval($helper::$odoo_db, "string"));
         $msg_ser->addParam(new xmlrpcval($userId, "int"));
         $msg_ser->addParam(new xmlrpcval($helper::$odoo_pwd, "string"));
         $msg_ser->addParam(new xmlrpcval("account.journal", "string"));
         $msg_ser->addParam(new xmlrpcval("search", "string"));
         $msg_ser->addParam(new xmlrpcval($key, "array"));
         $resp0 = $client->send($msg_ser);
         if ($resp0->faultCode()) {
             array_push($Payment, array('label' => 'Not Available(Error in Fetching)', 'value' => ''));
             return $Payment;
         } else {
             $val = $resp0->value()->me['array'];
             $key1 = array(new xmlrpcval('id', 'int'), new xmlrpcval('name', 'string'));
             $msg_ser1 = new xmlrpcmsg('execute');
             $msg_ser1->addParam(new xmlrpcval($helper::$odoo_db, "string"));
             $msg_ser1->addParam(new xmlrpcval($userId, "int"));
             $msg_ser1->addParam(new xmlrpcval($helper::$odoo_pwd, "string"));
             $msg_ser1->addParam(new xmlrpcval("account.journal", "string"));
             $msg_ser1->addParam(new xmlrpcval("read", "string"));
             $msg_ser1->addParam(new xmlrpcval($val, "array"));
             $msg_ser1->addParam(new xmlrpcval($key1, "array"));
             $msg_ser1->addParam(new xmlrpcval($context, "struct"));
             $resp1 = $client->send($msg_ser1);
             if ($resp1->faultCode()) {
                 $msg = 'Not Available- Error: ' . $resp1->faultString();
                 array_push($Payment, array('label' => $msg, 'value' => ''));
                 return $Payment;
             } else {
                 $value_array = $resp1->value()->scalarval();
                 $count = count($value_array);
                 for ($x = 0; $x < $count; $x++) {
                     $id = $value_array[$x]->me['struct']['id']->me['int'];
                     $name = $value_array[$x]->me['struct']['name']->me['string'];
                     array_push($Payment, array('value' => $id, 'label' => Mage::helper('adminhtml')->__($name)));
                 }
             }
         }
         array_unshift($Payment, array('label' => '--Select Odoo Payment Method--', 'value' => ''));
         return $Payment;
     } else {
         array_push($Payment, array('label' => 'Not Available(Connection Error)', 'value' => ''));
         return $Payment;
     }
 }
예제 #25
0
if ($v) {
    for ($i = 0; $i < $v->arraysize(); $i++) {
        $mname = $v->arraymem($i);
        print "<H3>" . $mname->scalarval() . "</H3>\n";
        $f = new xmlrpcmsg('system.methodHelp');
        $f->addParam(new xmlrpcval($mname->scalarval(), "string"));
        $w = rpc_call($c, $f);
        if ($w) {
            $txt = $w->scalarval();
            if ($txt != "") {
                print "<H4>Documentation</H4><P>{$txt}</P>\n";
            } else {
                print "<P>No documentation available.</P>\n";
            }
        }
        $f = new xmlrpcmsg('system.methodSignature');
        $f->addParam(new xmlrpcval($mname->scalarval(), "string"));
        $w = rpc_call($c, $f);
        if ($w) {
            print "<H4>Signature</H4><P>\n";
            if ($w->kindOf() == "array") {
                for ($j = 0; $j < $w->arraysize(); $j++) {
                    $x = $w->arraymem($j);
                    $ret = $x->arraymem(0);
                    print "<CODE>" . $ret->scalarval() . " " . $mname->scalarval() . "(";
                    if ($x->arraysize() > 1) {
                        for ($k = 1; $k < $x->arraysize(); $k++) {
                            $y = $x->arraymem($k);
                            print $y->scalarval();
                            if ($k < $x->arraysize() - 1) {
                                print ", ";
예제 #26
0
<html>
<head><title>xmlrpc</title></head>
<body>
<?php 
include "xmlrpc.inc";
$f = new xmlrpcmsg('examples.getStateName');
print "<h3>Testing value serialization</h3>\n";
$v = new xmlrpcval(23, "int");
print "<PRE>" . htmlentities($v->serialize()) . "</PRE>";
$v = new xmlrpcval("What are you saying? >> << &&");
print "<PRE>" . htmlentities($v->serialize()) . "</PRE>";
$v = new xmlrpcval(array(new xmlrpcval("ABCDEFHIJ"), new xmlrpcval(1234, 'int'), new xmlrpcval(1, 'boolean')), "array");
print "<PRE>" . htmlentities($v->serialize()) . "</PRE>";
$v = new xmlrpcval(array("thearray" => new xmlrpcval(array(new xmlrpcval("ABCDEFHIJ"), new xmlrpcval(1234, 'int'), new xmlrpcval(1, 'boolean'), new xmlrpcval(0, 'boolean'), new xmlrpcval(true, 'boolean'), new xmlrpcval(false, 'boolean')), "array"), "theint" => new xmlrpcval(23, 'int'), "thestring" => new xmlrpcval("foobarwhizz"), "thestruct" => new xmlrpcval(array("one" => new xmlrpcval(1, 'int'), "two" => new xmlrpcval(2, 'int')), "struct")), "struct");
print "<PRE>" . htmlentities($v->serialize()) . "</PRE>";
$w = new xmlrpcval(array($v, new xmlrpcval("That was the struct!")), "array");
print "<PRE>" . htmlentities($w->serialize()) . "</PRE>";
$w = new xmlrpcval("Mary had a little lamb,\nWhose fleece was white as snow,\nAnd everywhere that Mary went\nthe lamb was sure to go.\n\nMary had a little lamb\nShe tied it to a pylon\nTen thousand volts went down its back\nAnd turned it into nylon", "base64");
print "<PRE>" . htmlentities($w->serialize()) . "</PRE>";
print "<PRE>Value of base64 string is: '" . $w->scalarval() . "'</PRE>";
$f->method('');
$f->addParam(new xmlrpcval("41", "int"));
print "<h3>Testing request serialization</h3>\n";
$op = $f->serialize();
print "<PRE>" . htmlentities($op) . "</PRE>";
print "<h3>Testing ISO date format</h3><pre>\n";
$t = time();
$date = iso8601_encode($t);
print "Now is {$t} --> {$date}\n";
print "Or in UTC, that is " . iso8601_encode($t, 1) . "\n";
$tb = iso8601_decode($date);
예제 #27
0
파일: xmlrpcs.php 프로젝트: Tommar/vino2
 /**
  * Parse an xml chunk containing an xmlrpc request and execute the corresponding
  * php function registered with the server
  * @param string $data the xml request
  * @param string $req_encoding (optional) the charset encoding of the xml request
  * @return xmlrpcresp
  * @access private
  */
 function parseRequest($data, $req_encoding = '')
 {
     // 2005/05/07 commented and moved into caller function code
     //if($data=='')
     //{
     //	$data=$GLOBALS['HTTP_RAW_POST_DATA'];
     //}
     // G. Giunta 2005/02/13: we do NOT expect to receive html entities
     // so we do not try to convert them into xml character entities
     //$data = xmlrpc_html_entity_xlate($data);
     $GLOBALS['_xh'] = array();
     $GLOBALS['_xh']['ac'] = '';
     $GLOBALS['_xh']['stack'] = array();
     $GLOBALS['_xh']['valuestack'] = array();
     $GLOBALS['_xh']['params'] = array();
     $GLOBALS['_xh']['pt'] = array();
     $GLOBALS['_xh']['isf'] = 0;
     $GLOBALS['_xh']['isf_reason'] = '';
     $GLOBALS['_xh']['method'] = false;
     // so we can check later if we got a methodname or not
     $GLOBALS['_xh']['rt'] = '';
     // decompose incoming XML into request structure
     if ($req_encoding != '') {
         if (!in_array($req_encoding, array('UTF-8', 'ISO-8859-1', 'US-ASCII'))) {
             error_log('XML-RPC: xmlrpc_server::parseRequest: invalid charset encoding of received request: ' . $req_encoding);
             $req_encoding = $GLOBALS['xmlrpc_defencoding'];
         }
         /// @BUG this will fail on PHP 5 if charset is not specified in the xml prologue,
         // the encoding is not UTF8 and there are non-ascii chars in the text...
         $parser = xml_parser_create($req_encoding);
     } else {
         $parser = xml_parser_create();
     }
     xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, true);
     // G. Giunta 2005/02/13: PHP internally uses ISO-8859-1, so we have to tell
     // the xml parser to give us back data in the expected charset
     xml_parser_set_option($parser, XML_OPTION_TARGET_ENCODING, $GLOBALS['xmlrpc_internalencoding']);
     if ($this->functions_parameters_type != 'xmlrpcvals') {
         xml_set_element_handler($parser, 'xmlrpc_se', 'xmlrpc_ee_fast');
     } else {
         xml_set_element_handler($parser, 'xmlrpc_se', 'xmlrpc_ee');
     }
     xml_set_character_data_handler($parser, 'xmlrpc_cd');
     xml_set_default_handler($parser, 'xmlrpc_dh');
     if (!xml_parse($parser, $data, 1)) {
         // return XML error as a faultCode
         $r = new xmlrpcresp(0, $GLOBALS['xmlrpcerrxml'] + xml_get_error_code($parser), sprintf('XML error: %s at line %d, column %d', xml_error_string(xml_get_error_code($parser)), xml_get_current_line_number($parser), xml_get_current_column_number($parser)));
         xml_parser_free($parser);
     } elseif ($GLOBALS['_xh']['isf']) {
         xml_parser_free($parser);
         $r = new xmlrpcresp(0, $GLOBALS['xmlrpcerr']['invalid_request'], $GLOBALS['xmlrpcstr']['invalid_request'] . ' ' . $GLOBALS['_xh']['isf_reason']);
     } else {
         xml_parser_free($parser);
         if ($this->functions_parameters_type != 'xmlrpcvals') {
             if ($this->debug > 1) {
                 $this->debugmsg("\n+++PARSED+++\n" . var_export($GLOBALS['_xh']['params'], true) . "\n+++END+++");
             }
             $r = $this->execute($GLOBALS['_xh']['method'], $GLOBALS['_xh']['params'], $GLOBALS['_xh']['pt']);
         } else {
             // build an xmlrpcmsg object with data parsed from xml
             $m = new xmlrpcmsg($GLOBALS['_xh']['method']);
             // now add parameters in
             for ($i = 0; $i < count($GLOBALS['_xh']['params']); $i++) {
                 $m->addParam($GLOBALS['_xh']['params'][$i]);
             }
             if ($this->debug > 1) {
                 $this->debugmsg("\n+++PARSED+++\n" . var_export($m, true) . "\n+++END+++");
             }
             $r = $this->execute($m);
         }
     }
     return $r;
 }
예제 #28
0
 public function deliverOdooOrder($This_order, $erp_order_id)
 {
     $shipment_no = false;
     $tracknums = false;
     $trackCarrier = false;
     $trackArray = array();
     $helper = Mage::helper('magerpsync/connection');
     $client = $helper->getClientConnect();
     $context = $helper->getOdooContext();
     $userId = Mage::getSingleton('adminhtml/session')->getUserId();
     $increment_id = $This_order->getIncrementId();
     $shipment = $This_order->getShipmentsCollection();
     foreach ($shipment as $ship) {
         $shipment_no = $ship->getIncrementId();
         foreach ($ship->getAllTracks() as $tracknum) {
             $tracknums = $tracknum->getNumber();
             $trackCarrier = $tracknum->getCarrierCode();
             $trackinfo = array('magento_carrier_tracking_ref' => new xmlrpcval($tracknums, "string"), 'magento_carrier_code' => new xmlrpcval($trackCarrier, "string"));
             array_push($trackArray, new xmlrpcval($trackinfo, "struct"));
         }
         break;
     }
     $shipment_array = array('order_id' => new xmlrpcval($erp_order_id, "int"), 'mage_ship_number' => new xmlrpcval($shipment_no, "string"), 'carrier_tracking_ref' => new xmlrpcval($tracknums, "string"), 'carrier_code' => new xmlrpcval($trackCarrier, "string"), 'track_array' => new xmlrpcval($trackArray, "array"));
     $msg = new xmlrpcmsg('execute');
     $msg->addParam(new xmlrpcval($helper::$odoo_db, "string"));
     $msg->addParam(new xmlrpcval($userId, "int"));
     $msg->addParam(new xmlrpcval($helper::$odoo_pwd, "string"));
     $msg->addParam(new xmlrpcval("bridge.backbone", "string"));
     $msg->addParam(new xmlrpcval("order_shipped", "string"));
     $msg->addParam(new xmlrpcval($shipment_array, "struct"));
     $msg->addParam(new xmlrpcval($context, "struct"));
     $resp = $client->send($msg);
     if ($resp->faultcode()) {
         $error = "Sync Error, Order " . $increment_id . " During Shipment >>" . $resp->faultString();
         Mage::log($error, null, 'odoo_connector.log');
         return false;
     }
     return true;
 }
예제 #29
0
 protected function _mapOnErp($mage_product_id, $erp_product_id)
 {
     $helper = Mage::helper('magerpsync/connection');
     $helper->getSocketConnect();
     $userId = Mage::getSingleton('adminhtml/session')->getUserId();
     if ($userId > 0) {
         $client = $helper->getClientConnect();
         $map_array = array('template_name' => new xmlrpcval($erp_product_id, "int"), 'erp_template_id' => new xmlrpcval($erp_product_id, "int"), 'mage_product_id' => new xmlrpcval($mage_product_id, "int"), 'created_by' => new xmlrpcval('Manual Mapping', "string"));
         $map_data = new xmlrpcmsg('execute');
         $map_data->addParam(new xmlrpcval($helper::$odoo_db, "string"));
         $map_data->addParam(new xmlrpcval($userId, "int"));
         $map_data->addParam(new xmlrpcval($helper::$odoo_pwd, "string"));
         $map_data->addParam(new xmlrpcval("magento.product.template", "string"));
         $map_data->addParam(new xmlrpcval("create", "string"));
         $map_data->addParam(new xmlrpcval($map_array, "struct"));
         $resp = $client->send($map_data);
         if ($resp->errno != 0) {
             return false;
         } else {
             return true;
         }
     }
 }
예제 #30
0
function post_to_lj($id)
{
    // get text for posting
    $result = mysql_query("select l.name, l.description, l.additional_description, l.image, b.name as artist from wp_product_list as l, wp_product_brands as b where l.id='{$id}' and l.brand = b.id");
    $row = mysql_fetch_array($result);
    $_artist = $row['artist'];
    $_title = nl2br(stripslashes($row['name']));
    $_description = nl2br(stripslashes($row['description']));
    $_additional_description = nl2br(stripslashes($row['additional_description']));
    $_image = $row['image'];
    $subj = "";
    $text = $_artist . ': «' . $_title . '» ' . ' http://cartoonbank.ru/?page_id=29&cartoonid=' . $id . ' ' . $_description . "<br />Тэги: " . $_additional_description;
    /* ваш ник в ЖЖ */
    $name = "_cartoonist_";
    /* ваш пароль в ЖЖ */
    $password = "******";
    /* текст который вы хотите опубликовать */
    //$text = $body; //"Некоторый текст";
    /* заголовок для текста */
    //$subj = $subj; //"заголовок";
    /* включаем библиотеку XML-RPC */
    include "lib/xmlrpc.inc";
    /* (!!!) Все данные в ЖЖ хранятся в кодировке Unicode,
    	используем и в нашем случае такую же кодировку */
    $xmlrpc_internalencoding = 'UTF-8';
    /* Получаем текущее время */
    $date = time();
    $year = date("Y", $date);
    $mon = date("m", $date);
    $day = date("d", $date);
    $hour = date("G", $date);
    $min = date("i", $date);
    /* (!!!) Конвертируем текст из одной кодировки в UTF-8 
    	в данном случае файл хранится в кодировке CP1251 */
    //$text = iconv("CP1251", "UTF-8", html_entity_decode($text));
    //$subj = iconv("CP1251", "UTF-8", html_entity_decode($subj));
    /* заполняем массив с необходимыми переменными */
    $post = array("username" => new xmlrpcval($name, "string"), "password" => new xmlrpcval($password, "string"), "event" => new xmlrpcval($text, "string"), "subject" => new xmlrpcval($subj, "string"), "lineendings" => new xmlrpcval("unix", "string"), "year" => new xmlrpcval($year, "int"), "mon" => new xmlrpcval($mon, "int"), "day" => new xmlrpcval($day, "int"), "hour" => new xmlrpcval($hour, "int"), "min" => new xmlrpcval($min, "int"), "ver" => new xmlrpcval(2, "int"));
    /* на основе массива создаем структуру */
    $post2 = array(new xmlrpcval($post, "struct"));
    /* создаем XML сообщение для сервера */
    $f = new xmlrpcmsg('LJ.XMLRPC.postevent', $post2);
    /* описываем сервер */
    $c = new xmlrpc_client("/interface/xmlrpc", "www.livejournal.com", 80);
    $c->request_charset_encoding = "UTF-8";
    /* по желанию смотрим на XML-код того что отправится на сервер */
    echo nl2br(htmlentities($f->serialize()));
    /* отправляем XML сообщение на сервер */
    $r = $c->send($f);
    /* анализируем результат */
    if (!$r->faultCode()) {
        /* сообщение принято успешно и вернулся XML-результат */
        $v = php_xmlrpc_decode($r->value());
        print_r($v);
    } else {
        /* сервер вернул ошибку */
        print "An error occurred: ";
        print "Code: " . htmlspecialchars($r->faultCode());
        print "Reason: '" . htmlspecialchars($r->faultString()) . "'\n";
    }
}