2

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/ )

何か不明な点があれば、喜んで詳しく説明します。ありがとうございました!

4

0 に答える 0