- C#
- C# Response Object
- Java
- Java Response Object
Phone Validation International C# Rest Code Snippet
public static PVIResponse GetPhoneDetails(string Phone, string Country, string Options, string AuthID) { //UrlEncode the values that will be sent to the API so that special characters don't break the url like "#" (Which can often be found in addresses where units are involved.) string Phone = HttpUtility.UrlEncode(Phone); string Country = HttpUtility.UrlEncode(Country); string Options = HttpUtility.UrlEncode(Options); string AuthID = HttpUtility.UrlEncode(AuthID); //Not using try/catch here because and errors here should bubble up to the calling code and will allow them to see the details of the thrown exception. Task<PVIResponse> Response = null; string Message = ""; string parameters = $"Phone={Phone}&Country={Country}&Options={Options}&AuthID={AuthID}"; Response = HttpGet($"https://sws.serviceobjects.com/PVI/GetPhoneDetails?{parameters}"); if (Response == null) //Failover condition, typecode 3 is Service Objects Fatal { Message += "Response is null or API Error.TypeCode 3 Error, executing failover to swsbackup.serviceobjects.com;"; Response = HttpGet($"https://swsbackup.serviceobjects.com/PVI/GetPhoneDetails?{parameters}"); if (Response == null) //No Response returned from service, throw new exception. { Message += "Response is null on failover API call to swsbackup.serviceobjects.com; Check network access to Service Objects endpoints."; throw new Exception(Message); } else //There is a response so return it. There could be an API error but that will be in the Response.Error object and the end user will see it. { if (Response.Result == null) { Message += "Response is null on failover API call to swsbackup.serviceobjects.com; Check network access to Service Objects endpoints."; throw new Exception(Message); } if (Response.Result.ProblemDetails != null && Response.Result.ProblemDetails.Status == "500") { Message += "Response was 500 on failover API call to swsbackup.serviceobjects.com; Check network access to Service Objects endpoints."; throw new Exception(Message); } return Response.Result; } } else //There is a response so return it. There could be an API error but that will be in the Response.Error object and the end user will see it. { if (Response.Result == null || (Response.Result.ProblemDetails != null && Response.Result.ProblemDetails.Status == "500")) { Message += "Response is null or API Error.TypeCode 3 Error, executing failover to swsbackup.serviceobjects.com;"; Response = HttpGet($"https://swsbackup.serviceobjects.com/PVI/GetPhoneDetails?{parameters}"); if (Response == null) //No Response returned from service, throw new exception. { Message += "Response is null on failover API call to swsbackup.serviceobjects.com; Check network access to Service Objects endpoints."; throw new Exception(Message); } else //There is a response so return it. There could be an API error but that will be in the Response.Error object and the end user will see it. { if (Response.Result == null) { Message += "Response is null on failover API call to swsbackup.serviceobjects.com; Check network access to Service Objects endpoints."; throw new Exception(Message); } if (Response.Result.ProblemDetails != null && Response.Result.ProblemDetails.Status == "500") { Message += "Response was 500 on failover API call to swsbackup.serviceobjects.com; Check network access to Service Objects endpoints."; throw new Exception(Message); } return Response.Result; } } return Response.Result; } } private static async Task<PVIResponse> HttpGet(string requestUrl) { ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12; ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, sslPolicyErrors) => true; HttpClient client = new HttpClient(); var task = Task.Run(() => client.GetAsync(requestUrl)); task.Wait(); HttpResponseMessage response = task.Result; HttpContent content = response.Content; string result = content.ReadAsStringAsync().Result; PVIResponse pVI = new PVIResponse(); if (response.StatusCode == HttpStatusCode.OK) { pVI.PhoneDetailsResponse = JsonConvert.DeserializeObject<PhoneDetailsResponse>(result); return pVI; } else { pVI.ProblemDetails = JsonConvert.DeserializeObject<ProblemDetails>(result); return pVI; } }
Phone Validation International C# Response Object
using System.Collections.Generic; using Newtonsoft.Json; namespace DOTSPhoneValidationInternational { public class PVIResponse { public PhoneDetails PhoneDetailsResponse { get; set; } public Problem ProblemDetails { get; set; } } public class PhoneDetails { [JsonProperty("score")] public string Score { get; set; } [JsonProperty("phoneIn")] public string PhoneIn { get; set; } [JsonProperty("countryCode")] public int? CountryCode { get; set; } [JsonProperty("formatNational")] public string FormatNational { get; set; } [JsonProperty("formatInternational")] public string FormatInternational { get; set; } [JsonProperty("formatE164")] public string FormatE164 { get; set; } [JsonProperty("extension")] public string Extension { get; set; } [JsonProperty("locality")] public string Locality { get; set; } [JsonProperty("adminArea")] public string AdminArea { get; set; } [JsonProperty("adminAreaAbbr")] public string AdminAreaAbbr { get; set; } [JsonProperty("country")] public string Country { get; set; } [JsonProperty("countryISO2")] public string CountryISO2 { get; set; } [JsonProperty("countryISO3")] public string CountryISO3 { get; set; } [JsonProperty("latitude")] public double? Latitude { get; set; } [JsonProperty("longitude")] public double? Longitude { get; set; } [JsonProperty("latLongMatchLevel")] public string LatLongMatchLevel { get; set; } [JsonProperty("timeZones")] public List<TimeZone> TimeZones { get; set; } [JsonProperty("lineType")] public string LineType { get; set; } [JsonProperty("smsAddress")] public string SmsAddress { get; set; } [JsonProperty("validPhone")] public bool? ValidPhone { get; set; } [JsonProperty("validPhoneLength")] public bool? ValidPhoneLength { get; set; } [JsonProperty("notes")] public List<string> Notes { get; set; } [JsonProperty("warnings")] public List<string> Warnings { get; set; } [JsonProperty("currentProvider")] public ServiceProvider CurrentProvider { get; set; } [JsonProperty("previousProvider")] public ServiceProvider PreviousProvider { get; set; } [JsonProperty("originalProvider")] public ServiceProvider OriginalProvider { get; set; } [JsonProperty("lastPortedDate")] public string LastPortedDate { get; set; } } public class Problem { public string Type { get; set; } public string Title { get; set; } public string Status { get; set; } public string Detail { get; set; } } public class TimeZone { public string ZoneName { get; set; } public string ZoneAbbr { get; set; } public string CountryISO3 { get; set; } public string UtcOffset { get; set; } } public class ServiceProvider { public string ProviderID { get; set; } public string ProviderName { get; set; } public string CountryISO3 { get; set; } } }
Phone Validation International Java Rest Code Snippet
String phone = ""; String country = ""; String options = ""; String mainUrl = "https://sws.serviceobjects.com/PVI/GetPhoneDetails?"; String backupUrl = "https://swsbackup.serviceobjects.com/PVI/GetPhoneDetails?"; String trialUrl = "https://trial.serviceobjects.com/PVI/GetPhoneDetails?"; try { //Pull in method arguements and encode the values for the call to the service phone = URLEncoder.encode(Phone, "UTF-8").replaceAll("\\+", "%20"); country = URLEncoder.encode(Country, "UTF-8").replaceAll("\\+", "%20"); options = URLEncoder.encode(Options, "UTF-8").replaceAll("\\+", "%20"); } catch (UnsupportedEncodingException e) { } String QueryStringParameters = "Phone=" + phone + "&Country=" + country + "&Options=" + options + "&AuthID=" + AuthID; String Message = ""; StringBuilder RawResponse = new StringBuilder(); PVI_Response.PD_Response Response = null; RawResponse = HttpGet(mainUrl + QueryStringParameters); Response = (PVI_Response.PD_Response)(ProcessResponse(RawResponse, "PD_Response")); if (Response == null) //Failover condition, typecode 3 is Service Objects Fatal { Message += "Response is null or API Error.TypeCode 3 Error, executing failover to swsbackup.serviceobjects.com;"; RawResponse = HttpGet(backupUrl + QueryStringParameters); Response = (PVI_Response.PD_Response)(ProcessResponse(RawResponse, "PD_Response")); if (Response == null) //No Response returned from service, throw new exception. { Message += "Response is null on failover API call to swsbackup.serviceobjects.com; Check network access to Service Objects endpoints."; throw new Exception(Message); } else //There is a response so return it. There could be an API error but that will be in the Response.Error object and the end user will see it. { if(Response.StatusDescription == null) { Response.setStatusDescription("200"); } return Response; } } else { if(Response.StatusDescription == null) { Response.setStatusDescription("200"); } return Response; } /** * Returns a BestMatchesResponse object based on the input JSON string * @param RawResponse Is a JSON string. * @param ResponseType Is the string type of response object to cast to. * @return Object Is the strongly typed response object for this service. */ private Object ProcessResponse(StringBuilder RawResponse, String ResponseType) throws Exception { Gson gson = new Gson(); Object result = null; switch(ResponseType) { case "PD_Response": result = gson.fromJson(RawResponse.toString(), PVI_Response.PD_Response.class); if(result == null) { throw new Exception("ERROR: trying to get PVI_Response"); } return result; default: throw new Exception("ERROR: trying to get PVI_Response"); } } /** * Makes the call to an endpoint and returns a string representation of the response from the service. * @param endpoint Is the URL API endpoint of the service operation. * @return StringBuilder Is the string representation of the response from the service. */ private StringBuilder HttpGet(String endpoint) { int timeout = 5000; URL url = null; HttpsURLConnection conn = null; StringBuilder sb = new StringBuilder(); try { url = new URL(endpoint); /* System.out.println(url); */ conn = (HttpsURLConnection) url.openConnection(); conn.setConnectTimeout(timeout); conn.setRequestMethod("GET"); conn.setRequestProperty("Accept", "application/json"); if (conn.getResponseCode() != 200) { throw new RuntimeException("Failed : HTTP error code : " + conn.getResponseCode()); } BufferedReader br = new BufferedReader(new InputStreamReader((conn.getInputStream()))); String output; // System.out.println("info from the server \n"); while ((output = br.readLine()) != null) { sb.append(output); //System.out.println(output); } return sb; } catch (Exception ex) { System.out.println(ex.getMessage()); ex.printStackTrace(); } finally { if (conn != null) conn.disconnect(); } return sb; }
Phone Validation International Java Response Object
import java.util.List; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.annotations.SerializedName; public class PVI_Response { public PVI_Response() {} public class PD_Response { /** * PD_Response constructor */ public PD_Response() {} @SerializedName("score") public String score; @SerializedName("phoneIn") public String phoneIn; @SerializedName("countryCode") public Integer countryCode; @SerializedName("formatNational") public String formatNational; @SerializedName("formatInternational") public String formatInternational; @SerializedName("formatE164") public String formatE164; @SerializedName("extension") public String extension; @SerializedName("locality") public String locality; @SerializedName("adminArea") public String adminArea; @SerializedName("adminAreaAbbr") public String adminAreaAbbr; @SerializedName("country") public String country; @SerializedName("countryISO2") public String countryISO2; @SerializedName("countryISO3") public String countryISO3; @SerializedName("latitude") public Double latitude; @SerializedName("longitude") public Double longitude; @SerializedName("latLongMatchLevel") public String latLongMatchLevel; @SerializedName("timeZones") public List<TimeZone> timeZones; @SerializedName("lineType") public String lineType; @SerializedName("smsAddress") public String smsAddress; @SerializedName("validPhone") public Boolean validPhone; @SerializedName("validPhoneLength") public Boolean validPhoneLength; @SerializedName("notes") public List<String> notes; @SerializedName("warnings") public List<String> warnings; @SerializedName("currentProvider") public PhoneServiceProvider currentProvider; @SerializedName("previousProvider") public PhoneServiceProvider previousProvider; @SerializedName("originalProvider") public PhoneServiceProvider originalProvider; @SerializedName("lastPortedDate") public java.util.Date lastPortedDate; @SerializedName("type") public String type; @SerializedName("title") public String title; @SerializedName("status") public String StatusDescription; @SerializedName("detail") public String detail; // Setter public void setStatusDescription(String NewStatusDescription) { this.StatusDescription = NewStatusDescription; } // Getters and Setters go here // Nested classes public class TimeZone { public TimeZone() {} public String zoneName; public String zoneAbbr; public String countryISO3; public String utcOffset; // Getters and Setters go here } public class PhoneServiceProvider { public PhoneServiceProvider() {} public String providerID; public String providerName; public String countryISO3; // Getters and Setters go here } public class ProblemDetailsResponse { public ProblemDetailsResponse() {} @SerializedName("type") public String type; @SerializedName("title") public String title; @SerializedName("status") public Integer status; @SerializedName("detail") public String detail; } /**Override of toString for end users to get quick output.*/ @Override public String toString() { Gson gson = new GsonBuilder().serializeNulls().create(); return gson.toJson(this); } } }