USPSRateRequestInternational.php in Commerce USPS 8
File
src/USPSRateRequestInternational.php
View source
<?php
namespace Drupal\commerce_usps;
use Drupal\commerce_price\Price;
use Drupal\commerce_shipping\ShippingRate;
use Drupal\commerce_shipping\ShippingService;
class USPSRateRequestInternational extends USPSRateRequestBase implements USPSRateRequestInterface {
public function resolveRates(array $response) {
$rates = [];
if (!empty($response['IntlRateV2Response']['Package']['Service'])) {
if (!empty($response['IntlRateV2Response']['Package']['Service']['Postage'])) {
$response['IntlRateV2Response']['Package']['Service'] = [
$response['IntlRateV2Response']['Package']['Service'],
];
}
foreach ($response['IntlRateV2Response']['Package']['Service'] as $service) {
$price = $service['Postage'];
if (!empty($this->configuration['rate_options']['rate_class'])) {
switch ($this->configuration['rate_options']['rate_class']) {
case 'commercial_plus':
$price = !empty($service['CommercialPlusPostage']) ? $service['CommercialPlusPostage'] : $price;
break;
case 'commercial':
$price = !empty($service['CommercialPostage']) ? $service['CommercialPostage'] : $price;
break;
}
}
$service_code = $service['@attributes']['ID'];
$service_name = $this
->cleanServiceName($service['SvcDescription']);
if (!in_array($service_code, $this->configuration['services'])) {
continue;
}
$rates[] = new ShippingRate([
'shipping_method_id' => $this->shippingMethod
->id(),
'service' => new ShippingService($service_code, $service_name),
'amount' => new Price($price, 'USD'),
]);
}
}
return $rates;
}
public function buildRate() {
parent::buildRate();
$this->uspsRequest
->setInternationalCall(TRUE);
$this->uspsRequest
->addExtraOption('Revision', 2);
foreach ($this
->getPackages() as $package) {
$this->uspsRequest
->addPackage($package);
}
}
}