1.9.3.0 আপডেটের পরে সোপ সংযোগের সমস্যা


12

আমি আমার ম্যাজেন্টো স্টোরটি 1.9.2.4 থেকে 1.9.3.0 এ আপডেট করেছি

আমরা শিপিং সফ্টওয়্যার (শিপওয়ার্কস) ব্যবহার করি যা কোনও এসওএপি / এক্সএমএল-আরপিসি ব্যবহারকারীর মাধ্যমে সংযুক্ত হয়।

আপডেট শিপ ওয়ার্কস লগিংয়ের পরে লগগুলিতে এই প্রতিক্রিয়াটি দেখায়:

<?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>

সুতরাং আমি গিয়েছিলাম এবং ম্যাজেন্টোতে ব্যতিক্রম লগইন চালু করেছি এবং নিম্নলিখিত ত্রুটিটি পেয়েছি:

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 :: প্রসেসিং মেথড্রেসাল্ট () অবশ্যই অ্যাপ্লিকেশন / কোড / কোর / ম্যাজে / এপি / মডেল / সার্ভার / হ্যান্ডলার / অ্যাবস্ট্রাক্ট.এফপি ... তে ডাকা স্ট্রিং জাতীয় ধরণের হতে হবে ...

আমি মনে করি সমস্যাটি নতুন পদ্ধতি

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;
}

আপনি ম্যাজেন্টোর কোন সংস্করণটি চালাচ্ছেন?
ল্যান্ডনএল

এটি সমস্যার সমাধান করে। কেন এখানে ম্যাজেন্টো কোর ফাইলটি অ্যারে বনাম স্ট্রিংয়ে পরিবর্তিত হবে?
ল্যান্ডনএল

দুর্দান্ত ফিক্স, আপনাকে ধন্যবাদ। কেউ কি ম্যাগেন্টোর সাথে এটি বাগ হিসাবে উত্থাপিত হয়েছে? প্রচুর মানুষ এটি দ্বারা দংশিত হতে চলেছে।
ব্লুসি

পরিবর্তনটি পিএইচপি 7 এর আশেপাশে, নীচে আমার উত্তর দেখুন। এছাড়াও, stackoverflow.com/a/4103536/158325 এটা সত্যিই একটি বাগ না, কিন্তু এপিআই PHP7 সামঞ্জস্যপূর্ণ করে তোলে।
B00MER

1
@ ল্যান্ডনএল: আমি 1.9.2.4 থেকে 1.9.3.0 এ আপডেট করেছি।
বেলগোর

1

সম্ভবত চালানো শিপস্টেশন মডিউল এবং / অথবা আপনি যে পিএইচপি সংস্করণটি চালিয়ে যাচ্ছেন তা সামঞ্জস্যপূর্ণ নয়:

ফিরে আসা ছাঁটা পিএইচপি ত্রুটি বার্তাটি অনুমান করা:

Argument 1 pass...' সম্ভবত Argument 1 passed to methodhere() must be an instance of string, string given

আপনি পিএইচপি-র কোন সংস্করণটি চালাচ্ছেন এবং সর্বশেষ ম্যাজেন্টো সংস্করণ / প্যাচগুলির সাথে তাদের কোনও নতুন সংস্করণ এবং / অথবা সামঞ্জস্যতার সমস্যা আছে কিনা তা দেখার জন্য আপনি শিপস্টেশনের সাথে পরামর্শ করেছেন।

এছাড়াও, আপনি এখানে আরও কিছু লগিং যুক্ত করতে পারেন : ছাঁটাইয়া পিএইচপি ত্রুটি আরও ক্যাপচার করতে https://github.com/OpenMage/magento-mirror/blob/magento-1.9/lib/Zend/Soap/Server.php#L889 এটি ফিরিয়ে দেওয়া হচ্ছে, যাচাই করার জন্য যে এটি সঠিক ত্রুটি ফিরে আসছিল।

আশাকরি এটা সাহায্য করবে.


আমি কীভাবে আরও ছাঁটাই ত্রুটি পেতে পারি? আমি লাইন দৈর্ঘ্য বৃদ্ধি কিভাবে অনিশ্চিত।
ল্যান্ডনএল

সিস্টেমটি বর্তমানে পিএইচপি 5.6.25 চলছে, আমি আজ শিপ ওয়ার্কস ডাকলাম, কিন্তু যেহেতু ম্যাজেন্টো আপডেটটি 1.9.3.0 গতকালই প্রকাশিত হয়েছে, আমি বিশ্বাস করি না যে তারা এখনও এই বিষয়টি দেখার সুযোগ পেয়েছে।
ল্যান্ডনএল

1

বেলগার্স উত্তরটি আমাকে সত্যই সহায়তা করেছে, কিন্তু অতিরিক্ত জিনিসগুলিকে এপিআই পুনরায় সরবরাহের জন্য অন্তর্ভুক্ত করার জন্য আমি প্যাচটি সামান্য পরিবর্তন করে শেষ করেছি।

উদাহরণস্বরূপ আপনি এখন অর্ডার সম্পর্কিত তথ্যের জন্য ম্যাজেন্টো এক্সএমএল-আরপিসি কল সহ ওয়ার্কস স্টোরক্রেডিট এবং / অথবা গিফটকার্ড অবজেক্ট-অ্যারে পাবেন।

(বিজরান টান্টোর পরামর্শ থেকে কোড আপডেট হয়েছে - অবজেক্টস এবং সংগ্রহের সাথে আরও ভাল কাজ করার জন্য)

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;
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.