0

Magento ショップに追加された製品を取得するために 1 時間ごとに実行される cron ジョブがあります。

厄介なことに、動作を停止しており、デバッグが困難であることが証明されています。

実行しようとすると、次のエラーが表示されます。

  [SoapFault]
  looks like we got no XML document

いくつかの調査を行った後、返されるxmlにエラーが含まれている可能性があるため、有効ではないためエラーが発生したようです。

返された xml を確認する方法はありますか?

コードは変更されていないため、別のユーザーによって変更された magento の設定である可能性があります。

cron ジョブは Symfony 2 プラットフォーム上に構築されています。

私のコードは次のとおりです。

private $client;
private $session;

private $api = 'https://www.mywebsite.co.uk/api/?wsdl';
private $user = 'xxx';
private $pass = 'xxx';

$output->writeln('Updating shop product...');

$this->client = new \SoapClient($this->api);
$this->session = $this->client->login($this->user, $this->pass);

$products = $this->client->call($this->session, 'catalog_product.list');
4

2 に答える 2

1

Fiddler ( Windows ) やCharles ( cross-platform )などのデバッグ プロキシを使用して、送信要求と受信応答をデバッグ/監視します。

プロキシが実行されている場合127.0.0.1:8080、オプション配列を介して SOAP クライアントにプロキシを使用するように指示できます。

private $options = array(
    'proxy_host'   => '127.0.0.1',
    'proxy_port'   => '8080',
    'cache_wsdl'   => WSDL_CACHE_NONE,   // try disabling the wsdl cache for debugging
    'soap_version' => SOAP_1_1,          // check the soap version
    'user_agent'   => 'Batman incoming v2.0',
    // ... more options
);

$this->client = new \SoapClient($this->api, $this->options);

これで、SOAPClient はプロキシ経由でリクエストを送信し、着信/発信 xml (または非 xml 、hehe ) を確認できます。

于 2013-07-11T14:58:50.870 に答える
1

SOAP クライアント クラスを拡張することで、何が返されているかを正確に確認できるようになりました。

class SoapClientNG extends \SoapClient{

    public function __doRequest($req, $location, $action, $version = SOAP_1_1, $one_way = 0){

        $xml = explode("\r\n", parent::__doRequest($req, $location, $action, $version));


        $response = preg_replace( '/^(\x00\x00\xFE\xFF|\xFF\xFE\x00\x00|\xFE\xFF|\xFF\xFE|\xEF\xBB\xBF)/', "", $xml[5] );

        return $response;

    }

}

受信していたxmlにエラーが含まれていることが判明しました。マグネトで製品を削除して再入力すると、問題が解決しました。

于 2013-07-12T10:58:03.997 に答える