Import and Update Single Contact using Constant Contact Email Marketing API in ASP.NET (C# and VB.NET)

I will be showing you how to import and update a single contact from your third party system to Constant Contact using the Constant Contact API. Here is the API description for the POST (Create) call and PUT (Update) call.





First of all, I should note that I created this as a Console Application, however the same concept should work for a web app.

You need to have your API Key and Access Token in handy, you will need them to connect to the Constant Contact API. Once you have them I would suggest to add them to your web.config or app.config, this way you don’t have to hard code them in your app.

In the code snippet below I am getting my data from a Database Access Layer class and passing it to the methods in a DataTable. The rest of the code should be pretty self explanatory.

C# Code

namespace ConstantContact {
    class Program {
        private static string _apiKey = ConfigurationManager.AppSettings["APIKey"].ToString();
        private static string _accessToken = ConfigurationManager.AppSettings["AccessToken"].ToString();
        private static DatabaseAccessLayer _dal = new DatabaseAccessLayer();
        private static IUserServiceContext _userServiceContext = new UserServiceContext(_accessToken, _apiKey);
        private static ConstantContactFactory _constantContactFactory = new ConstantContactFactory(_userServiceContext);

        static void Main(string[] args) {
            List<string> lists = new List<string>() { "1479986508" };

            DataTable dt = _dal.GetSingleContact("contact@company.com");
            createContact(dt, lists);
			
            //third value is the ID from a specific contact, it is required to update a specific contact
			updateContact(dt, lists, "1239676744");
        }

        private static void createContact(DataTable dt, List<string> lists) {
            if (dt.Rows.Count >= 1) {
                var contactService = _constantContactFactory.CreateContactService();

                Address address = new Address() {
                    Line1 = toString(dt.Rows[0]["address"]),
                    City = toString(dt.Rows[0]["city"]),
                    AddressType = "PERSONAL",
                    StateCode = toString(dt.Rows[0]["state"]),
                    PostalCode = toString(dt.Rows[0]["zip"])
                };

                List<ContactList> contactLists = new List<ContactList>();
                foreach (string list in lists) {
                    ContactList contactList = new ContactList() {
                        Id = list
                    };

                    contactLists.Add(contactList);
                }

                CustomField cfield = new CustomField() {
                    Name = "custom_field_1",
                    Value = toString(dt.Rows[0]["schoolname"])
                };

                Contact contact = new Contact() {
                    EmailAddresses = new List<EmailAddress> { new EmailAddress(toString(dt.Rows[0]["primaryemail"])) },
                    FirstName = toString(dt.Rows[0]["firstname"]),
                    LastName = toString(dt.Rows[0]["lastname"]),
                    JobTitle = toString(dt.Rows[0]["job_role_name"]),
                    CompanyName = toString(dt.Rows[0]["districtname"]),
                    HomePhone = toString(dt.Rows[0]["primaryphone"]),
                    Addresses = new List<Address> { address },
                    Status = "ACTIVE",
                    Lists = contactLists,
                    CustomFields = new List<CustomField> { cfield }
                };

                contactService.AddContact(contact, false);
            }
        }
		
		private static void updateContact(DataTable dt, List<string> lists, string id) {
            if (dt.Rows.Count >= 1) {
                var contactService = _constantContactFactory.CreateContactService();

                Address address = new Address() {
                    Line1 = toString(dt.Rows[0]["address"]),
                    City = toString(dt.Rows[0]["city"]),
                    AddressType = "PERSONAL",
                    StateCode = toString(dt.Rows[0]["state"]),
                    PostalCode = toString(dt.Rows[0]["zip"])
                };

                List<ContactList> contactLists = new List<ContactList>();
                foreach (string list in lists) {
                    ContactList contactList = new ContactList() {
                        Id = list
                    };

                    contactLists.Add(contactList);
                }

                CustomField cfield = new CustomField() {
                    Name = "custom_field_1",
                    Value = toString(dt.Rows[0]["schoolname"])
                };

                Contact contact = new Contact() {
                    Id = id,
                    EmailAddresses = new List<EmailAddress> { new EmailAddress(toString(dt.Rows[0]["primaryemail"])) },
                    FirstName = toString(dt.Rows[0]["firstname"]),
                    LastName = toString(dt.Rows[0]["lastname"]),
                    JobTitle = toString(dt.Rows[0]["job_role_name"]),
                    CompanyName = toString(dt.Rows[0]["districtname"]),
                    HomePhone = toString(dt.Rows[0]["primaryphone"]),
                    Addresses = new List<Address> { address },
                    Status = "ACTIVE",
                    Lists = contactLists,
                    CustomFields = new List<CustomField> { cfield }
                };

                contactService.UpdateContact(contact, false);
            }
        }

        #region Helper Methods
        private static string toString(Object obj) {
            return Convert.ToString(obj).Trim();
        }
        #endregion
    }
}

VB.NET Code

Namespace ConstantContact
	Class Program
		Private Shared _apiKey As String = ConfigurationManager.AppSettings("APIKey").ToString()
		Private Shared _accessToken As String = ConfigurationManager.AppSettings("AccessToken").ToString()
		Private Shared _dal As New DatabaseAccessLayer()
		Private Shared _userServiceContext As IUserServiceContext = New UserServiceContext(_accessToken, _apiKey)
		Private Shared _constantContactFactory As New ConstantContactFactory(_userServiceContext)

		Private Shared Sub Main(args As String())
			Dim lists As New List(Of String)() From { _
				"1479986508" _
			}

			Dim dt As DataTable = _dal.GetSingleContact("contact@company.com")
			createContact(dt, lists)

			'third value is the ID from a specific contact, it is required to update a specific contact
			updateContact(dt, lists, "1239676744")
		End Sub

		Private Shared Sub createContact(dt As DataTable, lists As List(Of String))
			If dt.Rows.Count >= 1 Then
				Dim contactService = _constantContactFactory.CreateContactService()

				Dim address As New Address() With { _
					Key .Line1 = toString(dt.Rows(0)("address")), _
					Key .City = toString(dt.Rows(0)("city")), _
					Key .AddressType = "PERSONAL", _
					Key .StateCode = toString(dt.Rows(0)("state")), _
					Key .PostalCode = toString(dt.Rows(0)("zip")) _
				}

				Dim contactLists As New List(Of ContactList)()
				For Each list As String In lists
					Dim contactList As New ContactList() With { _
						Key .Id = list _
					}

					contactLists.Add(contactList)
				Next

				Dim cfield As New CustomField() With { _
					Key .Name = "custom_field_1", _
					Key .Value = toString(dt.Rows(0)("schoolname")) _
				}

				Dim contact As New Contact() With { _
					Key .EmailAddresses = New List(Of EmailAddress)() From { _
						New EmailAddress(toString(dt.Rows(0)("primaryemail"))) _
					}, _
					Key .FirstName = toString(dt.Rows(0)("firstname")), _
					Key .LastName = toString(dt.Rows(0)("lastname")), _
					Key .JobTitle = toString(dt.Rows(0)("job_role_name")), _
					Key .CompanyName = toString(dt.Rows(0)("districtname")), _
					Key .HomePhone = toString(dt.Rows(0)("primaryphone")), _
					Key .Addresses = New List(Of Address)() From { _
						address _
					}, _
					Key .Status = "ACTIVE", _
					Key .Lists = contactLists, _
					Key .CustomFields = New List(Of CustomField)() From { _
						cfield _
					} _
				}

				contactService.AddContact(contact, False)
			End If
		End Sub

		Private Shared Sub updateContact(dt As DataTable, lists As List(Of String), id As String)
			If dt.Rows.Count >= 1 Then
				Dim contactService = _constantContactFactory.CreateContactService()

				Dim address As New Address() With { _
					Key .Line1 = toString(dt.Rows(0)("address")), _
					Key .City = toString(dt.Rows(0)("city")), _
					Key .AddressType = "PERSONAL", _
					Key .StateCode = toString(dt.Rows(0)("state")), _
					Key .PostalCode = toString(dt.Rows(0)("zip")) _
				}

				Dim contactLists As New List(Of ContactList)()
				For Each list As String In lists
					Dim contactList As New ContactList() With { _
						Key .Id = list _
					}

					contactLists.Add(contactList)
				Next

				Dim cfield As New CustomField() With { _
					Key .Name = "custom_field_1", _
					Key .Value = toString(dt.Rows(0)("schoolname")) _
				}

				Dim contact As New Contact() With { _
					Key .Id = id, _
					Key .EmailAddresses = New List(Of EmailAddress)() From { _
						New EmailAddress(toString(dt.Rows(0)("primaryemail"))) _
					}, _
					Key .FirstName = toString(dt.Rows(0)("firstname")), _
					Key .LastName = toString(dt.Rows(0)("lastname")), _
					Key .JobTitle = toString(dt.Rows(0)("job_role_name")), _
					Key .CompanyName = toString(dt.Rows(0)("districtname")), _
					Key .HomePhone = toString(dt.Rows(0)("primaryphone")), _
					Key .Addresses = New List(Of Address)() From { _
						address _
					}, _
					Key .Status = "ACTIVE", _
					Key .Lists = contactLists, _
					Key .CustomFields = New List(Of CustomField)() From { _
						cfield _
					} _
				}

				contactService.UpdateContact(contact, False)
			End If
		End Sub

		#Region "Helper Methods"
		Private Shared Overloads Function toString(obj As [Object]) As String
			Return Convert.ToString(obj).Trim()
		End Function
		#End Region
	End Class
End Namespace





Esau Silva
Software Engineer at Region One ESC
Microsoft Full Stack Application Developer
If you enjoyed this post, please consider leaving a comment or subscribing to the RSS feed.
Share