/// <summary> /// Gets all events for a tracking number. /// </summary> /// <param name="trackingNumber">The tracking number to track</param> /// <returns>List of Shipment Events.</returns> public virtual IList <ShipmentStatusEvent> GetShipmentEvents(string trackingNumber) { if (string.IsNullOrEmpty(trackingNumber)) { return(new List <ShipmentStatusEvent>()); } var result = new List <ShipmentStatusEvent>(); try { //use try-catch to ensure exception won't be thrown is web service is not available var track = new TrackPortTypeClient(); var tr = new TrackRequest(); var upss = new UPSSecurity(); var upssSvcAccessToken = new UPSSecurityServiceAccessToken { AccessLicenseNumber = _upsSettings.AccessKey }; upss.ServiceAccessToken = upssSvcAccessToken; var upssUsrNameToken = new UPSSecurityUsernameToken { Username = _upsSettings.Username, Password = _upsSettings.Password }; upss.UsernameToken = upssUsrNameToken; var request = new RequestType(); string[] requestOption = { "15" }; request.RequestOption = requestOption; tr.Request = request; tr.InquiryNumber = trackingNumber; System.Net.ServicePointManager.ServerCertificateValidationCallback += delegate { return(true); }; var trackResponse = track.ProcessTrackAsync(upss, tr).Result.TrackResponse; result.AddRange(trackResponse.Shipment.SelectMany(c => c.Package[0].Activity.Select(ToStatusEvent)).ToList()); } catch (Exception exc) { _logger.Error($"Error while getting UPS shipment tracking info - {trackingNumber}", exc); } return(result); }
public TrackReply Tracking(string trackingNumber) { TrackRequest request = _trackingInit(); request.TransactionDetail = new QDLogistics.FedExTrackService.TransactionDetail(); request.TransactionDetail.CustomerTransactionId = "*** Track Request ***"; request.Version = new QDLogistics.FedExTrackService.VersionId(); request.SelectionDetails = new TrackSelectionDetail[1] { new TrackSelectionDetail() }; request.SelectionDetails[0].PackageIdentifier = new TrackPackageIdentifier(); request.SelectionDetails[0].PackageIdentifier.Value = trackingNumber; request.SelectionDetails[0].PackageIdentifier.Type = TrackIdentifierType.TRACKING_NUMBER_OR_DOORTAG; TrackPortTypeClient client = new TrackPortTypeClient(); TrackReply reply = client.track(request); return(reply); }
/// <summary> /// Gets all events for a tracking number. /// </summary> /// <param name="trackingNumber">The tracking number to track</param> /// <returns>List of Shipment Events.</returns> public virtual IList <ShipmentStatusEvent> GetShipmentEvents(string trackingNumber) { if (string.IsNullOrEmpty(trackingNumber)) { return(new List <ShipmentStatusEvent>()); } var result = new List <ShipmentStatusEvent>(); try { //use try-catch to ensure exception won't be thrown is web service is not available //build the TrackRequest var request = new TrackRequest { // WebAuthenticationDetail = new WebAuthenticationDetail { UserCredential = new WebAuthenticationCredential { Key = _fedexSettings.Key, // Replace "XXX" with the Key Password = _fedexSettings.Password // Replace "XXX" with the Password } }, // ClientDetail = new ClientDetail { AccountNumber = _fedexSettings.AccountNumber, // Replace "XXX" with client's account number MeterNumber = _fedexSettings.MeterNumber // Replace "XXX" with client's meter number }, // TransactionDetail = new TransactionDetail { CustomerTransactionId = "***nopCommerce v16 Request using VC#***" }, //creates the Version element with all child elements populated from the wsdl Version = new VersionId(), //tracking information SelectionDetails = new[] { new TrackSelectionDetail { PackageIdentifier = new TrackPackageIdentifier { Value = trackingNumber, Type = TrackIdentifierType.TRACKING_NUMBER_OR_DOORTAG } } } }; //initialize the service var service = new TrackPortTypeClient(TrackPortTypeClient.EndpointConfiguration.TrackServicePort, _fedexSettings.Url); //this is the call to the web service passing in a TrackRequest and returning a TrackReply var reply = service.trackAsync(request).Result.TrackReply; //parse response if (reply.HighestSeverity == NotificationSeverityType.SUCCESS || reply.HighestSeverity == NotificationSeverityType.NOTE || reply.HighestSeverity == NotificationSeverityType.WARNING) // check if the call was successful { foreach (var trackDetail in reply.CompletedTrackDetails.SelectMany(x => x.TrackDetails)) { if (trackDetail.Events != null) { //Set the parent level attributes //var statusDescription = trackDetail.StatusDescription; //var tatusCode = trackDetail.StatusCode; //if (statusCode == "DL") //{ // var delivered = true; //} //if (trackDetail.SignatureProofOfDeliveryAvailable == true) //{ // trackResults.SignedForBy = trackDetail.DeliverySignatureName; //} //if (trackDetail.ShipmentWeight != null) //{ // var shipmentWeight = $"{trackDetail.ShipmentWeight.Value} {trackDetail.ShipmentWeight.Units}"; //} //else //{ // var shipmentWeight = $"{trackDetail.PackageWeight.Value} {trackDetail.PackageWeight.Units}"; //} //var shipDate = trackDetail.ShipTimestamp; //var serviceType = trackDetail.ServiceInfo; //var packageCount = int.Parse(trackDetail.PackageCount); //var destination = $"{trackDetail.DestinationAddress.City}, {trackDetail.DestinationAddress.StateOrProvinceCode} {trackDetail.DestinationAddress.CountryCode}"; //var deliveryDate = trackDetail.ActualDeliveryTimestamp; //Set the TrackingActivity foreach (var trackevent in trackDetail.Events) { var sse = new ShipmentStatusEvent(); if (trackevent.TimestampSpecified) { sse.Date = trackevent.Timestamp; } sse.EventName = $"{trackevent.EventDescription} ({trackevent.EventType})"; sse.Location = trackevent.Address.City; sse.CountryCode = trackevent.Address.CountryCode; //other properties (not used yet) //trackevent.EventType; //trackevent.Address.PostalCode; //trackevent.Address.StateOrProvinceCode; //trackevent.StatusExceptionCode; //trackevent.StatusExceptionDescription; result.Add(sse); } } } } //result.AddRange(trackResponse.Shipment.SelectMany(c => c.Package[0].Activity.Select(x => ToStatusEvent(x))).ToList()); } catch (Exception ex) { _logger.Error($"Error while getting Fedex shipment tracking info - {trackingNumber}", ex); } return(result); }
public string getLatestUPSupdate(string trackingNumb) { string latestUpdate = ""; try { //create the client proxy TrackPortTypeClient track = new TrackPortTypeClient(); //create username token UPSSecurityUsernameToken upssUsrNameToken = new UPSSecurityUsernameToken(); //this is my UPS userid upssUsrNameToken.Username = "******"; //this is my UPS password upssUsrNameToken.Password = "******"; UPSSecurityServiceAccessToken upssSvcAccessToken = new UPSSecurityServiceAccessToken(); //this is my UPS access key upssSvcAccessToken.AccessLicenseNumber = "CD6DBC4A27FE8C15"; //create UPS security object UPSSecurity upss = new UPSSecurity(); //set the user name token upss.UsernameToken = upssUsrNameToken; //set the service access token upss.ServiceAccessToken = upssSvcAccessToken; //create the request object RequestType request = new RequestType(); //must be hard coded to 15 String[] requestOption = { "15" }; //set the request option request.RequestOption = requestOption; TrackRequest tr = new TrackRequest(); tr.Request = request; //this is your UPS tracking id (normally 18 digit) //TODO: Make a list and use the strin.join function to create a comma separated list to pass for tracking numbers*********** tr.InquiryNumber = trackingNumb; //trackingNumListBox.SelectedItem.ToString();//gets tracking # from listbox //tr.InquiryNumber = "1Z5V87A90369535127";//Hardcoded test tracking number /*1Z5V87A90369535127 has a status of : * "In transit * Scheduled Delivery: * Wednesday * 11 / 06 / 2019 * Estimated Time * by End of Day * per UPS tracking website */ //added to handle the intermittent error with SSL/TLS connection ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12; //open channel track.Open(); //invoke the service TrackResponse trackResponse = track.ProcessTrack(upss, tr); //close channel track.Close(); //store activities List <string> actList = new List <string>(); List <string> dateList = new List <string>(); List <string> timeList = new List <string>(); foreach (ShipmentType shipment in trackResponse.Shipment) { foreach (PackageType package in shipment.Package) { foreach (ActivityType Act in package.Activity) { //Adds description of last activity to actList actList.Add(Act.Status.Description); //Output testing //testConsole.Text += ("\nStatus: "+ //Act.ActivityLocation.Address.City, //Act.ActivityLocation.Address.StateProvinceCode, Act.Date, Act.Time, //Act.Status.Description); } } } latestUpdate = actList[0]; } catch (Exception ex) { Console.WriteLine(ex.Message); Console.ReadLine(); } return(latestUpdate); }
public bool itemDelivered(string trackingNumb) { bool delivered = false; try { //create the client proxy TrackPortTypeClient track = new TrackPortTypeClient(); //create username token UPSSecurityUsernameToken upssUsrNameToken = new UPSSecurityUsernameToken(); //this is my UPS userid upssUsrNameToken.Username = "******"; //this is my UPS password upssUsrNameToken.Password = "******"; UPSSecurityServiceAccessToken upssSvcAccessToken = new UPSSecurityServiceAccessToken(); //this is my UPS access key upssSvcAccessToken.AccessLicenseNumber = "CD6DBC4A27FE8C15"; //create UPS security object UPSSecurity upss = new UPSSecurity(); //set the user name token upss.UsernameToken = upssUsrNameToken; //set the service access token upss.ServiceAccessToken = upssSvcAccessToken; //create the request object RequestType request = new RequestType(); //must be hard coded to 15 String[] requestOption = { "15" }; //set the request option request.RequestOption = requestOption; TrackRequest tr = new TrackRequest(); tr.Request = request; //this is your UPS tracking id (normally 18 digit) tr.InquiryNumber = trackingNumb; //added to handle the intermittent error with SSL/TLS connection ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12; //open channel track.Open(); //invoke the service TrackResponse trackResponse = track.ProcessTrack(upss, tr); //close channel track.Close(); //store activities List <string> actList = new List <string>(); List <string> dateList = new List <string>(); List <string> timeList = new List <string>(); foreach (ShipmentType shipment in trackResponse.Shipment) { foreach (PackageType package in shipment.Package) { foreach (ActivityType Act in package.Activity) { //Adds description of last activity to actList actList.Add(Act.Status.Description); //Output testing //testConsole.Text += ("\nStatus: "+ //Act.ActivityLocation.Address.City, //Act.ActivityLocation.Address.StateProvinceCode, Act.Date, Act.Time, //Act.Status.Description); } } } if (String.Equals(actList[0], "Delivered")) { delivered = true; } } catch (Exception ex) { Console.WriteLine(ex.Message); Console.ReadLine(); } return(delivered); }