|

|  How to Create Surveys Using SurveyMonkey API in PHP

How to Create Surveys Using SurveyMonkey API in PHP

October 31, 2024

Learn to create effective surveys with SurveyMonkey API in PHP. This guide walks you through setup, integration, and customization for optimal results.

How to Create Surveys Using SurveyMonkey API in PHP

 

API Authentication and Setup

 

  • First, you need to acquire authorization by implementing OAuth 2 for secure access to SurveyMonkey's API. This involves redirecting users to a consent page and obtaining an access token.
  •  

  • Once you have the access token, include it in your HTTP headers for authentication. In PHP, you might use a library like cURL or Guzzle for making requests:
$accessToken = 'YOUR_ACCESS_TOKEN';
$ch = curl_init('https://api.surveymonkey.com/v3/surveys');
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Authorization: Bearer ' . $accessToken,
    'Content-Type: application/json'
));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
$surveys = json_decode($response, true);

 

Create a Survey

 

  • To create a survey, you must send a POST request to the SurveyMonkey API's survey endpoint. Construct the survey JSON object with details like survey title, type, and sections.
  •  

  • Here's an example using cURL in PHP:
$surveyData = json_encode(array(
    'title' => 'Customer Feedback Survey',
    'pages' => array(
        array(
            'title' => 'Page 1',
            'description' => 'Tell us about your experience.',
            'questions' => array(
                array(
                    'headings' => array(
                        array('heading' => 'How satisfied are you with our service?')
                    ),
                    'family' => 'matrix',
                    'subtype' => 'rating',
                    'answers' => array(
                        'rows' => array(
                            array('text' => 'Very Unsatisfied'),
                            array('text' => 'Unsatisfied'),
                            array('text' => 'Neutral'),
                            array('text' => 'Satisfied'),
                            array('text' => 'Very Satisfied')
                        ),
                        'cols' => array(
                            array('text' => 'Satisfaction')
                        )
                    )
                )
            )
        )
    )
));

$ch = curl_init('https://api.surveymonkey.com/v3/surveys');
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Authorization: Bearer ' . $accessToken,
    'Content-Type: application/json'
));
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $surveyData);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$response = curl_exec($ch);
curl_close($ch);

$newSurvey = json_decode($response, true);

 

Retrieve Surveys

 

  • After creating a survey, you may want to retrieve and list all the surveys. Use a GET request to access the list of surveys.
  •  

  • Parse the returned JSON to display or further manipulate the surveys:
$ch = curl_init('https://api.surveymonkey.com/v3/surveys');
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Authorization: Bearer ' . $accessToken,
    'Content-Type: application/json'
));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);

$surveys = json_decode($response, true);
if (!empty($surveys['data'])) {
    foreach ($surveys['data'] as $survey) {
        echo 'Survey Title: ' . $survey['title'] . "<br>";
        echo 'Survey ID: ' . $survey['id'] . "<br>";
    }
}

 

Handle API Rate Limits and Errors

 

  • SurveyMonkey API has rate limits; ensure your application handles these properly. Interpret HTTP status codes and error messages for better error handling.
  •  

  • Incorporate logic to pause or slow down requests when a "Rate Limit Exceeded" status is received:
$responseCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($responseCode == 429) {
    // Handle rate limit exceeded
    echo 'Rate limit exceeded. Please wait a bit before retrying.';
} else if ($responseCode >= 400) {
    // Handle other API errors
    $errorDetails = json_decode($response, true);
    echo 'API Error: ' . $errorDetails['error']['message'];
}

 

Additional Customizations

 

  • To customize survey invitations, follow a similar pattern to create collectors and send survey invitations through designated API endpoints.
  •  

  • If you want to gather more detailed responses, set up webhooks to listen for completed survey events and store those responses in your database.