How do I send a request using the Apple Pay merchant certificate

Doc URL: https://developer.apple.com/documentation/applepayontheweb/requesting-an-apple-pay-payment-session

How can I send a POST request using PHP, and what certificates are required? Currently, I have downloaded the following files on the backend: merchant_id.cer, apple_pay.cer, and a local cert.p12 file

This my code: <?php

$url = "https://apple-pay-gateway.apple.com/paymentservices/paymentSession"; $data = [ 'merchantIdentifier' => '***', 'displayName' => 'Donation', 'initiative' => 'web', 'initiativeContext' => 'test.com' ]; $jsonData = json_encode($data); $ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonData); curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']); curl_setopt($ch, CURLOPT_SSLKEY, "./private.pem"); curl_setopt($ch, CURLOPT_SSLKEYTYPE, "PEM"); curl_setopt($ch, CURLOPT_SSLCERT, "./merchant_id.pem");

$response = curl_exec($ch);

if (curl_errno($ch)) { echo 'cURL Error: ' . curl_error($ch); } else { echo $response; }

curl_close($ch);

But, this return an Error:cURL Error: unable to set private key file: '/private.pem' type PEM%

Accepted Answer

I have finally solved this problem. My code is as follows for friends who need it.

<?php
require __DIR__ . '/../vendor/autoload.php';
use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;
use GuzzleHttp\RequestOptions;
// HTTP Client
$client = new Client([
'base_uri' => 'https://cn-apple-pay-gateway.apple.com/', // or https://apple-pay-gateway.apple.com/
'timeout' => 30.0,
'http_errors' => false,
'transport' => [],
]);
// key and cert option
$options = [
RequestOptions::HEADERS => [
'Content-Type' => 'application/json',
],
RequestOptions::JSON => [
'merchantIdentifier' => 'merchant.hiseer.web',
'displayName' => 'displayName',
'initiative' => 'web',
'initiativeContext' => 'shop.wowseer.com',
],
'ssl_key' => './cert/merchantKey.key', // key file
'cert' => './cert/merchantCert.pem', // cert file
];
try {
// post request
$response = $client->post('paymentservices/paymentSession', $options);
// check status code
if ($response->getStatusCode() === 200) {
// echo response body
echo $response->getBody()->getContents();
} else {
echo "Failed to send request: " . $response->getStatusCode() . "\n";
echo $response->getBody()->getContents();
}
} catch (RequestException $e) {
// error handling
echo "Request error: " . $e->getMessage() . "\n";
if ($e->hasResponse()) {
echo "Response status code: " . $e->getResponse()->getStatusCode() . "\n";
echo $e->getResponse()->getBody()->getContents();
}
}
How do I send a request using the Apple Pay merchant certificate
 
 
Q