Last active
July 9, 2016 02:19
-
-
Save Ergin008/4165787 to your computer and use it in GitHub Desktop.
Get Envelope Statuses for a set of envelopes using a filter
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// DocuSign API Walkthrough 05 in C# - Get Envelope Statuses for a set of envelopes | |
// | |
// To run this sample: | |
// 1) Create a new .NET project. | |
// 2) Add 4 assembly references to the project: System, System.Net, System.XML, and System.XML.Linq | |
// 3) Update the email, password, and integrator key in the code | |
// 4) Compile and Run | |
// | |
// NOTE 1: The DocuSign REST API accepts both JSON and XML formatted http requests. These C# API walkthroughs | |
// demonstrate the use of XML format, whereas the other walkthroughs show examples in JSON format. | |
using System; | |
using System.IO; | |
using System.Net; | |
using System.Xml; | |
using System.Xml.Linq; | |
namespace DocuSignAPIWalkthrough05 | |
{ | |
public class GetEnvelopeStatuses | |
{ | |
public static void Main () | |
{ | |
//--------------------------------------------------------------------------------------------------- | |
// ENTER VALUES FOR THE FOLLOWING 3 VARIABLES: | |
//--------------------------------------------------------------------------------------------------- | |
string username = "***"; // your account email | |
string password = "***"; // your account password | |
string integratorKey = "***"; // your account Integrator Key (found on Preferences -> API page) | |
//--------------------------------------------------------------------------------------------------- | |
// additional variable declarations | |
string baseURL = ""; // - we will retrieve this through the Login API call | |
try { | |
//============================================================================ | |
// STEP 1 - Login API Call (used to retrieve your baseUrl) | |
//============================================================================ | |
// Endpoint for Login api call (in demo environment): | |
string url = "https://demo.docusign.net/restapi/v2/login_information"; | |
// set request url, method, and headers. No body needed for login api call | |
HttpWebRequest request = initializeRequest( url, "GET", null, username, password, integratorKey); | |
// read the http response | |
string response = getResponseBody(request); | |
// parse baseUrl from response body | |
baseURL = parseDataFromResponse(response, "baseUrl"); | |
//--- display results | |
Console.WriteLine("\nAPI Call Result: \n\n" + prettyPrintXml(response)); | |
//============================================================================ | |
// STEP 2 - Get Statuses of a set of envelopes | |
//============================================================================ | |
//*** This example gets statuses of all envelopes in your account going back 1 month... | |
int curr_month = System.DateTime.Now.Month; | |
int curr_day = System.DateTime.Now.Day; | |
int curr_year = System.DateTime.Now.Year; | |
if( curr_month != 1 ) | |
{ | |
curr_month -= 1; | |
} | |
else { // special case for january | |
curr_month = 12; | |
curr_year -= 1; | |
} | |
// append "/envelopes?from_date=MONTH/DAY/YEAR" and use in get statuses api call | |
// we need to URL encode the slash (/) chars, whos URL encoding is: %2F | |
url = baseURL + "/envelopes?from_date=" + curr_month.ToString() + "%2F" + curr_day.ToString() + "%2F" + curr_year.ToString(); | |
// set request url, method, and headers. No request body for this api call... | |
request = initializeRequest( url, "GET", null, username, password, integratorKey); | |
// read the http response | |
response = getResponseBody(request); | |
//--- display results | |
Console.WriteLine("\nAPI Call Result: \n\n" + prettyPrintXml(response)); | |
} | |
catch (WebException e) { | |
using (WebResponse response = e.Response) { | |
HttpWebResponse httpResponse = (HttpWebResponse)response; | |
Console.WriteLine("Error code: {0}", httpResponse.StatusCode); | |
using (Stream data = response.GetResponseStream()) | |
{ | |
string text = new StreamReader(data).ReadToEnd(); | |
Console.WriteLine(prettyPrintXml(text)); | |
} | |
} | |
} | |
} // end main() | |
//*********************************************************************************************** | |
// --- HELPER FUNCTIONS --- | |
//*********************************************************************************************** | |
public static HttpWebRequest initializeRequest(string url, string method, string body, string email, string password, string intKey) | |
{ | |
HttpWebRequest request = (HttpWebRequest)WebRequest.Create (url); | |
request.Method = method; | |
addRequestHeaders( request, email, password, intKey ); | |
if( body != null ) | |
addRequestBody(request, body); | |
return request; | |
} | |
///////////////////////////////////////////////////////////////////////////////////////////////////////// | |
public static void addRequestHeaders(HttpWebRequest request, string email, string password, string intKey) | |
{ | |
// authentication header can be in JSON or XML format. XML used for this walkthrough: | |
string authenticateStr = | |
"<DocuSignCredentials>" + | |
"<Username>" + email + "</Username>" + | |
"<Password>" + password + "</Password>" + | |
"<IntegratorKey>" + intKey + "</IntegratorKey>" + | |
"</DocuSignCredentials>"; | |
request.Headers.Add ("X-DocuSign-Authentication", authenticateStr); | |
request.Accept = "application/xml"; | |
request.ContentType = "application/xml"; | |
} | |
///////////////////////////////////////////////////////////////////////////////////////////////////////// | |
public static void addRequestBody(HttpWebRequest request, string requestBody) | |
{ | |
// create byte array out of request body and add to the request object | |
byte[] body = System.Text.Encoding.UTF8.GetBytes (requestBody); | |
Stream dataStream = request.GetRequestStream (); | |
dataStream.Write (body, 0, requestBody.Length); | |
dataStream.Close (); | |
} | |
///////////////////////////////////////////////////////////////////////////////////////////////////////// | |
public static string getResponseBody(HttpWebRequest request) | |
{ | |
// read the response stream into a local string | |
HttpWebResponse webResponse = (HttpWebResponse)request.GetResponse (); | |
StreamReader sr = new StreamReader(webResponse.GetResponseStream()); | |
string responseText = sr.ReadToEnd(); | |
return responseText; | |
} | |
///////////////////////////////////////////////////////////////////////////////////////////////////////// | |
public static string parseDataFromResponse(string response, string searchToken) | |
{ | |
// look for "searchToken" in the response body and parse its value | |
using (XmlReader reader = XmlReader.Create(new StringReader(response))) { | |
while (reader.Read()) { | |
if((reader.NodeType == XmlNodeType.Element) && (reader.Name == searchToken)) | |
return reader.ReadString(); | |
} | |
} | |
return null; | |
} | |
///////////////////////////////////////////////////////////////////////////////////////////////////////// | |
public static string prettyPrintXml(string xml) | |
{ | |
// print nicely formatted xml | |
try { | |
XDocument doc = XDocument.Parse(xml); | |
return doc.ToString(); | |
} | |
catch (Exception) { | |
return xml; | |
} | |
} | |
} // end class | |
} // end namespace |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment