Подпись запроса при валидации apple pay c backend PHP

81
03 сентября 2019, 07:50

Ситуация такая Apple Pay и tinkoff После создания платежной сессии

var request = {
            countryCode: 'RU',
            currencyCode: 'RUB',
            supportedNetworks: ['visa', 'masterCard'],
            merchantCapabilities: ['supports3DS'],
            total: { label: 'julianikolenko', amount: amount_rub },
        };
var session = new ApplePaySession(3, request);

Определяется метод session.onvalidatemerchant который отправляет validationURL на backend сайта. С backend необходимо обратиться по адресу переданному в validationURL

apple:

Your server uses the validation URL to request a session from the Apple Pay server, as described in Requesting an Apple Pay Payment Session.

В итоге есть

validationURL на который надо отправить запрос merchant_id.cer - сертификат полученный в developer.apple.com и данные о магазине

Как это сделать? backend на php Пробовал curl не пойму как правильно составить запрос

    $curl = curl_init();
    $args = [];
    $args['merchantIdentifier'] = '______';
    $args['displayName'] = '_____';
    $args['domainName'] = '____';
    curl_setopt($curl, CURLOPT_URL, $_POST['appleValidationUrl']);
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
    curl_setopt($curl, CURLOPT_SSLKEY, dirname(__FILE__)."/merchant_id.cer");
    curl_setopt ($curl, CURLOPT_SSLCERT, dirname(__FILE__)."/merchant_id.cer");
    curl_setopt($curl, CURLOPT_POST, 1);
    curl_setopt($curl, CURLOPT_POSTFIELDS, $args);
    $out = curl_exec($curl);
    if($out === false)
    {
        $out = curl_error($curl);
    }
    curl_close($curl);

Магазин сделан на OpenCart поэтому только php

Answer 1
curl_setopt($curl, CURLOPT_URL, $_POST['appleValidationUrl']);
    curl_setopt($curl, CURLOPT_HTTPHEADER, array("Content-Type: application/json")); 
    curl_setopt($curl, CURLOPT_SSLCERT, dirname(__FILE__)."/ApplePay.crt.pem");
    curl_setopt ($curl, CURLOPT_SSLKEY, dirname(__FILE__)."/ApplePay.key.pem");
    curl_setopt($curl, CURLOPT_SSLKEYPASSWD, "0258");
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($curl, CURLOPT_POST, 1);
    curl_setopt($curl, CURLOPT_POSTFIELDS, $data);

Как сделать сертификат https://github.com/norfolkmustard/ApplePayJS

READ ALSO
Как протестировать метод?

Как протестировать метод?

Подскажите какой можно написать тест PhpUnit на следующий метод(метод парсит ресурс и сохраняет ссылки в csv)

100
Десериализация пустого словаря в Json.Net без JSON_FORCE_OBJECT

Десериализация пустого словаря в Json.Net без JSON_FORCE_OBJECT

Существует сервис на PHP, от которого я получаю json и выполняю при помощи JsonNet парсинг

103
Как правильно вывести html через функцию echo

Как правильно вывести html через функцию echo

В теге use идёт ссылка на svg спрайт и эта ссылка "не работает", то есть не задаёт правильный адрес

87