Skip to content

Instantly share code, notes, and snippets.

@christopherhill
Created July 11, 2013 20:45
Show Gist options
  • Save christopherhill/5979082 to your computer and use it in GitHub Desktop.
Save christopherhill/5979082 to your computer and use it in GitHub Desktop.
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();
?>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment