- PVSM.RU - https://www.pvsm.ru -
Внимание будет уделено конкретному моменту — это получения криптограммы со стороны Apple после того как покупатель прошёл TouchID или FaceID. Языком на бэкенде будет PHP.
Меня зовут Александр, я младший PHP-программист компании Moguta, и мне пришлось столкнуться на своем пути с интеграцией Apple Pay в нашу Moguta.CMS. Сегодня я расскажу как авторизовать себя через Apple Pay для проведения оплаты без вникания в матчасть защищенных соединений и сертификатов, так как мне в начале своего пути не хватало такого материала.
Я не буду расписывать здесь всю простыню по внедрению Apple Pay себе на сайт. Инструкций о том, как зарегистрировать аккаунт разработчика Apple, где сделать Payment Processing сертификат, куда отправить полученный ответ, полно на рунете, достаточно спросить у Гугла "интеграция apple pay на сайт" и выбрать приглянувшийся агрегатор платежей, который подробно распишет вам по шагам все необходимые действия.
Минимальным требованием для этой инструкции будет наличие MacOS для работы с ключами, так как работать с сертификатами на других ОС — это уже отдельный материал, которому я здесь уделять внимание не буду.
Давайте сначала сориентируемся где будет место наших боевых действий. Алгоритм следующий:
Нас интересует 4ый пункт, так как обычным cURL запросом тут не обойтись.
Для того, чтобы Apple поверила, что имеет дело лично с нами, сначала нужно завести сертификат Merchant Identify (не путать с Payment Processing, он нужен для платежного шлюза). Для начала сформируем запрос на сертификат по официальной инструкции [1]. Полученный файл прикрепляем в Apple Pay Merchant Identity Certificate вашего Merchant ID.
В ответ получаем merchant_id.cer, который добавляем в связку. Генерируем на основе его закрытого ключа .p12-файл. Для этого вызываем контекстное меню закрытого ключа и выбираем "Экспортировать..."
Вытаскиваем ключ следующей командой (тот пароль, который запросит терминал, будет являться паролем для ключа, он нам понадобиться при соединение с Apple)
openssl pkcs12 -in <путь до файла>.p12 -out ApplePay.key.pem -nocerts -nodes
и перегоняем наш сертификат в pem
openssl x509 -inform der -in merchant_id.cer -out merchant_id.pem
Теперь у нас есть все необходимые файлы, которыми будем доказывать яблочному серверу, что мы те, за кого себя выдаем.
Опускаем момент получения ссылки на валидацию (подробнее читайте в другой статье на Хабре [2]), переходим к тому моменту, когда скрипт на JS в Safari отправил нашему серверу просьбу на авторизацию в Apple.
Для этого мы используем PHP с cURL. Пример кода:
$ch = curl_init();
$data = '{"merchantIdentifier":"<идентификатор, который мы создавали при заведение Merchan ID>", "domainName":"<домен интернет-магазина>", "displayName":"<Название интернет-магазина, которое будет выводится в окне авторизации TouchID/FaceID>"}';
curl_setopt($ch, CURLOPT_URL, '<ссылка от Apple, полученная из validationURL>');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_CERTINFO, true);
curl_setopt($ch, CURLOPT_VERBOSE, true);
curl_setopt($ch, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_2);
curl_setopt($ch, CURLOPT_SSLCERT, '<путь до сертификата>.pem');
curl_setopt($ch, CURLOPT_SSLKEY, '<путь до ключа>.pem'>);
curl_setopt($ch, CURLOPT_SSLKEYPASSWD, '<пароль от ключа>');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: application/json"));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$res = curl_exec($ch);
curl_close($ch);
echo json_encode($res);
Из полученного ответа выдергиваем paymentData и отправляем нашему платежному шлюзу. Поздравляю, авторизация пройдена, можно грести деньги.
Судьба не дала мне долго радоваться налаженному соединению, и Apple отдала мне следующий ответ:
Payment Services Exception merchantId=<длинная строчка> unauthorized to service on behalf of merchantId=<другая длинная строчка> reason="The latter is not registered for Apple Pay on the web""
Текст сообщения не достаточно очевиден, как хотелось бы. Информации в сети опять же нету. Как оказалось, скорее всего это означает, что в поле merchantIdentifier вы просто ввели неверное значение.
Буду рад услышать в комментариях предложения, советы или критику.
Надеюсь, что статья принесет пользу таким же заблудшим душам, как и я.
Автор: lifeexample
Источник [3]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/cms/324203
Ссылки в тексте:
[1] по официальной инструкции: https://help.apple.com/developer-account/#/devbfa00fef7
[2] подробнее читайте в другой статье на Хабре: https://habr.com/ru/company/ivi/blog/344744/
[3] Источник: https://habr.com/ru/post/460273/?utm_source=habrahabr&utm_medium=rss&utm_campaign=460273
Нажмите здесь для печати.