blob: 8475e4482d0b53e09e2f6ca7d1303f95ce38d523 [file] [log] [blame]
<?php
/**
* Download the merchant_id.cer file from developer.apple.com.
*
* Convert the DER form certificate to PEM and extract the key by
* running the following command in Terminal.app:
*
* openssl x509 -in merchant_id.cer -inform der -outform pem -out merchant_id.pem
*
* Open the Keychain Access.app on macOS and drag the merchant_id.cer file to your
* login keychain. Right-click to the "Apple Pay Merchant Identity:com.example"
* certificate and select "Export …". Name the file "merchant_id" and select the
* "Personal Information Exchange (.p12)" file format. Choose a password to protect
* the private key, then run the following in Terminal.app:
*
* openssl pkcs12 -in merchant_id.p12 -out merchant_id_key.pem -nocerts
**/
$configFilePath = '/var/www/config/payment-request-config.php';
if (file_exists($configFilePath))
include($configFilePath);
if (!defined('MERCHANT_IDENTITY_CERTIFICATE'))
define('MERCHANT_IDENTITY_CERTIFICATE', 'merchant_id.pem');
if (!defined('MERCHANT_IDENTITY_KEY'))
define('MERCHANT_IDENTITY_KEY', 'merchant_id_key.pem');
if (!defined('MERCHANT_IDENTITY_KEY_PASS'))
define('MERCHANT_IDENTITY_KEY_PASS', '');
if (!defined('DISPLAY_NAME'))
define('DISPLAY_NAME', 'WebKit.org Demo');
if (!defined('MERCHANT_IDENTIFIER'))
define('MERCHANT_IDENTIFIER', openssl_x509_parse(file_get_contents( MERCHANT_IDENTITY_CERTIFICATE ))['subject']['UID'] );
if (!defined('INITIATIVE'))
define('INITIATIVE', 'web');
if (!defined('INITIATIVE_CONTEXT'))
define('INITIATIVE_CONTEXT', $_SERVER['HTTP_HOST']);
$postedDataString = file_get_contents('php://input');
try {
$postedData = json_decode($postedDataString, true);
} catch (Exception $e) {
die('An error occurred parsing the given data in JSON format: ' . $e->getMessage());
}
$validationURL = isset($postedData['validationURL']) ? $postedData['validationURL'] : '';
$URLcomponents = parse_url($validationURL);
if (!isset($URLcomponents['scheme']) || !isset($URLcomponents['host']))
die('The validation URL is not valid.');
if ('https' !== strtolower($URLcomponents['scheme']))
die('The validation URL scheme is not valid.');
$validationHost = strtolower($URLcomponents['host']);
if (!('apple.com' === $validationHost || '.apple.com' === substr($validationHost, -10)))
die('The validation URL host is not valid.');
$merchantIdentifier = isset($postedData['merchantIdentifier']) ? $postedData['merchantIdentifier'] : MERCHANT_IDENTIFIER;
$displayName = isset($postedData['displayName']) ? $postedData['displayName'] : DISPLAY_NAME;
$intiative = isset($postedData['intiative']) ? $postedData['intiative'] : INITIATIVE;
$intiativeContext = isset($postedData['intiativeContext']) ? $postedData['intiativeContext'] : INITIATIVE_CONTEXT;
$postData = array(
'merchantIdentifier' => $merchantIdentifier,
'displayName' => $displayName,
'domainName' => $intiativeContext,
'initiative' => $intiative,
'initiativeContext' => $intiativeContext
);
$postDataFields = json_encode($postData);
$curlOptions = array(
CURLOPT_URL => $validationURL,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $postDataFields,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_SSLCERT => MERCHANT_IDENTITY_CERTIFICATE,
CURLOPT_SSLKEY => MERCHANT_IDENTITY_KEY,
CURLOPT_SSLKEYPASSWD => MERCHANT_IDENTITY_KEY_PASS,
CURLOPT_SSLKEYPASSWD => MERCHANT_IDENTITY_KEY_PASS,
CURLOPT_SSL_VERIFYPEER => true
);
$curlConnection = curl_init();
curl_setopt_array($curlConnection, $curlOptions);
if (!$result = curl_exec($curlConnection))
die('An error occurred when connecting to the validation URL: ' . curl_error($curlConnection));
curl_close($curlConnection);
header('Content-Type: application/json');
echo $result;
exit();