4

UPS API を使用していますが、デバッグに苦労しています。次のスタック トレースを取得しています。

Details
Type: SoapFault
Message: An exception has been raised as a result of client data.
File: /Users/shawn/Documents/work/sites/Wingspan/kaleco/lib/SixString/Utilities/Ups.php
Line: 161
Trace

#0 /Users/shawn/Documents/work/sites/Wingspan/kaleco/lib/SixString/Utilities/Ups.php(161): SoapClient->__soapCall('ProcessShipment', Array)
#1 /Users/shawn/Documents/work/sites/Wingspan/kaleco/routes/ups.php(14): SixString\Utilities\Ups->getShipment()
#2 [internal function]: {closure}()
#3 /Users/shawn/Documents/work/sites/Wingspan/kaleco/vendor/slim/slim/Slim/Router.php(172): call_user_func_array(Object(Closure), Array)
#4 /Users/shawn/Documents/work/sites/Wingspan/kaleco/vendor/slim/slim/Slim/Slim.php(1222): Slim\Router->dispatch(Object(Slim\Route))
#5 /Users/shawn/Documents/work/sites/Wingspan/kaleco/vendor/slim/slim/Slim/Middleware/Flash.php(86): Slim\Slim->call()
#6 /Users/shawn/Documents/work/sites/Wingspan/kaleco/vendor/slim/slim/Slim/Middleware/MethodOverride.php(94): Slim\Middleware\Flash->call()
#7 /Users/shawn/Documents/work/sites/Wingspan/kaleco/vendor/slim/slim/Slim/Middleware/SessionCookie.php(116): Slim\Middleware\MethodOverride->call()
#8 /Users/shawn/Documents/work/sites/Wingspan/kaleco/vendor/slim/slim/Slim/Middleware/PrettyExceptions.php(67): Slim\Middleware\SessionCookie->call()
#9 /Users/shawn/Documents/work/sites/Wingspan/kaleco/vendor/slim/slim/Slim/Slim.php(1174): Slim\Middleware\PrettyExceptions->call()
#10 /Users/shawn/Documents/work/sites/Wingspan/kaleco/public/index.php(6): Slim\Slim->run()
#11 {main}

コードのブロックは次のとおりです。

    try{
        $mode = array('soap_version' => 'SOAP_1_1',  'trace' => 1,'exceptions' => true );
        $client = new \SoapClient($wsdl , $mode);
        $client->__setLocation($endpointurl);

        $header = new \SoapHeader('http://www.ups.com/XMLSchema/XOLTWS/UPSS/v1.0','UPSSecurity',$this->upss);
        $client->__setSoapHeaders($header);

        if(strcmp($operation,"ProcessShipment") == 0 ) {
            $resp = $client->__soapCall('ProcessShipment',array($this->processShipment()));
            echo "Response Status: " . $resp->Response->ResponseStatus->Description ."\n";
            //print_r($client->__getLastRequest());
        }
        else if (strcmp($operation , "ProcessShipConfirm") == 0) {
            $resp = $client->__soapCall('ProcessShipConfirm',array($this->processShipConfirm()));
            echo "Response Status: " . $resp->Response->ResponseStatus->Description ."\n";
        }
        else {
            $resp = $client->__soapCall('ProcessShipeAccept',array($this->processShipAccept()));
            //get status
            echo "Response Status: " . $resp->Response->ResponseStatus->Description ."\n";
            echo "<pre>";
            print_r($resp);
            echo "</pre>";
        }
    }
    catch(Exception $ex){
        print_r ($ex);
    }

行 161 は上記のコードにあります。これが実際の行です。

$resp = $client->__soapCall('ProcessShipConfirm',array($this->processShipConfirm()));

これをデバッグする方法を探しています。catchブロックに到達していないようで、例外の原因を特定できないようです。

4

4 に答える 4

1

注意: UPS は、追跡番号が正しくない場合にこのエラーを返します。適切な (有効な) 追跡番号を使用すると、問題が解決しました。

于 2014-05-15T14:44:29.273 に答える
1

PHP での例外処理のニュアンスはわかりませんが、C# でも Soap の例外はかなり厄介です。Visual Studio のデバッガーでは、未処理の例外の詳細を IDE で直接確認できます。これを行うオプションがある場合は、例外の"detail"XML 要素を探します。これには、リクエストで何が中断されたかを示す Web サービスのメッセージが含まれているためです。

実際に例外をトラップすることに関しては、@Jeff Atwood による古いが優れた記事があります。これは (あえぎ) VB.NET 向けに書かれていますが、Soap の例外を作成する理由についての洞察を提供する可能性があります。より良い SOAP 例外をスローする

于 2013-09-04T20:47:42.220 に答える
1

UPS では、Rates API の ShipFrom/CountryCode または ShipTo/CountryCode が正しくない場合にも、このエラーが発生します。たとえば、ドイツは評価できません。これは、UPS dev docs にはありません。

于 2014-09-05T12:55:28.543 に答える