Magento 2 - hacking FedEx rate request
We are running CE 2.1.2
Magento 2 sets the residential flag in the rates request based on the configuration date. This means that all quotes are either residential or commercial, depending on what you set in the shipping method.
I want to set the flag based on if the Destination Address has a Company set or not.
What I did is go into /vendor/magento/module-fedex/Model/carrier.php and change line 430 from
'Residential' => (bool)$this->getConfigData('residence_delivery'),
to
'Residential' => !empty(trim($r->getRecipientContactCompanyName())),
The is not working. Residential is false always. So empty must be returning true always.
Is the getRecipientContactCompanyName() not the right way to get the Company name in in this module?
Any hints as to what I am doing wrong would be appreciated.
Thanks
magento-2.1 shipping-methods shipping-address fedex
bumped to the homepage by Community♦ 5 mins ago
This question has answers that may be good or bad; the system has marked it active so that they can be reviewed.
add a comment |
We are running CE 2.1.2
Magento 2 sets the residential flag in the rates request based on the configuration date. This means that all quotes are either residential or commercial, depending on what you set in the shipping method.
I want to set the flag based on if the Destination Address has a Company set or not.
What I did is go into /vendor/magento/module-fedex/Model/carrier.php and change line 430 from
'Residential' => (bool)$this->getConfigData('residence_delivery'),
to
'Residential' => !empty(trim($r->getRecipientContactCompanyName())),
The is not working. Residential is false always. So empty must be returning true always.
Is the getRecipientContactCompanyName() not the right way to get the Company name in in this module?
Any hints as to what I am doing wrong would be appreciated.
Thanks
magento-2.1 shipping-methods shipping-address fedex
bumped to the homepage by Community♦ 5 mins ago
This question has answers that may be good or bad; the system has marked it active so that they can be reviewed.
add a comment |
We are running CE 2.1.2
Magento 2 sets the residential flag in the rates request based on the configuration date. This means that all quotes are either residential or commercial, depending on what you set in the shipping method.
I want to set the flag based on if the Destination Address has a Company set or not.
What I did is go into /vendor/magento/module-fedex/Model/carrier.php and change line 430 from
'Residential' => (bool)$this->getConfigData('residence_delivery'),
to
'Residential' => !empty(trim($r->getRecipientContactCompanyName())),
The is not working. Residential is false always. So empty must be returning true always.
Is the getRecipientContactCompanyName() not the right way to get the Company name in in this module?
Any hints as to what I am doing wrong would be appreciated.
Thanks
magento-2.1 shipping-methods shipping-address fedex
We are running CE 2.1.2
Magento 2 sets the residential flag in the rates request based on the configuration date. This means that all quotes are either residential or commercial, depending on what you set in the shipping method.
I want to set the flag based on if the Destination Address has a Company set or not.
What I did is go into /vendor/magento/module-fedex/Model/carrier.php and change line 430 from
'Residential' => (bool)$this->getConfigData('residence_delivery'),
to
'Residential' => !empty(trim($r->getRecipientContactCompanyName())),
The is not working. Residential is false always. So empty must be returning true always.
Is the getRecipientContactCompanyName() not the right way to get the Company name in in this module?
Any hints as to what I am doing wrong would be appreciated.
Thanks
magento-2.1 shipping-methods shipping-address fedex
magento-2.1 shipping-methods shipping-address fedex
asked Mar 27 '17 at 20:57
shimonshimon
164
164
bumped to the homepage by Community♦ 5 mins ago
This question has answers that may be good or bad; the system has marked it active so that they can be reviewed.
bumped to the homepage by Community♦ 5 mins ago
This question has answers that may be good or bad; the system has marked it active so that they can be reviewed.
add a comment |
add a comment |
2 Answers
2
active
oldest
votes
The problem is that $r is not an instance of RateRequest, it's a plain DataObject that is created in the setRequest method. You need to add
if ($request->getRecipientContactCompanyName()) {
$r->setRecipientContactCompanyName($request->getRecipientContactCompanyName());
}
to the setRequest method before $this->setRawRequest($r);.
You should not alter the core files, instead you should override the class in a module, otherwise your changes may be lost when updating Magento.
add a comment |
At the point in the code that you are building the $r object, the $request array does not contain RecepientContactCompanyName, so getRecipientContactCompanyName() will always return FALSE.
Try pulling the Company Name from the session:
Mage::getSingleton('checkout/session')->getQuote()->getShippingAddress()->getCompany()
I have this working in 1.9.2.2 for FedEx (show Ground for commercial, Home Delivery for residential) using the following code:
In app/code/local/Mage/Usa/Model/Shipping/Carrier/Fedex.php
public function setRequest(Mage_Shipping_Model_Rate_Request $request) {
...
...
if (Mage::getSingleton('checkout/session')->getQuote()->getShippingAddress()->getCompany()) {
$r->setIsResidential(FALSE);
} else {
$r->setIsResidential(TRUE);
}
...
...
}
protected function _formRateRequest($purpose) {
...
...
'Recipient' => array(
'Address' => array(
'PostalCode' => $r->getDestPostal(),
'CountryCode' => $r->getDestCountry(),
'Residential' => $r->getIsResidential()
)
),
...
...
}
add a comment |
Your Answer
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "479"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
var $window = $(window),
onScroll = function(e) {
var $elem = $('.new-login-left'),
docViewTop = $window.scrollTop(),
docViewBottom = docViewTop + $window.height(),
elemTop = $elem.offset().top,
elemBottom = elemTop + $elem.height();
if ((docViewTop elemBottom)) {
StackExchange.using('gps', function() { StackExchange.gps.track('embedded_signup_form.view', { location: 'question_page' }); });
$window.unbind('scroll', onScroll);
}
};
$window.on('scroll', onScroll);
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fmagento.stackexchange.com%2fquestions%2f166423%2fmagento-2-hacking-fedex-rate-request%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
The problem is that $r is not an instance of RateRequest, it's a plain DataObject that is created in the setRequest method. You need to add
if ($request->getRecipientContactCompanyName()) {
$r->setRecipientContactCompanyName($request->getRecipientContactCompanyName());
}
to the setRequest method before $this->setRawRequest($r);.
You should not alter the core files, instead you should override the class in a module, otherwise your changes may be lost when updating Magento.
add a comment |
The problem is that $r is not an instance of RateRequest, it's a plain DataObject that is created in the setRequest method. You need to add
if ($request->getRecipientContactCompanyName()) {
$r->setRecipientContactCompanyName($request->getRecipientContactCompanyName());
}
to the setRequest method before $this->setRawRequest($r);.
You should not alter the core files, instead you should override the class in a module, otherwise your changes may be lost when updating Magento.
add a comment |
The problem is that $r is not an instance of RateRequest, it's a plain DataObject that is created in the setRequest method. You need to add
if ($request->getRecipientContactCompanyName()) {
$r->setRecipientContactCompanyName($request->getRecipientContactCompanyName());
}
to the setRequest method before $this->setRawRequest($r);.
You should not alter the core files, instead you should override the class in a module, otherwise your changes may be lost when updating Magento.
The problem is that $r is not an instance of RateRequest, it's a plain DataObject that is created in the setRequest method. You need to add
if ($request->getRecipientContactCompanyName()) {
$r->setRecipientContactCompanyName($request->getRecipientContactCompanyName());
}
to the setRequest method before $this->setRawRequest($r);.
You should not alter the core files, instead you should override the class in a module, otherwise your changes may be lost when updating Magento.
answered Mar 28 '17 at 2:31
Aaron AllenAaron Allen
6,56421027
6,56421027
add a comment |
add a comment |
At the point in the code that you are building the $r object, the $request array does not contain RecepientContactCompanyName, so getRecipientContactCompanyName() will always return FALSE.
Try pulling the Company Name from the session:
Mage::getSingleton('checkout/session')->getQuote()->getShippingAddress()->getCompany()
I have this working in 1.9.2.2 for FedEx (show Ground for commercial, Home Delivery for residential) using the following code:
In app/code/local/Mage/Usa/Model/Shipping/Carrier/Fedex.php
public function setRequest(Mage_Shipping_Model_Rate_Request $request) {
...
...
if (Mage::getSingleton('checkout/session')->getQuote()->getShippingAddress()->getCompany()) {
$r->setIsResidential(FALSE);
} else {
$r->setIsResidential(TRUE);
}
...
...
}
protected function _formRateRequest($purpose) {
...
...
'Recipient' => array(
'Address' => array(
'PostalCode' => $r->getDestPostal(),
'CountryCode' => $r->getDestCountry(),
'Residential' => $r->getIsResidential()
)
),
...
...
}
add a comment |
At the point in the code that you are building the $r object, the $request array does not contain RecepientContactCompanyName, so getRecipientContactCompanyName() will always return FALSE.
Try pulling the Company Name from the session:
Mage::getSingleton('checkout/session')->getQuote()->getShippingAddress()->getCompany()
I have this working in 1.9.2.2 for FedEx (show Ground for commercial, Home Delivery for residential) using the following code:
In app/code/local/Mage/Usa/Model/Shipping/Carrier/Fedex.php
public function setRequest(Mage_Shipping_Model_Rate_Request $request) {
...
...
if (Mage::getSingleton('checkout/session')->getQuote()->getShippingAddress()->getCompany()) {
$r->setIsResidential(FALSE);
} else {
$r->setIsResidential(TRUE);
}
...
...
}
protected function _formRateRequest($purpose) {
...
...
'Recipient' => array(
'Address' => array(
'PostalCode' => $r->getDestPostal(),
'CountryCode' => $r->getDestCountry(),
'Residential' => $r->getIsResidential()
)
),
...
...
}
add a comment |
At the point in the code that you are building the $r object, the $request array does not contain RecepientContactCompanyName, so getRecipientContactCompanyName() will always return FALSE.
Try pulling the Company Name from the session:
Mage::getSingleton('checkout/session')->getQuote()->getShippingAddress()->getCompany()
I have this working in 1.9.2.2 for FedEx (show Ground for commercial, Home Delivery for residential) using the following code:
In app/code/local/Mage/Usa/Model/Shipping/Carrier/Fedex.php
public function setRequest(Mage_Shipping_Model_Rate_Request $request) {
...
...
if (Mage::getSingleton('checkout/session')->getQuote()->getShippingAddress()->getCompany()) {
$r->setIsResidential(FALSE);
} else {
$r->setIsResidential(TRUE);
}
...
...
}
protected function _formRateRequest($purpose) {
...
...
'Recipient' => array(
'Address' => array(
'PostalCode' => $r->getDestPostal(),
'CountryCode' => $r->getDestCountry(),
'Residential' => $r->getIsResidential()
)
),
...
...
}
At the point in the code that you are building the $r object, the $request array does not contain RecepientContactCompanyName, so getRecipientContactCompanyName() will always return FALSE.
Try pulling the Company Name from the session:
Mage::getSingleton('checkout/session')->getQuote()->getShippingAddress()->getCompany()
I have this working in 1.9.2.2 for FedEx (show Ground for commercial, Home Delivery for residential) using the following code:
In app/code/local/Mage/Usa/Model/Shipping/Carrier/Fedex.php
public function setRequest(Mage_Shipping_Model_Rate_Request $request) {
...
...
if (Mage::getSingleton('checkout/session')->getQuote()->getShippingAddress()->getCompany()) {
$r->setIsResidential(FALSE);
} else {
$r->setIsResidential(TRUE);
}
...
...
}
protected function _formRateRequest($purpose) {
...
...
'Recipient' => array(
'Address' => array(
'PostalCode' => $r->getDestPostal(),
'CountryCode' => $r->getDestCountry(),
'Residential' => $r->getIsResidential()
)
),
...
...
}
answered Apr 20 '17 at 2:07
John PetroskyJohn Petrosky
11
11
add a comment |
add a comment |
Thanks for contributing an answer to Magento Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
var $window = $(window),
onScroll = function(e) {
var $elem = $('.new-login-left'),
docViewTop = $window.scrollTop(),
docViewBottom = docViewTop + $window.height(),
elemTop = $elem.offset().top,
elemBottom = elemTop + $elem.height();
if ((docViewTop elemBottom)) {
StackExchange.using('gps', function() { StackExchange.gps.track('embedded_signup_form.view', { location: 'question_page' }); });
$window.unbind('scroll', onScroll);
}
};
$window.on('scroll', onScroll);
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fmagento.stackexchange.com%2fquestions%2f166423%2fmagento-2-hacking-fedex-rate-request%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
var $window = $(window),
onScroll = function(e) {
var $elem = $('.new-login-left'),
docViewTop = $window.scrollTop(),
docViewBottom = docViewTop + $window.height(),
elemTop = $elem.offset().top,
elemBottom = elemTop + $elem.height();
if ((docViewTop elemBottom)) {
StackExchange.using('gps', function() { StackExchange.gps.track('embedded_signup_form.view', { location: 'question_page' }); });
$window.unbind('scroll', onScroll);
}
};
$window.on('scroll', onScroll);
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
var $window = $(window),
onScroll = function(e) {
var $elem = $('.new-login-left'),
docViewTop = $window.scrollTop(),
docViewBottom = docViewTop + $window.height(),
elemTop = $elem.offset().top,
elemBottom = elemTop + $elem.height();
if ((docViewTop elemBottom)) {
StackExchange.using('gps', function() { StackExchange.gps.track('embedded_signup_form.view', { location: 'question_page' }); });
$window.unbind('scroll', onScroll);
}
};
$window.on('scroll', onScroll);
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
var $window = $(window),
onScroll = function(e) {
var $elem = $('.new-login-left'),
docViewTop = $window.scrollTop(),
docViewBottom = docViewTop + $window.height(),
elemTop = $elem.offset().top,
elemBottom = elemTop + $elem.height();
if ((docViewTop elemBottom)) {
StackExchange.using('gps', function() { StackExchange.gps.track('embedded_signup_form.view', { location: 'question_page' }); });
$window.unbind('scroll', onScroll);
}
};
$window.on('scroll', onScroll);
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown