我们正在使用 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 进行身份验证
如果有不清楚的地方,我很乐意详细说明。谢谢!