Skip to main content

This site requires you to update your browser. Your browsing experience maybe affected by not having the most up to date version.

General Questions /

General questions about getting started with SilverStripe that don't fit in any of the categories above.

Moderators: martimiz, Sean, Ed, biapar, Willr, Ingo, swaiba

Mailchimp API help

Go to End



Community Member, 44 Posts

11 December 2011 at 3:29am

I am trying to integrate the Mailchimp API into a Silverstripe form. Using the smartchimp module, I was able to get it working, but I can't figure out how to implement the ajax functionality so that there is no re-direct on form submission. I would like to have the success message or api error message load in a response div above the form. Here's the code for the Smartchimp module:


class SmartChimpSignupPage extends Page {

	static $db = array(
		//	@todo:	provide optional dropdown for entering username/password??
		'MCApiKey'			=> 'Varchar(50)',	//	api_key
		'MCListKey'			=> 'Varchar(50)',	//	list_unique_id
		'MCSuccessContent'	=> 'HTMLText'

	static $mc_api_version = '1.2';

	function getCMSFields() {
		$fields = parent::getCMSFields();

			new TextField('MCApiKey', _t('SmartChimp.MCAPIKEY', 'Username')),
			new TextField('MCListKey', _t('SmartChimp.MCLISTKEY', 'Unique ID for List')),
			new HTMLEditorField('MCSuccessContent', _t('SmartChimp.MCSuccessContent', 'Signup Success Content'))


		return $fields;


class SmartChimpSignupPage_Controller extends Page_Controller {

	function Form() {
		if (Session::get('SmartChimp.SUCCESS')) {
			return false;

		$form = new Form($this, 'Form',
			new FieldSet(
				//	@todo:	add language support for these fields!
				new TextField('email', 'Email Address'),
				new TextField('fname', 'First Name'),
				new TextField('lname', 'Last Name')
			new FieldSet(
				new FormAction('SignupAction', 'Sign Up')
			new RequiredFields('email')

		$this->extend('updateSmartChimpForm', $form);

		return $form;

	public function mcsuccess() {
		if (Session::get('SmartChimp.SUCCESS'))
			$this->Content = $this->MCSuccessContent;

		return $this;

	function SignupAction($raw_data, $form) {
		$data = Convert::raw2sql($raw_data);


		$api = new MCAPI("$this->MCApiKey");
		$list_key = $this->MCListKey;
		$mergeVars = array(
			'FNAME'	=> $data['fname'],
			'LNAME'	=> $data['lname']

		$this->extend('updateSmartChimpSignupAction', $data, $mergeVars);

		if (true === $api->listSubscribe($list_key, $data['email'], $mergeVars)) {
			//	success!
			Session::set('SmartChimp.SUCCESS', true);
			return $this->mcsuccess();
		else {
			//	failure!
			$form->sessionMessage($api->errorMessage, 'warning');
			return $this;


I am only looking to do a basic listsubscribe() and don't need any of the fancy dancin that some of the other Silverstripe Mailchimp modules that I have seen provide (i.e., integration with members, access to my MC list from the SS CMS. etc).

Has anyone done anything like this? I'm stumped! Thanks.