UPS Time in Transit
<?php
class upsEstimate {
var $AccessLicenseNumber;
var $UserId;
var $Password;
var $shipperNumber;
var $credentials;
var $dimensionsUnits = "IN";
var $weightUnits = "LBS";
function setCredentials($access,$user,$pass,$shipper) {
$this->AccessLicenseNumber = $access;
$this->UserID = $user;
$this->Password = $pass;
$this->shipperNumber = $shipper;
$this->credentials = 1;
}
function setDimensionsUnits($unit){
$this->dimensionsUnits = $unit;
}
function setWeightUnits($unit){
$this->weightUnits = $unit;
}
// Define the function getRate() - no parameters
function getRate($toCity, $toState, $toZip, $toCountry, $packageWeight, $today) {
if ($this->credentials != 1) {
print 'Please set your credentials with the setCredentials function';
die();
}
$data ="<?xml version=\"1.0\"?>
<AccessRequest xml:lang='en-US'>
<AccessLicenseNumber>$this->AccessLicenseNumber</AccessLicenseNumber>
<UserId>$this->UserID</UserId>
<Password>$this->Password</Password>
</AccessRequest>
<?xml version='1.0'?>
<TimeInTransitRequest xml:lang='en-US'>
<Request>
<TransactionReference>
<CustomerContext>COMPANY NAME HERE</CustomerContext>
<XpciVersion>1.001</XpciVersion>
</TransactionReference>
<RequestAction>TimeInTransit</RequestAction>
</Request>
<TransitFrom>
<AddressArtifactFormat>
<PoliticalDivision2>San Diego</PoliticalDivision2>
<PoliticalDivision1>CA</PoliticalDivision1>
<PostcodePrimaryLow>92115</PostcodePrimaryLow>
<CountryCode>US</CountryCode>
</AddressArtifactFormat>
</TransitFrom>
<TransitTo>
<AddressArtifactFormat>
<PoliticalDivision2>$toCity</PoliticalDivision2>
<PoliticalDivision1>$toState</PoliticalDivision1>
<PostcodePrimaryLow>$toZip</PostcodePrimaryLow>
<CountryCode>$toCountry</CountryCode>
</AddressArtifactFormat>
</TransitTo>
<PickupDate>$today</PickupDate>
<MaximumListSize>5</MaximumListSize>
<InvoiceLineTotal>
<CurrencyCode>USD</CurrencyCode>
<MonetaryValue>0</MonetaryValue>
</InvoiceLineTotal>
<ShipmentWeight>
<UnitOfMeasurement>
<Code>LBS</Code>
<Description>Pounds</Description>
</UnitOfMeasurement>
<Weight>$packageWeight</Weight>
</ShipmentWeight>
</TimeInTransitRequest>";
// This is the PRODUCTION server -- use when your testing is finished.
// https://onlinetools.ups.com/ups.app/xml/TimeInTransit
//This is the TESTING SERVER.
$ch = curl_init("https://wwwcie.ups.com/ups.app/xml/TimeInTransit");
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch,CURLOPT_POST,1);
curl_setopt($ch,CURLOPT_TIMEOUT, 60);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch,CURLOPT_POSTFIELDS,$data);
$result=curl_exec ($ch);
//echo '<!-- '. $result. ' -->'; // THIS LINE IS FOR DEBUG PURPOSES ONLY-IT WILL SHOW IN HTML COMMENTS
$data = strstr($result, '<?');
$xml = simplexml_load_string($data);
$json = json_encode($xml);
$array = json_decode($json,TRUE);
curl_close($ch);
return $array;
}
}
?>
<?php
/*
* This file is part of the Miva PHP Provision package.
*
* (c) Gassan Idriss <gidriss@mivamerchant.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
/**
* MivaArraySerializer
*
* Takes a PHP array and serializes it for use in MivaScript which can then be
* deserialized to a miva structure/array
*
* @author Gassan Idriss <gidriss@mivamerchant.com>
*/
class MivaArraySerializer
{
/**
* serialize
*
* @param array $data
* @return string
*/
public static function serialize(array $data)
{
return static::isAssociativeArray($data) ?
static::serializeStructure($data) : static::serializeArray($data);
}
/**
* isAssociativeArray
*
* @param array $test
* @return bool
*/
public static function isAssociativeArray(array $test)
{
return (bool)count(array_filter(array_keys($test), 'is_string'));
}
/**
* serializeStructure
*
* @param array $data
* @param string $owningMember
*
* @return string
*/
public static function serializeStructure(array $data, $owningMember = '')
{
$serializedData = array();
foreach($data as $key => $value) {
$_key = $owningMember.':'.$key;
if( is_array($value) ) {
$dataToMerge = static::serializeArray($value, $_key);
if ($dataToMerge) {
$serializedData[] = $dataToMerge;
}
} else {
$serializedData[] = $_key.'='.urlencode($value);
}
}
return implode(',', $serializedData);
}
/**
* serializeArray
*
* @param array $data
* @param string $owningMember
*
* @return string
*/
public static function serializeArray(array $data, $owningMember = '')
{
if (static::isAssociativeArray($data)) {
return static::serializeStructure($data, $owningMember);
}
$serializedData = array();
foreach ($data as $key => $value) {
$_key = $owningMember.'['.($key+1).']';
if (is_array($value)){
if (static::isAssociativeArray($value)) {
$dataToMerge = static::serializeStructure($value, $_key);
if ($dataToMerge) {
$serializedData[] = $dataToMerge;
}
} else {
$dataToMerge = static::serializeArray($value, $_key);
if ($dataToMerge) {
$serializedData[] = $dataToMerge;
}
}
} else {
$serializedData[] = $_key.'='.urlencode($value);
}
}
return implode(',', $serializedData);
}
}
<?php
/* UPS CODES
UPS Next Day Air | 1DA |Miva: 1DA
UPS Next Day Air Saver | 1DP
UPS 2nd Day Air A.M. | 2DM
UPS 2nd Day Air | 2DA |Miva: 02
UPS 3 Day Select | 3DS |Miva: 12
UPS GROUND | GND |Miva: 03
*/
$toCity = $_REQUEST['toCity'];
$toState = $_REQUEST['toState'];
$toZip = $_REQUEST['toZip'];
$toCountry = $_REQUEST['toCountry'];
$packageWeight = $_REQUEST['packageWeight'];
// You can add changes in here.. For instance if it's after 4pm, ship the next day?
$nextTuesday = strtotime("next Tuesday");
$today = date('Ymd', $nextTuesday);
//$today = date('Ymd');
?>
<?php
require("upsEstimate.php");
include_once("miva-array.php");
/*************************************
Get your own credentials from ups.com
*************************************/
$ups_accessnumber = "YOUR ACCESS NUMBER";
$ups_username = "YOUR USERNAME";
$ups_password = "YOUR PASSWORD";
$ups_shippernumber = ""; // This can be empty.
// All UPS Services you want
$services = array(
"03"=>"GND",
"12"=>"3DS",
"02"=>"2DA",
"01"=>"1DA"
);
$myRate = new upsEstimate;
$myRate->setCredentials($ups_accessnumber, $ups_username, $ups_password, $ups_shippernumber);
$rate = $myRate->getRate($toCity, $toState, $toZip, $toCountry, $packageWeight, $today);
$estimates = $rate['TransitResponse']['ServiceSummary'];
$mivaArray = [];
foreach ( $services as $name => $code) {
foreach ( $estimates as $r ) {
if ( $r['Service']['Code'] == $code ) {
$time = strtotime($r['EstimatedArrival']['Date']);
$date = date('l, F d, Y', $time);
$mivaArray[] = array('module' => 'upsxml', 'code' => $name, 'estimate' => $date);
}
}
}
echo MivaArraySerializer::serialize($mivaArray);
?>
<mvt:foreach array="shippingmethods" iterator="method">
<mvt:assign name="estimatedtime" value="''" />
<mvt:assign name="l.settings:shippingMethodCode" value="ltrim(l.settings:method:code)" />
<mvt:foreach array="estimatedtime" iterator="et">
<mvt:if expr="l.settings:method:code EQ l.settings:et:code AND l.settings:method:module EQ l.settings:et:module">
<mvt:assign name="estimatedtime" value="' - ' $ l.settings:et:estimate" />
</mvt:if>
</mvt:foreach>
<div class="form-row">
<mvt:if expr="pos1 EQ 1">
<span class="column one-tenth"><input type="radio" name="ShippingMethod" value="&mvte:method:module;:&mvte:method:code;" checked="checked" id="l-shipping-method-&mvte:shippingMethodCode;" /></span>
<label for="l-shipping-method-&mvte:shippingMethodCode;" class="column three-fifths">&mvt:method:name;&mvt:global:estimatedtime;</label>
<mvt:if expr="NOT ISNULL l.settings:method:price">
<span class="column three-tenths align-right">&mvt:method:formatted_price;</span>
</mvt:if>
<mvt:else>
<span class="column one-tenth"><input type="radio" name="ShippingMethod" value="&mvte:method:module;:&mvte:method:code;" id="l-shipping-method-&mvte:shippingMethodCode;" /></span>
<label for="l-shipping-method-&mvte:shippingMethodCode;" class="column three-fifths">&mvt:method:name;&mvt:global:estimatedtime;</label>
<mvt:if expr="NOT ISNULL l.settings:method:price">
<span class="column three-tenths align-right">&mvt:method:formatted_price;</span>
</mvt:if>
</mvt:if>
</div>
</mvt:foreach>
<mvt:assign name="theUrl" value="'http://' $ g.domain:name $ '/time-in-transit/index.php?toCity=' $ g.Basket:ship_city $ '&toState=' $ g.Basket:ship_state $ '&toZip=' $ g.Basket:ship_zip $ '&toCountry=' $ g.Basket:ship_cntry $ '&packageWeight=' $ g.basket:weight" />
<mvt:assign name="cleanUrl" value="glosub( g.theUrl, ' ', '%20' )" />
<mvt:assign name="l.settings:estimatedtime" value="miva_array_deserialize( g.timeintransit )" />
<mvt:call action="g.cleanUrl" method="'GET'">
<mvt:assign name="l.settings:estimatedtime" value="miva_array_deserialize( s.callvalue )" />
</mvt:call>
http://tessguefen.com/time-in-transit/index.php?toCity=Miami&toState=FL&toZip=33142&toCountry=US&packageWeight=2