2

我们正在使用 Microsoft Dynamics NAV SOAP 网络服务来获取网上商店的一些产品信息,为了获取它,我们将发送参数,例如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 购物车,并且不在现场处理任何付款,而是使用 3rd 方支付网关来处理。我们只是将带有送货地址的临时订单存储为 db 中的 serialized() 数据,在从支付网关成功回调后,我们将订单标记为已付款,并将 orderinfomation 发送到 Dynamics NAV 网络服务,“真实”订单将在其中得到处理. 网上商店使用 HTTPS。用户可以拥有账户来查看他们的订单,订单也是从 Web 服务中获取的,而不是从数据库中获取的。我们在 Codeigniter ( http://benedmunds.com/ion_auth/ )中使用 Ion Auth 进行身份验证

如果有不清楚的地方,我很乐意详细说明。谢谢!

4

0 回答 0