- 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);
}
}
}