Microsoft Dynamics NAV SOAP Web サービスを使用して、Web ショップの製品情報をフェッチし、次のようなパラメーターとともに送信します。Brand, Type and Modelnumber
これらのパラメーターは文字によって大きく異なります。文字列は次のようになります。
モデル番号: DSM 9510 XA+
3709 / VITALITY
002.228.31 HÖGVÅRDIG
ユーザーは、動的に生成された選択からブランド、タイプ、およびモデル番号を選択する必要があります。jQuery では、値を取得し、Codeigniter URI で許可されていない文字を文字列に置き換えてから、送信する前にそれを urlencode します。このような:
var model = $("select#model").val();
model = model.replace(/\//g, '_');
model = encodeURIComponent(model);
var url = fab + '/' + type + '/' + model + '/' + produktnummer;
window.location.href = "categories/" + url;
次に、Codeigniter のカテゴリ コントローラーで、禁止されている文字を元の文字列に置き換えます。次にrawurldecode($model)
、各パラメーターを実行します。
これで、正しい結果を返すために必要な文字列をSOAP Web サービスに送信することができました。カテゴリ コントローラーでは、次のようにします (簡略化)。
public function index($brand, $type, $model, $productnr = NULL)
{
$model = str_replace('_', '/', $model);
$model = rawurldecode($model);
$categories = $this->fetch->get_categories($brand, $type, $model, $productnr);
}
フェッチ モデルでは、このブログ記事で説明されているように、NTLMSoapClient を使用して Dynamics NAV Web サービスに接続します。
http://blogs.msdn.com/b/freddyk/archive/2010/01/19/connecting-to-nav-web-services-from-php.aspx
SoapClient はリクエストの送信時にエスケープを処理しますか?
これはおそらく最も賢明な解決策ではありませんが、これを行う他の方法を見つけることはできません. ある種のサイトマップを作成するには、これらの URI が必要だからです。質問は次のとおりです。
アプリケーションでこれらのあいまいな文字列を操作して、これをアーカイブするためのより適切で安全な方法はありますか?
ショップに関する追加情報:
ウェブショップの場合、Codeigniter カートを拡張し、サイトで支払いを処理しませんが、サード パーティの支払いゲートウェイを使用して処理します。配送先住所を含む一時的な注文を serialized() データとして db に保存し、支払いゲートウェイからのコールバックが成功した後、注文に支払い済みのフラグを付け、「実際の」注文が処理される Dynamics NAV Web サービスに orderinfomation を送信します。 . ウェブショップは HTTPS を使用しています。ユーザーは自分の注文を表示するためのアカウントを持つことができます。注文はデータベースからではなく Web サービスから取得されます。Codeigniter での認証には Ion Auth を使用します ( http://benedmunds.com/ion_auth/ )
何か不明な点があれば、喜んで詳しく説明します。ありがとうございました!