Skeletal PHP Script to Update an Existing Contact via a PUT.
<?php
/*A very simple example on how to update a contact name using a PUT command. To run
this script, provide your own Constant Contact User Name (UN), Password (PW), API Key (Key)
and Contact ID (SubID). Then provide an appropriate set of corresponding Contact details
including EmailAddress and Contact List ID (or series of Contact List IDs). Valid Contact ID and
Contact List IDs must be determined via an API Call (not Shown) */
$UN = "yourconstantcontactusername";
$PW = "yourconstantcontactpassword";
$Key = "yourconstantcontactAPIKey";
$SubID ="77898" ;//REPLACE WITH A VALID CONTACT Id, Which you can retrieve with a GET
$entry = '<entry xmlns="http://www.w3.org/2005/Atom">
<id>http://api.constantcontact.com/ws/customers/'.$UN.'/contacts/'.$SubID.'</id>
<title type="text">Contact: test13420001000@3examghfghplexcvxc.com</title>
<updated>2008-04-25T19:29:06.096Z</updated>
<author><name>Mike</name></author>
<content type="application/vnd.ctct+xml">
<Contact xmlns="http://ws.constantcontact.com/ns/1.0/" id="http://api.constantcontact.com/ws/customers/'.$UN.'/contacts/'.$SubID.'">
<EmailAddress>test13420001000@3examghfghplexcvxc.com</EmailAddress>
<FirstName>Joe6</FirstName>
<LastName>Smith6</LastName>
<OptInSource>ACTION_BY_CUSTOMER</OptInSource>
<ContactLists>
<ContactList id="http://api.constantcontact.com/ws/customers/'.$UN.'/lists/7">
</ContactList>
</ContactLists>
</Contact>
</content>
</entry>';
/*
The XML above will change the First name and Last name to Joe6 Smith6 Need to make
sure you have listed all the lists the contact belongs to, in addition to any lists you would like
the Contact added to. If you leave a Contact List out, the Contact will be removed from that
Contact List. This is format of Contact List XML entries:
<ContactLists>
<ContactList id="http://api.constantcontact.com/ws/customers/'.$UN.'/lists/7">
</ContactList>
<ContactList id="http://api.constantcontact.com/ws/customers/'.$UN.'/lists/55">
</ContactList>
<ContactList id="http://api.constantcontact.com/ws/customers/'.$UN.'/lists/57">
</ContactList>
</ContactLists>
*/
// create a temp file and load the xml in to it.
$tmpfile = tmpfile();
fwrite($tmpfile, $entry);
fseek($tmpfile, 0);
// Initialize the curl session
$request ="http://api.constantcontact.com/ws/customers/".$UN."/contacts/".$SubID;
$session = curl_init($request);
// Set up Digest authentication. Put your API key, and CTCT username/pwd here
$userNamePassword = $Key . '%' . $UN . ':' . $PW ;
curl_setopt($session, CURLOPT_HTTPAUTH, CURLAUTH_DIGEST);
curl_setopt($session, CURLOPT_USERPWD, $userNamePassword);
curl_setopt($session, CURLOPT_INFILE, $tmpfile);
fclose($tmpfile); // Close temp file because it no longer needed
curl_setopt($session, CURLOPT_PUT, 1);
curl_setopt($session, CURLOPT_INFILESIZE, strlen($entry));
curl_setopt($session, CURLOPT_HTTPHEADER, Array("Content-Type:application/atom+xml"));
curl_setopt($session, CURLOPT_HEADER, false); // Do not return headers
curl_setopt($session, CURLOPT_RETURNTRANSFER, 0);
$response = curl_exec($session);
$httpcode = curl_getinfo($session, CURLINFO_HTTP_CODE);
curl_close($session);
if ($httpcode > 199 && $httpcode < 300)
{
echo "It works!!" ; // You might want GET the updated Contact and display it
}
else
{ echo "<br> There a Problem <br>Error Code: ". $httpcode ; }
?>
Comments, additions and corrections encouraged!
Thanks,
Mike C, Constant Contact Support Engineer
could you add more detail
1) could you show what the function
tmpfile() is?
right now i have $fh = fopen('c:\\TEMP\\tmp.txt','rw');
which for some reason im getting
Warning: fopen(c:\TEMP\tmp.txt) [function.fopen]: failed to open stream: No such file or directory in
i dont know why cuase im looking at the file
2) could you guys figure out some other way to do this
without littering my users harddrives with random files
Sorry for the missing code
Sorry for the missing code for the PUT request in php. I will speak with Mike today and have him put up the code for his function as well.
Regarding part 2, this is a limitation of the PHP Curl feature. For more information on how PHP Curl works, please see the official Curl documentation here. If you want to use simpler methods for PUTing and POSTing, you would have to use a different language or find a PHP library that will augment standard PHP with a more REST focused library set.
Dave B Support Engineer, Constant Contact