gpt4 book ai didi

php - Magento 运输方式加载速度

转载 作者:可可西里 更新时间:2023-10-31 22:11:40 26 4
gpt4 key购买 nike

在我的电子商务网站中,我使用 Shipping API 配置了 FedEx shipping。在方法中,我只选择了一种允许方法,即“国际经济”。尽管我只允许使用 1 种方法,但通过检查 FedEx 的日志,API 似乎查询了所有方法并返回了结果。因此,至少需要将近一分钟的时间才能返回运费。

Magento 正常吗?或者有没有加快查询速度的方法,或者有什么修改或破解方法可以让它只查询允许的方法?

请指教。

谢谢。

最佳答案

我最近看到一些关于 FedEx Magento 和速度的问题。

我不相信是 FedEx express 的要求导致了延误,但为了帮助我们弄清楚(并回答您的问题):-

发出请求的代码是:

//file: app/code/core/Mage/Usa/Modell/Shipping/Carrier/Fedex.php
//class: Mage_Usa_Model_Shipping_Carrier_Fedex
//function: _getQuotes()
protected function _getQuotes()
{
$this->_result = Mage::getModel('shipping/rate_result');
// make separate request for Smart Post method
$allowedMethods = explode(',', $this->getConfigData('allowed_methods'));
if (in_array(self::RATE_REQUEST_SMARTPOST, $allowedMethods)) {
$response = $this->_doRatesRequest(self::RATE_REQUEST_SMARTPOST);
$preparedSmartpost = $this->_prepareRateResponse($response);
if (!$preparedSmartpost->getError()) {
$this->_result->append($preparedSmartpost);
}
}
// make general request for all methods
$response = $this->_doRatesRequest(self::RATE_REQUEST_GENERAL);
$preparedGeneral = $this->_prepareRateResponse($response);
if (!$preparedGeneral->getError() || ($this->_result->getError() && $preparedGeneral->getError())) {
$this->_result->append($preparedGeneral);
}
return $this->_result;
}

所以答案 1:是的,Magento 会收集所有方法,无论您通过管理员允许使用哪种方法。它在两个请求中执行此操作,一个用于 SMARTPOST,一个用于所有其他方法。

答案 2:如果您想请求单一服务类型,那么您正在寻求设置,例如,

$ratesRequest['RequestedShipment']['ServiceType'] = 'INTERNATIONAL_ECONOMY';

为了测试*,您可以从以下位置复制文件

//file: app/code/core/Mage/Usa/Modell/Shipping/Carrier/Fedex.php

//file: app/code/local/Mage/Usa/Modell/Shipping/Carrier/Fedex.php

然后将代码更改为:

//file: app/code/local/Mage/Usa/Modell/Shipping/Carrier/Fedex.php
//class: Mage_Usa_Model_Shipping_Carrier_Fedex
//function: _getQuotes()
protected function _getQuotes()
{
$this->_result = Mage::getModel('shipping/rate_result');
// make separate request for Smart Post method
$allowedMethods = explode(',', $this->getConfigData('allowed_methods'));

//a little test code for me; you can omit it
//echo(nl2br(print_r($allowedMethods,true)));
//exit();
/*
Array<br />
(<br />
[0] => EUROPE_FIRST_INTERNATIONAL_PRIORITY<br />
[1] => FEDEX_1_DAY_FREIGHT<br />
[2] => FEDEX_2_DAY_FREIGHT<br />
[3] => FEDEX_2_DAY<br />
[4] => FEDEX_2_DAY_AM<br />
[5] => FEDEX_3_DAY_FREIGHT<br />
[6] => FEDEX_EXPRESS_SAVER<br />
[7] => FEDEX_GROUND<br />
[8] => FIRST_OVERNIGHT<br />
[9] => GROUND_HOME_DELIVERY<br />
[10] => INTERNATIONAL_ECONOMY<br />
[11] => INTERNATIONAL_ECONOMY_FREIGHT<br />
[12] => INTERNATIONAL_FIRST<br />
[13] => INTERNATIONAL_GROUND<br />
[14] => INTERNATIONAL_PRIORITY<br />
[15] => INTERNATIONAL_PRIORITY_FREIGHT<br />
[16] => PRIORITY_OVERNIGHT<br />
[17] => SMART_POST<br />
[18] => STANDARD_OVERNIGHT<br />
[19] => FEDEX_FREIGHT<br />
[20] => FEDEX_NATIONAL_FREIGHT<br />
)<br />
*/
//THIS IS THE NEW BIT (non core)
if(count($allowedMethods)==1){
//then there is only one method so use it
$response = $this->_doRatesRequest($allowedMethods[0]);
$preparedSingleRate = $this->_prepareRateResponse($response);
if (!$preparedSingleRate->getError() || ($this->_result->getError() && $preparedSingleRate->getError())) {
$this->_result->append($preparedSingleRate);
}
}else{
//revert to default treatment:
if (in_array(self::RATE_REQUEST_SMARTPOST, $allowedMethods)) {
$response = $this->_doRatesRequest(self::RATE_REQUEST_SMARTPOST);
$preparedSmartpost = $this->_prepareRateResponse($response);
if (!$preparedSmartpost->getError()) {
$this->_result->append($preparedSmartpost);
}
}

// make general request for all methods
$response = $this->_doRatesRequest(self::RATE_REQUEST_GENERAL);
$preparedGeneral = $this->_prepareRateResponse($response);
if (!$preparedGeneral->getError() || ($this->_result->getError() && $preparedGeneral->getError())) {
$this->_result->append($preparedGeneral);
}
}
return $this->_result;
}

并在同一文件中编辑函数_formRateRequest的末尾以应对特定的费率请求目的:

//file: app/code/local/Mage/Usa/Modell/Shipping/Carrier/Fedex.php
//class: Mage_Usa_Model_Shipping_Carrier_Fedex
//function: formRateRequest()
protected function _formRateRequest($purpose)
{
$r = $this->_rawRequest;
//...
//...
if ($purpose == self::RATE_REQUEST_GENERAL) {
$ratesRequest['RequestedShipment']['RequestedPackageLineItems'][0]['InsuredValue'] = array(
'Amount' => $r->getValue(),
'Currency' => $this->getCurrencyCode()
);
} else if ($purpose == self::RATE_REQUEST_SMARTPOST) {
$ratesRequest['RequestedShipment']['ServiceType'] = self::RATE_REQUEST_SMARTPOST;
$ratesRequest['RequestedShipment']['SmartPostDetail'] = array(
'Indicia' => ((float)$r->getWeight() >= 1) ? 'PARCEL_SELECT' : 'PRESORTED_STANDARD',
'HubId' => $this->getConfigData('smartpost_hubid')
);
} else { //THIS IS THE NEW BIT (non core)
$ratesRequest['RequestedShipment']['RequestedPackageLineItems'][0]['InsuredValue'] = array(
'Amount' => $r->getValue(),
'Currency' => $this->getCurrencyCode()
);
$ratesRequest['RequestedShipment']['ServiceType'] = $purpose;
}

return $ratesRequest;
}//end function _formRateRequest

那应该只获取您想要的速率。 但这可能无法解决您的速度问题

您可以通过添加一些计时器和一些日志记录(到 var/log/shipping_fedex.log)来运行计时测试,如下所示:

//file: app/code/local/Mage/Usa/Modell/Shipping/Carrier/Fedex.php
//class: Mage_Usa_Model_Shipping_Carrier_Fedex
//function:
protected function _getQuotes()
{
$this->_result = Mage::getModel('shipping/rate_result');
// make separate request for Smart Post method
$allowedMethods = explode(',', $this->getConfigData('allowed_methods'));
//THIS IS THE NEW BIT (non core)
if(count($allowedMethods)==1){
//then there is only one method so use it
$time_start = microtime(true);
$response = $this->_doRatesRequest($allowedMethods[0]);
$preparedSingleRate = $this->_prepareRateResponse($response);
if (!$preparedSingleRate->getError() || ($this->_result->getError() && $preparedSingleRate->getError())) {
$this->_result->append($preparedSingleRate);
}
$time_end = microtime(true);
$time = $time_end - $time_start;
$this->_debug('Polled '.$allowedMethods[0].' in '.$time.' seconds');
}else{
//revert to default treatment:

$time_start = microtime(true);
if (in_array(self::RATE_REQUEST_SMARTPOST, $allowedMethods)) {
$response = $this->_doRatesRequest(self::RATE_REQUEST_SMARTPOST);
$preparedSmartpost = $this->_prepareRateResponse($response);
if (!$preparedSmartpost->getError()) {
$this->_result->append($preparedSmartpost);
}
}
$time_end = microtime(true);
$time = $time_end - $time_start;
$this->_debug('Polled SMART_POST in '.$time.' seconds');

// make general request for all methods
$time_start = microtime(true);
$response = $this->_doRatesRequest(self::RATE_REQUEST_GENERAL);
$preparedGeneral = $this->_prepareRateResponse($response);
if (!$preparedGeneral->getError() || ($this->_result->getError() && $preparedGeneral->getError())) {
$this->_result->append($preparedGeneral);
}
$time_end = microtime(true);
$time = $time_end - $time_start;
$this->_debug('Polled all methods in '.$time.' seconds');
}

return $this->_result;
}

我正在使用 FedEx 沙箱,但为了它的值(value),我在日志文件中记录了这些时间:

    //file: var/log/shipping_fedex.log

Polled SMART_POST in 1.1807501316071 seconds
Polled SMART_POST in 1.3307409286499 seconds
Polled all methods in 0.78275394439697 seconds //returns warning 556 [Message] => There are no valid services available.
Polled all methods in 2.0135650634766 seconds //returns 8 valid shipping methods
Polled all methods in 1.3563330173492 seconds //returns INTERNATIONAL_ECONOMY and INTERNATIONAL_PRIORITY
//single service request results
Polled FEDEX_2_DAY in 3.1365180015564 seconds
Polled FEDEX_2_DAY in 3.6471431255341 seconds
Polled FEDEX_2_DAY in 2.1428818702698 seconds
Polled INTERNATIONAL_ECONOMY in 2.2340540885925 seconds
Polled INTERNATIONAL_ECONOMY in 2.9664940834045 seconds

因此,使用计时器加载您的文件,让我们知道您得到了什么。

*对于生产,当然习惯在这里说“制作您自己的模块,扩展类 Mage_Usa_Model_Shipping_Carrier_Fedex”。

**注意:我不得不将请求中发送的货币代码强制发送到“USD”,以使 FedEx 返回 SMART_POST 以外的服务类型的任何运费,所以如果您测试这个东西要小心。

关于php - Magento 运输方式加载速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22902987/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com