【发布时间】:2013-09-24 15:46:41
【问题描述】:
我们正在开发 magento 数据库和表。 Magento 似乎在表sales_flat_order 字段protect_code 中编写了一个代码来定义是否已经完成了发票或装运。它看起来像
01b335 或a0a243
但是没有key 可以理解这个保护代码的含义。有没有解释这些代码的含义以及它们是如何产生的?
【问题讨论】:
我们正在开发 magento 数据库和表。 Magento 似乎在表sales_flat_order 字段protect_code 中编写了一个代码来定义是否已经完成了发票或装运。它看起来像
01b335 或a0a243
但是没有key 可以理解这个保护代码的含义。有没有解释这些代码的含义以及它们是如何产生的?
【问题讨论】:
如果您在2052 附近的行中查看app/code/core/Mage/Sales/Model/Order.php,您会发现以下内容:
$this->setData('protect_code', substr(md5(uniqid(mt_rand(), true) . ':' . microtime(true)), 5, 6));
这是为订单生成protect_code 的地方(使用 md5、uniqid 和随机整数的组合。
如果您查看 app/code/core/Mage/Sales/Helper/Guest.php 并找到 loadValidOrder 函数。您会看到protect_code 在某些区域使用,以确保加载的订单与客人的 cookie 值正确。
它还用于其他领域,例如跟踪信息比较。您可以看到在 Shipment 模型中调用 getProtectCode() 方法的几个实例,以将订单与跟踪信息进行比较。一个使用它的函数的例子是:
public function getTrackingInfoByTrackId()
{
$track = Mage::getModel('sales/order_shipment_track')->load($this->getTrackId());
if ($track->getId() && $this->getProtectCode() == $track->getProtectCode()) {
$this->_trackingInfo = array(array($track->getNumberDetail()));
}
return $this->_trackingInfo;
}
正如您在 $this->getProtectCode() == $track->getProtectCode() 中看到的那样,跟踪 protect_code 必须与 Shipment protect_code 匹配。
【讨论】: