コード例 #1
0
        /// <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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        /// <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);
        }
コード例 #4
0
ファイル: UPSAPI.cs プロジェクト: imikey30/GC_UPS_Project
        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);
        }
コード例 #5
0
ファイル: UPSAPI.cs プロジェクト: imikey30/GC_UPS_Project
        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);
        }