1.9.3.0 अद्यतन के बाद SOAP कनेक्शन समस्याएं


12

मैंने अपना Magento Store 1.9.2.4 से 1.9.3.0 तक अपडेट किया है

हम शिपिंग सॉफ़्टवेयर (शिपवर्क्स) का उपयोग करते हैं जो SOAP / XML-RPC उपयोगकर्ता के माध्यम से जुड़ता है।

अपडेट शिपवर्क्स लॉगिंग के बाद लॉग में यह प्रतिक्रिया दिखाता है:

<?xml version="1.0" encoding="UTF-8"?>
-<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
-<SOAP-ENV:Body>
-<SOAP-ENV:Fault>
<faultcode>1</faultcode>
<faultstring>Internal Error. Please see log for details.</faultstring>
</SOAP-ENV:Fault>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

तो मैं गया और Magento में अपवाद लॉगिंग चालू किया और निम्नलिखित त्रुटि प्राप्त की:

2016-10-13T18:24:14+00:00 ERR (3): 
SoapFault exception: [1] Internal Error. Please see log for details. in /public_html/app/code/core/Mage/Api/Model/Server/Adapter/Soap.php:196
Stack trace:
#0 /public_html/app/code/core/Mage/Api/Model/Server/Handler/Abstract.php(140): Mage_Api_Model_Server_Adapter_Soap->fault('1', 'Internal Error....')
#1 /public_html/app/code/core/Mage/Api/Model/Server/Handler/Abstract.php(48): Mage_Api_Model_Server_Handler_Abstract->_fault('internal')
#2 /public_html/app/code/core/Mage/Api/Model/Server/Handler/Abstract.php(559): Mage_Api_Model_Server_Handler_Abstract->handlePhpError(4096, 'Argument 1 pass...', '/home/deepsix/p...', 559, Array)
#3 /public_html/app/code/core/Mage/Api/Model/Server/Handler/Abstract.php(299): Mage_Api_Model_Server_Handler_Abstract->processingMethodResult('<?xml version="...')
#4 [internal function]: Mage_Api_Model_Server_Handler_Abstract->call('ca4d34d100c92c8...', 'shipWorksApi.ge...', Array)
#5 /public_html/lib/Zend/Soap/Server.php(889): SoapServer->handle('<?xml version="...')
#6 /public_html/app/code/core/Mage/Api/Model/Server/Adapter/Soap.php(174): Zend_Soap_Server->handle()
#7 /public_html/app/code/core/Mage/Api/Model/Server.php(138): Mage_Api_Model_Server_Adapter_Soap->run()
#8 /public_html/app/code/core/Mage/Api/controllers/SoapController.php(40): Mage_Api_Model_Server->run()
#9 /public_html/app/code/core/Mage/Core/Controller/Varien/Action.php(418): Mage_Api_SoapController->indexAction()
#10 /public_html/app/code/core/Mage/Core/Controller/Varien/Router/Standard.php(254): Mage_Core_Controller_Varien_Action->dispatch('index')
#11 /public_html/app/code/core/Mage/Core/Controller/Varien/Front.php(172): Mage_Core_Controller_Varien_Router_Standard->match(Object(Mage_Core_Controller_Request_Http))
#12 /public_html/app/code/core/Mage/Core/Model/App.php(365): Mage_Core_Controller_Varien_Front->dispatch()
#13 /public_html/app/Mage.php(684): Mage_Core_Model_App->run(Array)
#14 /public_html/index.php(83): Mage::run('', 'store')
#15 {main}

इसलिए मैंने 1.9.2.4 और 1.9.3.0 से Abstract.php के बीच एक अंतर किया है और निम्नलिखित प्राप्त किया है:

290a291
>                 $result = array();
292c293
<                     return $model->$method((is_array($args) ? $args : array($args)));
---
>                     $result = $model->$method((is_array($args) ? $args : array($args)));
294c295
<                     return $model->$method($args);
---
>                     $result = $model->$method($args);
296c297
<                     return call_user_func_array(array(&$model, $method), $args);
---
>                     $result = call_user_func_array(array(&$model, $method), $args);
297a299
>                 return $this->processingMethodResult($result);
403a406
>                     $callResult = array();
405c408
<                         $result[] = $model->$method((is_array($args) ? $args : array($args)));
---
>                         $callResult = $model->$method((is_array($args) ? $args : array($args)));
407c410
<                         $result[] = $model->$method($args);
---
>                         $callResult = $model->$method($args);
409c412
<                         $result[] = call_user_func_array(array(&$model, $method), $args);
---
>                         $callResult = call_user_func_array(array(&$model, $method), $args);
410a414
>                     $result[] = $this->processingMethodResult($callResult);
544a549,585
>     }
> 
>     /**
>      * Prepare Api data for XML exporting
>      * See allowed characters in XML:
>      * @link http://www.w3.org/TR/2000/REC-xml-20001006#NT-Char
>      *
>      * @param array $result
>      * @return mixed
>      */
>     public function processingMethodResult(array $result)
>     {
>         foreach ($result as &$row) {
>             if (!is_null($row) && !is_bool($row) && !is_numeric($row)) {
>                 $row = $this->processingRow($row);
>             }
>         }
>         return $result;
>     }
> 
>     /**
>      * Prepare Api row data for XML exporting
>      * Convert not allowed symbol to numeric character reference
>      *
>      * @param $row
>      * @return mixed
>      */
>     public function processingRow($row)
>     {
>         $row = preg_replace_callback(
>             '/[^\x{0009}\x{000a}\x{000d}\x{0020}-\x{D7FF}\x{E000}-\x{FFFD}\x{10000}-\x{10FFFF}]/u',
>             function ($matches) {
>                 return '&#' . Mage::helper('core/string')->uniOrd($matches[0]) . ';';
>             },
>             $row
>         );
>         return $row;

किसी भी सहायता की सराहना की जाएगी।

जवाबों:


14

यहां एक और एक्सटेंशन के साथ एक ही त्रुटि। system.log कहता है

तर्क 1 Mage_Api_Model_Server_Handler_Abstract :: processingMethodResult () के लिए दिया जाना चाहिए प्रकार सरणी, स्ट्रिंग दिया, एप्लिकेशन / कोड / कोर / Mage / Api / मॉडल / सर्वर / हैंडलर / Abstract.php में बुलाया ...

मुझे लगता है कि समस्या नई विधि है

Mage_Api_Model_Server_Handler_Abstract::processingMethodResult(array $result)

जो केवल सरणियों को स्वीकार करता है। अतः स्केल एपल वैल्यू लौटाने वाला प्रत्येक एपि फंक्शन इस एरर को फेंक देगा। इसे फिर से पाने के लिए मैंने कॉपी app/code/core/Mage/Api/Model/Server/Handler/Abstract.phpकिया app/code/local/Mage/Api/Model/Server/Handler/Abstract.phpऔर पैच किया processingMethodResult:

public function processingMethodResult($result)
{
    if (is_array($result)) {
        foreach ($result as &$row) {
            if (!is_null($row) && !is_bool($row) && !is_numeric($row)) {
                if (is_array($row)) {
                    $row = $this->processingMethodResult($row);
                } else {
                    $row = $this->processingRow($row);
                }
            }
        }
    } else {
        if (!is_null($result) && !is_bool($result) && !is_numeric($result)) {
            $result = $this->processingRow($result);
        }
    }
    return $result;
}

Magento के कौन से संस्करण में आप चल रहे हैं?
लैंडनएल

यह समस्या को ठीक करता है। Magento की कोर फ़ाइल को यहाँ पर फिर से array बनाम string में कैसे बदला जाएगा?
लैंडनएल

बहुत बढ़िया तय है, धन्यवाद। किसी ने इसे Magento के साथ बग के रूप में उठाया है? इससे बहुत सारे लोगों को काटा जा रहा है।
BlueC

परिवर्तन PHP7 के आसपास अधिक है, नीचे मेरा जवाब देखें। इसके अलावा, stackoverflow.com/a/4103536/158325 यह वास्तव में एक बग नहीं है, लेकिन एपीआई PHP7 को संगत बनाता है।
B00MER

1
@LanderL: मैंने 1.9.2.4 से 1.9.3.0 तक अपडेट किया।
बेलगोर

1

शिप मॉड्यूल मॉड्यूल और / या आपके द्वारा चलाए जा रहे PHP संस्करण की तुलना में अधिक संगत नहीं है:

काटे गए PHP त्रुटि संदेश का अनुमान लगाकर लौटा:

Argument 1 pass...' इसकी बहुत संभावना है Argument 1 passed to methodhere() must be an instance of string, string given

PHP का कौन सा संस्करण आप चला रहे हैं और क्या आपने शिपोग्राफ़ के साथ यह देखने के लिए परामर्श किया है कि क्या उनके पास नवीनतम मैगेंटो संस्करण / पैच के साथ कोई नया संस्करण और / या संगतता समस्याएँ हैं।

इसके अलावा, आप यहां कुछ और लॉगिंग जोड़ सकते हैं: https://github.com/OpenMage/magento-mirror/blob/magento-1.9/lib/Zend/Soap/Server.php4L889 ट्रंकेटेड PHP त्रुटि के अधिक कैप्चर करने के लिए यह लौटाया जा रहा है, मान्यता प्राप्त करने के लिए कि यह सही त्रुटि है।

उम्मीद है की यह मदद करेगा।


मैं छंटनी की गई त्रुटि को और अधिक कैसे प्राप्त करूंगा? मैं अनिश्चित हूं कि लाइन की लंबाई कैसे बढ़ाई जाए।
लैंडनएल

वर्तमान में सिस्टम php 5.6.25 पर चल रहा है, मैंने आज ही शिपवर्क्स कहा है, लेकिन चूंकि मैगनेटो अपडेट 1.9.3.0 कल ही आया था, मुझे विश्वास नहीं है कि उन्हें इस मुद्दे पर अभी तक देखने का मौका मिला है।
लैंडनएल

1

बेलगामर्स के जवाब ने वास्तव में मेरी मदद की, लेकिन मैंने एपीआई रिपॉसन में अतिरिक्त वस्तुओं को शामिल करने की अनुमति देने के लिए पैच को थोड़ा संशोधित किया।

उदाहरण के लिए अब आप ऑर्डर जानकारी के लिए Magento XML-RPC कॉल के साथ फॉरवर्डस्कोर स्टोर्क्रेडिट और / या गिफ्टकार्ड ऑब्जेक्ट-एरेज़ प्राप्त करें।

(कोड Björn Tantau द्वारा सुझाव से अद्यतन - वस्तुओं और संग्रह के साथ बेहतर काम करने के लिए)

public function processingMethodResult($result)
{
    if (is_object($result) && is_callable(array($result, 'toArray'))) {
        $result = $result->toArray();
    }
    if (is_array($result)) {
        foreach ($result as &$row) {
            if (is_object($row) && is_callable(array($row, 'toArray'))) {
                $row = $row->toArray();
            }
            if (!is_null($row) && !is_bool($row) && !is_numeric($row)) {
                if (is_array($row)) {
                    $row = $this->processingMethodResult($row);
                } else {
                    $row = $this->processingRow($row);
                }
            }
        }
    } else {
        if (!is_null($result) && !is_bool($result) && !is_numeric($result)) {
            $result = $this->processingRow($result);
        }
    }
    return $result;
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.