christopherhill
7/11/2013 - 8:45 PM

Marketo Key Hash, for a site with staging and production values.

Marketo Key Hash, for a site with staging and production values.

<?php

// Marketo Web Service
// define the API key
$apikey = '';
$staging = 'secretkey';
$production = 'secretkey';

if (isset($_GET["s"])) {
  
  $stagingFlag = $_GET["s"];
  
  if ($stagingFlag == "true") {
    $apikey = $staging;
  } else {
    $apikey = $production;
  }

} else {

  $apikey = $production;

}

define('_myMarketoApiKey', $apikey);

// test string
//curl -v -F "email=test@example.com" http://example.com/ws.php

// Helper method to get a string description for an HTTP status code
// From http://www.gen-x-design.com/archives/create-a-rest-api-with-php/
function getStatusCodeMessage($status) {
  // these could be stored in a .ini file and loaded via parse_ini_file()... however, this will suffice
  $codes = Array(
    100 => 'Continue', 101 => 'Switching Protocols',
    200 => 'OK',201 => 'Created', 202 => 'Accepted', 203 => 'Non-Authoritative Information', 204 => 'No Content',
      205 => 'Reset Content', 206 => 'Partial Content',
    300 => 'Multiple Choices', 301 => 'Moved Permanently', 302 => 'Found', 303 => 'See Other', 304 => 'Not Modified',
      305 => 'Use Proxy',306 => '(Unused)', 307 => 'Temporary Redirect',
    400 => 'Bad Request', 401 => 'Unauthorized', 402 => 'Payment Required', 403 => 'Forbidden', 404 => 'Not Found',
      405 => 'Method Not Allowed', 406 => 'Not Acceptable', 407 => 'Proxy Authentication Required', 408 => 'Request Timeout',
      409 => 'Conflict', 410 => 'Gone', 411 => 'Length Required', 412 => 'Precondition Failed', 413 => 'Request Entity Too Large',
      414 => 'Request-URI Too Long', 415 => 'Unsupported Media Type', 416 => 'Requested Range Not Satisfiable', 417 => 'Expectation Failed',
    500 => 'Internal Server Error', 501 => 'Not Implemented', 502 => 'Bad Gateway', 503 => 'Service Unavailable',
      504 => 'Gateway Timeout', 505 => 'HTTP Version Not Supported'
    );
  return (isset($codes[$status])) ? $codes[$status] : '';
}

// Helper method to send a HTTP response code/message
function sendResponse($status = 200, $body = '', $content_type = 'text/html') {
  $status_header = 'HTTP/1.1 ' . $status . ' ' . getStatusCodeMessage($status);
  header($status_header);
  header('Content-type: ' . $content_type);
  echo $body;
}

class SimpleSHA1Service {
  // Main method to calculate a SHA-1 hash
 function get_sha1() {
   if (isset($_REQUEST['email'])) {
    $email = $_REQUEST['email'];
    // check the email address via regex
    // if(preg_match("^[_a-z0-9-]+(\+\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$^", strtolower($email))) {
    if (strtolower($email)) {
      $result = hash('sha1', _myMarketoApiKey . $email );
      // build the JSON response
      $result = 'jsonpCallback({ "hash":"' . $result . '" })';
      sendResponse(200, $result);
      return true;
    }
    sendResponse(405, 'Bad email address');
    return false ;
  }
  sendResponse(400, 'Invalid request');
  return false;
 }
}

// This is the first thing that gets called when this page is loaded
// Creates a new instance of the SimpleSHA1Service class and calls the get_sha1 method
$api = new SimpleSHA1Service;
$api->get_sha1();

?>