/// <summary> /// Return the tracking information of the last checkpoint of a single tracking. /// </summary> /// <param name="tracking">A Tracking to get the last checkpoint of, it should have tracking number and slug at least.</param> /// <returns>The last Checkpoint object.</returns> public Checkpoint GetLastCheckpoint(Tracking tracking) { string parametersExtra; Checkpoint checkpoint = null; if (!string.IsNullOrEmpty(tracking.Id)) { parametersExtra = tracking.Id; } else { var paramRequiredFields = ReplaceFirst(tracking.GetQueryRequiredFields(), "&", "?"); parametersExtra = string.Format("{0}/{1}{2}", tracking.Slug, tracking.TrackingNumber, paramRequiredFields); } var response = Request("GET", string.Format("/last_checkpoint/{0}", parametersExtra), null); var checkpointJson = (JObject)response["data"]["checkpoint"]; if (checkpointJson.Count != 0) { checkpoint = new Checkpoint(checkpointJson); } return(checkpoint); }
/// <summary> /// Get a specific tracking from your account. If the trackingGet.id property /// is defined it will get that tracking from the system, if not it will take /// the tracking tracking.number and the tracking.slug for identify the tracking. /// </summary> /// <param name="tracking">A Tracking to get.</param> /// <param name="fields">A list of fields wanted to be in the response.</param> /// <param name="lang"> /// A string with the language desired. Support Chinese to /// English translation for china-ems and china-post only. /// </param> /// <returns></returns> public Tracking GetTrackingByNumber(Tracking tracking, List <FieldTracking> fields, string lang) { string parametersAll; var qs = new QueryString(); if (fields != null) { qs.Add("fields", ParseListFieldTracking(fields)); } if (!string.IsNullOrEmpty(lang)) { qs.Add("lang", lang); } var paramsQuery = ReplaceFirst(qs.ToString(), "&", "?"); if (!string.IsNullOrEmpty(tracking.Id)) { parametersAll = string.Format("{0}{1}", tracking.Id, paramsQuery); } else { var paramRequiredFields = tracking.GetQueryRequiredFields(); parametersAll = string.Format("{0}/{1}{2}{3}", tracking.Slug, tracking.TrackingNumber, paramsQuery, paramRequiredFields); } var response = Request("GET", string.Format("/trackings/{0}", parametersAll), null); var trackingJson = (JObject)response["data"]["tracking"]; return(trackingJson.Count != 0 ? new Tracking(trackingJson) : null); }
/// <summary> /// Retrack an expired tracking once. /// </summary> /// <param name="tracking">A Tracking to reactivate, it should have tracking number and slug at least.</param> /// <returns></returns> public bool Retrack(Tracking tracking) { var paramRequiredFields = ReplaceFirst(tracking.GetQueryRequiredFields(), "&", "?"); var response = Request( "POST", string.Format("/trackings/{0}/{1}/retrack{2}", tracking.Slug, tracking.TrackingNumber, paramRequiredFields), null); if ((int)response["meta"]["code"] == 200) { return((bool)response["data"]["tracking"]["active"]); } return(false); }
/// <summary> /// Updates a tracking of your account. /// </summary> /// <param name="tracking"> /// A Tracking object with the information to update /// The fields trackingNumber and slug SHOULD be informed, otherwise an exception will be thrown /// The fields an user can update are: smses, emails, title, customerName, orderID, orderIDPath, /// customFields. /// </param> /// <returns>The last Checkpoint object.</returns> public Tracking PutTracking(Tracking tracking) { string parametersExtra; if (!string.IsNullOrEmpty(tracking.Id)) { parametersExtra = tracking.Id; } else { var paramRequiredFields = ReplaceFirst(tracking.GetQueryRequiredFields(), "&", "?"); parametersExtra = string.Format("{0}/{1}{2}", tracking.Slug, tracking.TrackingNumber, paramRequiredFields); } var response = Request("PUT", string.Format("/trackings/{0}", parametersExtra), tracking.GeneratePutJson()); return(new Tracking((JObject)response["data"]["tracking"])); }
/// <summary> /// Get a specific tracking from your account. If the trackingGet.id property /// is defined it will get that tracking from the system, if not it will take /// the tracking tracking.number and the tracking.slug for identify the tracking. /// </summary> /// <param name="tracking">A Tracking to get.</param> /// <returns>A Tracking object with the response.</returns> public Tracking GetTrackingByNumber(Tracking tracking) { string parametersExtra; if (!string.IsNullOrEmpty(tracking.Id)) { parametersExtra = tracking.Id; } else { var paramRequiredFields = ReplaceFirst(tracking.GetQueryRequiredFields(), "&", "?"); parametersExtra = string.Format("{0}/{1}{2}", tracking.Slug, tracking.TrackingNumber, paramRequiredFields); } var response = Request("GET", string.Format("/trackings/{0}", parametersExtra), null); var trackingJson = (JObject)response["data"]["tracking"]; return(trackingJson.Count != 0 ? new Tracking(trackingJson) : null); }
/// <summary> /// Return the tracking information of the last checkpoint of a single tracking. /// </summary> /// <param name="tracking">A Tracking to get the last checkpoint of, it should have tracking number and slug at least.</param> /// <param name="fields">A list of fields of checkpoint wanted to be in the response.</param> /// <param name="lang"> /// A string with the language desired. Support Chinese to English translation /// for china-ems and china-post only. /// </param> /// <returns>The last Checkpoint object.</returns> public Checkpoint GetLastCheckpoint(Tracking tracking, List <FieldCheckpoint> fields, string lang) { var qs = new QueryString(); string parametersExtra; Checkpoint checkpoint = null; if (fields != null) { qs.Add("fields", fields.Select(f => f.GetName())); } if (string.IsNullOrEmpty(lang)) { qs.Add("lang", lang); } var parameters = ReplaceFirst(qs.ToString(), "&", "?"); if (!string.IsNullOrEmpty(tracking.Id)) { parametersExtra = string.Format("{0}{1}", tracking.Id, parameters); } else { var paramRequiredFields = tracking.GetQueryRequiredFields(); parametersExtra = string.Format("{0}/{1}{2}{3}", tracking.Slug, tracking.TrackingNumber, parameters, paramRequiredFields); } var response = Request("GET", string.Format("/last_checkpoint/{0}", parametersExtra), null); var checkpointJson = (JObject)response["data"]["checkpoint"]; if (checkpointJson.Count != 0) { checkpoint = new Checkpoint(checkpointJson); } return(checkpoint); }