(これがひいきに聞こえる場合は申し訳ありません...貼り付けるコードがあまりないので、説明を徹底すると思いました)
FedEx のSOAP
WSDL
をPHP
のネイティブで使用してい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",
),
);
これは参照渡しの問題ですか?