Autorisation dans Apple Pay pour le plus petit

Autorisation dans Apple Pay pour le plus petit


Une attention particulière sera accordée à un point spécifique - il s'agit d'obtenir un cryptogramme d'Apple après que l'acheteur a réussi TouchID ou FaceID. Le langage backend sera PHP.


Je m'appelle Alexander, je suis un programmeur PHP junior chez Moguta, et j'ai dû faire face à l'intégration d'Apple Pay dans notre Moguta.CMS sur mon chemin. Aujourd'hui, je vais vous dire comment vous autoriser via Apple Pay à effectuer des paiements sans vous plonger dans le matériel de connexions et de certificats sécurisés, car je n'avais pas assez de ce matériel au début de mon voyage.


Présentation


Je ne peindrai pas ici l'intégralité de la fiche pour introduire Apple Pay sur mon site. Les instructions sur la façon d'enregistrer un compte de développeur Apple, où faire un certificat de traitement des paiements, où envoyer la réponse reçue, sont complètes sur RuNet, il suffit de demander à Google «l'intégration d'Apple Pay sur le site» et de sélectionner l'agrégateur de paiement que vous aimez, qui détaillera toutes les étapes nécessaires pour vous action.


Brève revue


La condition minimale pour cette instruction sera la présence de MacOS pour travailler avec des clés, car travailler avec des certificats sur d'autres OS est déjà un matériau distinct, auquel je ne ferai pas attention ici.


Voyons d'abord où sera la place de nos hostilités. L'algorithme est le suivant:


  1. L'utilisateur commence le processus de paiement via Apple Pay dans la boutique en ligne;
  2. La boutique en ligne envoie des informations de paiement à Apple;
  3. Apple répond avec un lien vers les données du vendeur;
  4. La boutique en ligne envoie les données du vendeur via un lien via TLS bidirectionnel;
  5. Apple envoie des données contenant PaymentData;
  6. La boutique en ligne redirige PaymentData vers la passerelle de paiement et traite la réponse;

Nous nous intéressons au quatrième point, car la requête cURL habituelle ne suffit pas.


Nous obtenons des certificats


Pour qu'Apple puisse croire qu'il traite personnellement avec nous, vous devez d'abord obtenir un certificat d'identification du commerçant (à ne pas confondre avec le traitement des paiements, il est nécessaire pour une passerelle de paiement). Pour commencer, nous formulerons une demande de certificat selon les instructions officielles . Le fichier résultant est joint au certificat d'identité de commerçant Apple Pay de votre identifiant de commerçant.


Créer un certificat


En réponse, nous obtenons merchant_id.cer, que nous ajoutons au groupe. Sur la base de sa clé privée, nous générons un fichier .p12. Pour ce faire, appelez le menu contextuel de la clé privée et sélectionnez "Exporter ..."


Exporter vers p12


Nous retirons la clé avec la commande suivante (le mot de passe que le terminal demandera sera le mot de passe de la clé, nous en aurons besoin lors de la connexion à Apple)


openssl pkcs12 -in <  >.p12 -out ApplePay.key.pem -nocerts -nodes 

et dépasser notre certificat en pem


  openssl x509 -inform der -in merchant_id.cer -out merchant_id.pem 

Nous avons maintenant tous les fichiers nécessaires avec lesquels nous prouverons au serveur Apple que nous sommes ce que nous prétendons être.


Envoyez une demande


Nous omettons le moment de recevoir le lien vers la validation ( lire plus dans un autre article sur Habr ), nous passons à ce moment où le script sur JS dans Safari a envoyé à notre serveur une demande d'autorisation dans Apple.


Pour cela, nous utilisons PHP avec cURL. Exemple de code:


 $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); 

Nous tirons paymentData de la réponse reçue et l'envoyons à notre passerelle de paiement. Félicitations, l'autorisation est passée, vous pouvez ramer de l'argent.


Remarque


Le destin ne m'a pas laissé me réjouir de la connexion établie depuis longtemps, et Apple m'a donné la réponse suivante:


 Payment Services Exception merchantId=< > unauthorized to service on behalf of merchantId=<  > reason=\"The latter is not registered for Apple Pay on the web\"" 

Le texte du message n'est pas assez évident, comme nous le souhaiterions. Informations sur le réseau, encore une fois, non. En fin de compte, cela signifie très probablement que vous avez simplement entré la mauvaise valeur dans le champ merchantIdentifier.


Résumé


Je serai heureux d'entendre des suggestions, des conseils ou des critiques dans les commentaires.


J'espère que l'article bénéficiera aux mêmes âmes perdues que moi.

Source: https://habr.com/ru/post/fr460273/


All Articles