
Será prestada atenção a um ponto específico - isso está recebendo um criptograma da Apple depois que o comprador passou pelo TouchID ou pelo FaceID. A linguagem de back-end será PHP.
Meu nome é Alexander, sou programador júnior de PHP em Moguta e tive que enfrentar a integração do Apple Pay em nosso Moguta.CMS no meu caminho. Hoje, vou lhe dizer como se autorizar através do Apple Pay a fazer pagamentos sem se aprofundar no material de conexões e certificados seguros, já que eu não tinha o suficiente desse material no início da minha jornada.
1. Introdução
Não vou pintar aqui a folha inteira para introduzir o Apple Pay no meu site. As instruções sobre como registrar uma conta de desenvolvedor da Apple, para onde fazer um certificado de Processamento de pagamento, para onde enviar a resposta recebida, estão completas no RuNet, basta solicitar ao Google “integração com o Apple Pay no site” e selecionar o agregador de pagamento que você desejar, que detalhará todas as etapas necessárias para você ação.
Breve revisão
O requisito mínimo para esta instrução será a presença do MacOS para trabalhar com chaves, pois trabalhar com certificados em outros sistemas operacionais já é um material separado, do qual não prestarei atenção aqui.
Vamos primeiro descobrir onde será o local de nossas hostilidades. O algoritmo é o seguinte:
- O usuário inicia o processo de pagamento através do Apple Pay na loja online;
- A loja online envia informações de pagamento para a Apple;
- A Apple responde com um link para os dados do vendedor;
- A loja online envia os dados do vendedor através de um link através do TLS de duas vias;
- A Apple envia dados contendo PaymentData;
- A loja online redireciona PaymentData para o gateway de pagamento e processa a resposta;
Estamos interessados no quarto ponto, pois a solicitação cURL usual não é suficiente.
Recebemos certificados
Para que a Apple acredite que lida pessoalmente conosco, primeiro você precisa obter um certificado de identificação do comerciante (para não confundir com o processamento de pagamento, ele é necessário para um gateway de pagamento). Para começar, formularemos uma solicitação de certificado de acordo com as instruções oficiais . O arquivo resultante é anexado ao certificado de identidade do Apple Pay Merchant do seu ID do comerciante.

Em resposta, obtemos merchant_id.cer, que adicionamos ao grupo. Com base em sua chave privada, geramos um arquivo .p12. Para fazer isso, chame o menu de contexto da chave privada e selecione "Exportar ..."

Retiramos a chave com o seguinte comando (a senha solicitada pelo terminal será a senha da chave, precisamos dela ao conectar à Apple)
openssl pkcs12 -in < >.p12 -out ApplePay.key.pem -nocerts -nodes
e ultrapassar nosso certificado em pem
openssl x509 -inform der -in merchant_id.cer -out merchant_id.pem
Agora, temos todos os arquivos necessários com os quais provaremos ao servidor da Apple quem somos quem afirmamos ser.
Enviar um pedido
Omitimos o momento de receber o link para a validação ( leia mais em outro artigo sobre Habr ), passamos para o momento em que o script em JS no Safari enviou ao nosso servidor um pedido de autorização na Apple.
Para isso, usamos PHP com cURL. Exemplo de código:
$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);
Retiramos o paymentData da resposta recebida e o enviamos para o nosso gateway de pagamento. Parabéns, a autorização foi aprovada, você pode remar dinheiro.
Nota
O destino não me deixou alegrar-me pela conexão estabelecida por um longo tempo, e a Apple me deu a seguinte resposta:
Payment Services Exception merchantId=< > unauthorized to service on behalf of merchantId=< > reason=\"The latter is not registered for Apple Pay on the web\""
O texto da mensagem não é suficientemente óbvio, como gostaríamos. Informações na rede, novamente, não. Como se viu, provavelmente isso significa que você simplesmente inseriu o valor incorreto no campo merchantIdentifier.
Sumário
Ficarei feliz em ouvir sugestões, dicas ou críticas nos comentários.
Espero que o artigo beneficie as mesmas almas perdidas que eu.