Add Payment Request demo content.
[WebKit-https.git] / Websites / webkit.org / demos / payment-request / merchant-validation.php
1 <?php
2
3 /**
4  * Download the merchant_id.cer file from developer.apple.com.
5  *
6  * Convert the DER form certificate to PEM and extract the key by
7  * running the following command in Terminal.app:
8  *
9  * openssl x509 -in merchant_id.cer -inform der -outform pem -out merchant_id.pem
10  *
11  * Open the Keychain Access.app on macOS and drag the merchant_id.cer file to your
12  * login keychain. Right-click to the "Apple Pay Merchant Identity:com.example"
13  * certificate and select "Export …". Name the file "merchant_id" and select the
14  * "Personal Information Exchange (.p12)" file format. Choose a password to protect
15  * the private key, then run the following in Terminal.app:
16  *
17  * openssl pkcs12 -in merchant_id.p12 -out merchant_id_key.pem -nocerts
18  **/
19
20 $configFilePath = 'payment-request-config.php';
21 if (file_exists($configFilePath))
22     include($configFilePath);
23
24 if (!defined('MERCHANT_IDENTITY_CERTIFICATE'))
25     define('MERCHANT_IDENTITY_CERTIFICATE', 'merchant_id.pem');
26
27 if (!defined('MERCHANT_IDENTITY_KEY'))
28     define('MERCHANT_IDENTITY_KEY', 'merchant_id_key.pem');
29
30 if (!defined('MERCHANT_IDENTITY_KEY_PASS'))
31     define('MERCHANT_IDENTITY_KEY_PASS', '');
32
33 if (!defined('DISPLAY_NAME'))
34     define('DISPLAY_NAME', 'WebKit.org Demo');
35
36 if (!defined('MERCHANT_IDENTIFIER'))
37     define('MERCHANT_IDENTIFIER', openssl_x509_parse(file_get_contents( MERCHANT_IDENTITY_CERTIFICATE ))['subject']['UID'] );
38
39 if (!defined('INITIATIVE'))
40     define('INITIATIVE', 'web');
41
42 if (!defined('INITIATIVE_CONTEXT'))
43     define('INITIATIVE_CONTEXT', $_SERVER['HTTP_HOST']);
44
45 $postedDataString = file_get_contents('php://input');
46
47 try {
48     $postedData = json_decode($postedDataString, true);
49 } catch (Exception $e) {
50     die('An error occurred parsing the given data in JSON format: ' . $e->getMessage());
51 }
52
53 $validationURL = isset($postedData['validationURL']) ? $postedData['validationURL'] : '';
54 $merchantIdentifier = isset($postedData['merchantIdentifier']) ? $postedData['merchantIdentifier'] : MERCHANT_IDENTIFIER;
55 $displayName = isset($postedData['displayName']) ? $postedData['displayName'] : DISPLAY_NAME;
56 $intiative = isset($postedData['intiative']) ? $postedData['intiative'] : INITIATIVE;
57 $intiativeContext = isset($postedData['intiativeContext']) ? $postedData['intiativeContext'] : INITIATIVE_CONTEXT;
58
59 $postData = array(
60     'merchantIdentifier' => $merchantIdentifier,
61     'displayName' => $displayName,
62     'domainName' => $intiativeContext,
63     'initiative' => $intiative,
64     'initiativeContext' => $intiativeContext
65 );
66
67 $postDataFields = json_encode($postData);
68
69 $curlOptions = array(
70     CURLOPT_URL => $validationURL,
71     CURLOPT_POST => true,
72     CURLOPT_POSTFIELDS => $postDataFields,
73     CURLOPT_RETURNTRANSFER => true,
74     CURLOPT_SSLCERT => MERCHANT_IDENTITY_CERTIFICATE,
75     CURLOPT_SSLKEY => MERCHANT_IDENTITY_KEY,
76     CURLOPT_SSLKEYPASSWD => MERCHANT_IDENTITY_KEY_PASS,
77     CURLOPT_SSLKEYPASSWD => MERCHANT_IDENTITY_KEY_PASS,
78     CURLOPT_SSL_VERIFYPEER => true
79 );
80
81 $curlConnection = curl_init();
82 curl_setopt_array($curlConnection, $curlOptions);
83 if (!$result = curl_exec($curlConnection))
84     die('An error occurred when connecting to the validation URL: ' . curl_error($curlConnection));
85
86 curl_close($curlConnection);
87
88 header('Content-Type: application/json');
89 echo $result;
90 exit();