3

(これがひいきに聞こえる場合は申し訳ありません...貼り付けるコードがあまりないので、説明を徹底すると思いました)

FedEx のSOAP WSDLPHPのネイティブで使用していSoapClientます。

サービスRateService、などには、引数として配列を受け入れるShipServiceメソッドがあります。RateService->getRates(), ShipService->processShipment(), etc.

「ハードコードされた」配列から始めて、WSDL を介して配列を検証し、FedEx のサーバーに接続して、成功した応答を得ることができました。

ここが不可解な部分です。

「ハードコードされた」配列を取り、それらの周りにクラスを構築して、配列を「動的に」構築できるようにしました(あなたがそうするように)。

SoapClient を介して「動的に作成された」配列を実行すると、次のエラーが発生しました。

料金リクエストの場合

FedEx SoapFault エラー: 属性は許可されていません (ワイルドカードは許可されていません): 要素 ShippingChargesPayment@http://fedex.com/ws/rate/v13 の ID

船のリクエストについて

SOAP-ERROR: エンコーディング: 未解決の参照 '#ref1'

配列が WSDL 経由で検証されていないようです。

更新-問題をデバッグして機能させることができましたが、なぜそれが問題なのかわかりません....ここにコードと詳細な説明があります...誰かが理由を説明したい場合に備えて.

私の出荷クラスは、「空の」リクエスト配列を含むプライベート変数で始まります。

class Shipment {
    private $_fedex_request = array(
        ...
        "RequestedShipment" => array(
            ...
            "ShippingChargesPayment" => array(
                "PaymentType" => "SENDER",
                "Payor" => array(
                    "ResponsibleParty" => array(
                        "AccountNumber" => null,
                        "Contact" => array(
                            "EMailAddress" => null,
                        ),
                    ),
                ),
            ),
            "CustomsClearanceDetail" => array(
                "DutiesPayment" => array(
                    "PaymentType" => "SENDER",
                    "Payor" => array(
                        "ResponsibleParty" => array(
                            "AccountNumber" => null,
                            "Contact" => array(
                                "EMailAddress" => null,
                            ),
                        ),
                    ),
                ),
            ),
        ),
    );
}

「空白の」リクエストを更新する方法がいくつかありますが、そのうちの1つに次のようなものがあります。

$ResponsibleParty = array(
    'AccountNumber' => Kohana::$config->load('fedex.currency.'.$this->_from_currency.'.billAccount'),
    'Contact' => array(
        'EMailAddress' => "name@domain.com",
    ),
);

$this->_fedex_request['RequestedShipment']['ShippingChargesPayment']['Payor']['ResponsibleParty'] = $ResponsibleParty;
$this->_fedex_request['RequestedShipment']['CustomsClearanceDetail']['DutiesPayment']['Payor']['ResponsibleParty'] = $ResponsibleParty;

....私はこれに変更しました:

$this->_fedex_request['RequestedShipment']['ShippingChargesPayment']['Payor']['ResponsibleParty'] = array(
    'AccountNumber' => Kohana::$config->load('fedex.currency.'.$this->_from_currency.'.billAccount'),
    'Contact' => array(
        'EMailAddress' => "name@domain.com",
    ),
);

$this->_fedex_request['RequestedShipment']['CustomsClearanceDetail']['DutiesPayment']['Payor']['ResponsibleParty']= array(
    'AccountNumber' => Kohana::$config->load('fedex.currency.'.$this->_from_currency.'.billAccount'),
    'Contact' => array(
        'EMailAddress' => "name@domain.com",
    ),
);

これは参照渡しの問題ですか?

4

1 に答える 1

0
$this->_fedex_request['RequestedShipment']['ShippingChargesPayment']['Payor']['ResponsibleParty'] = array(
'AccountNumber' => Kohana::$config->load('fedex.currency.'.$this->_from_currency.'.billAccount'),
'Contact' => array(
    'EMailAddress' => "name@domain.com",
),
);

この 2 つは等しくないようです。

$this->_fedex_request['RequestedShipment']['CustomsClearanceDetail']['DutiesPayment']['Payor']['ResponsibleParty'] = Kohana::$config->load('fedex.currency.'.$this->_from_currency.'.billAccount'),
'Contact' => array(
    'EMailAddress' => "name@domain.com",
),
);

私の推測では、あなたは書くつもりです

$this->_fedex_request['RequestedShipment']['CustomsClearanceDetail']['DutiesPayment']['Payor']['ResponsibleParty'] = 
array(
'AccountNumber' => Kohana::$config->load('fedex.currency.'.$this->_from_currency.'.billAccount'),
'Contact' => array(
    'EMailAddress' => "name@domain.com",
),
);
于 2012-09-06T17:48:53.570 に答える