You are here

function uc_fedex_tracking_request in FedEx Shipping 5

Same name and namespace in other branches
  1. 6.2 uc_fedex.trck.inc \uc_fedex_tracking_request()
  2. 6 uc_fedex.module \uc_fedex_tracking_request()
  3. 7.2 uc_fedex.trck.inc \uc_fedex_tracking_request()
  4. 7 uc_fedex.module \uc_fedex_tracking_request()

Constructs and executes a SOAP TrackService request. Returns Tracking information.

SOAP call parameters are set in the order they appear in the WSDL file Associative array of DOM returned.

Parameters

$tracking_number: FedEx Tracking number

Return value

Associative array mirroring contents of SOAP object returned from server.

File

./uc_fedex.module, line 704
FedEx Web Services Rate / Available Services Quote

Code

function uc_fedex_tracking_request($tracking_number) {

  /* Set up SOAP call. */

  /*  Allow tracing so details of request can be retrieved for error logging */
  $client = new SoapClient(drupal_get_path('module', 'uc_fedex') . '/wsdl-' . variable_get('uc_fedex_server_role', 'testing') . '/TrackService_v1.wsdl', array(
    'trace' => 1,
  ));

  /* FedEx user key and password filled in by user on admin form */
  $request['TrackRequest']['WebAuthenticationDetail'] = array(
    'UserCredential' => array(
      'Key' => variable_get('uc_fedex_user_credential_key', 0),
      'Password' => variable_get('uc_fedex_user_credential_password', 0),
    ),
  );

  /* FedEx account and meter number filled in by user on admin form */
  $request['TrackRequest']['ClientDetail'] = array(
    'AccountNumber' => variable_get('uc_fedex_account_number', 0),
    'MeterNumber' => variable_get('uc_fedex_meter_number', 0),
  );

  /* Optional parameter, contains anything - let admin configure */
  $request['TrackRequest']['TransactionDetail'] = array(
    'CustomerTransactionId' => '*** Track Service Request v1 from Ubercart ***',
  );

  /* Track Request v1.1.0 */
  $request['TrackRequest']['Version'] = array(
    'ServiceId' => 'trck',
    // crs for rate, crss for rate&services
    'Major' => '1',
    'Intermediate' => '1',
    'Minor' => '0',
  );

  /* Tracking Numbeer */
  $request['TrackRequest']['PackageIdentifier'] = array(
    'Value' => $tracking_number,
    'Type' => 'TRACKING_NUMBER_OR_DOORTAG',
  );

  /* Include Details - 1 is TRUE */
  $request['TrackRequest']['IncludeDetailedScans'] = 1;

  //
  // Send the SOAP request to the FedEx server
  //
  try {
    $response = $client
      ->__soapCall("track", array(
      'parameters' => $request,
    ));

    //    $ty = _uc_fedex_services();
    //    foreach ($response->Options as $options) {
    //      drupal_set_message('<pre>' . $ty[$options->ServiceDetail->ServiceType] . ' -- ' . uc_currency_format($options->RatedShipmentDetails[0]->ShipmentRateDetail->TotalNetCharge->Amount) . '</pre>');
    //    }
    //  drupal_set_message('<pre>' . check_plain(var_export($response, TRUE)) . '</pre>');
    if ($response->TrackReply->HighestSeverity != 'FAILURE' && $response->TrackReply->HighestSeverity != 'ERROR') {
      print_request_response($client);

      /*
            // Just an Example of how to use this information.
            // You would typically do the following in whatever routine
            // called this function, not here.
            $reply = $response->TrackReply->TrackDetails;

            print('Tracking Number = ' . $reply->TrackingNumber . "<br />");
            print('                  ' . $reply->StatusDescription);
            print('  by ' . $reply->ServiceInfo);
            print('  weight ' . $reply->PackageWeight->Value. ' ' . $reply->PackageWeight->Units . "<br />");
            print('Estimated Delivery ' . $reply->EstimatedDeliveryTimestamp . "<br />");

            foreach($reply->Events as $event) {
              print('    Event = ' . $event->EventDescription . " " . $event->Address->City . ", " . $event->Address->StateOrProvinceCode . " on " . $event->Timestamp. "<br />");
            }
      */
    }
    else {
      drupal_set_message('Error in processing FedEx tracking transaction.', 'error');
      foreach ($response->TrackReply->Notifications as $notification) {
        if (is_array($response->TrackReply->Notifications)) {
          drupal_set_message($notification->Severity . ': ' . $notification->Message, 'error');
        }
        else {
          drupal_set_message($notification, 'error');
        }
      }
    }
    return $response;
  } catch (SoapFault $exception) {
    drupal_set_message('<h2>Fault</h2><br /><b>Code:</b>' . $exception->faultcode . '<br /><b>String:</b>' . $exception->faultstring . '<br />', 'error');

    // what else needs to be done here if FedEx quote fails?  What to display
    // to customer?
  }
}