Autorización en Apple Pay para los más pequeños

Autorización en Apple Pay para los más pequeños


Se prestará atención a un punto específico: esto es obtener un criptograma de Apple después de que el comprador pasó TouchID o FaceID. El lenguaje de fondo será PHP.


Mi nombre es Alexander, soy un programador junior de PHP en Moguta y tuve que enfrentar la integración de Apple Pay en nuestro Moguta.CMS en mi camino. Hoy les diré cómo autorizarse a través de Apple Pay para realizar pagos sin profundizar en el material de las conexiones y certificados seguros, ya que al comienzo de mi viaje carecía de dicho material.


Introduccion


No pintaré aquí toda la hoja para introducir Apple Pay en mi sitio. Las instrucciones sobre cómo registrar una cuenta de desarrollador de Apple, dónde hacer un certificado de Procesamiento de pagos, dónde enviar la respuesta recibida, están completas en RuNet, solo pregunte a Google "integración de Apple Pay en el sitio" y seleccione el agregador de pagos que desee, que detallará todos los pasos necesarios acción


Breve reseña


El requisito mínimo para esta instrucción será la presencia de MacOS para trabajar con claves, ya que trabajar con certificados en otros sistemas operativos ya es un material separado, al que no prestaré atención aquí.


Primero descubramos dónde estará el lugar de nuestras hostilidades. El algoritmo es el siguiente:


  1. El usuario comienza el proceso de pago a través de Apple Pay en la tienda en línea;
  2. La tienda en línea envía información de pago a Apple;
  3. Apple responde con un enlace a los datos del vendedor;
  4. La tienda en línea envía datos del vendedor a través de un enlace a través de TLS bidireccional;
  5. Apple envía datos que contienen PaymentData;
  6. La tienda en línea redirige PaymentData a la pasarela de pago y procesa la respuesta;

Estamos interesados ​​en el cuarto punto, ya que la solicitud de cURL habitual no es suficiente.


Obtenemos certificados


Para que Apple crea que se trata personalmente con nosotros, primero debe obtener un certificado de identificación de comerciante (que no debe confundirse con el procesamiento de pagos, es necesario para una pasarela de pago). Para comenzar, formularemos una solicitud de certificado de acuerdo con las instrucciones oficiales . El archivo resultante se adjunta al Certificado de identidad de comerciante de Apple Pay de su ID de comerciante.


Crear certificado


En respuesta, obtenemos merchant_id.cer, que agregamos al grupo. Según su clave privada, generamos un archivo .p12. Para hacer esto, llame al menú contextual de la clave privada y seleccione "Exportar ..."


Exportar a p12


Sacamos la clave con el siguiente comando (la contraseña que solicitará el terminal será la contraseña de la clave, la necesitaremos cuando nos conectemos a Apple)


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

y superar nuestro certificado en pem


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

Ahora tenemos todos los archivos necesarios con los que demostraremos al servidor de Apple que somos quienes afirmamos ser.


Enviar una solicitud


Omitimos el momento de recibir el enlace para la validación ( lea más en otro artículo sobre Habr ), pasamos a ese momento cuando el script en JS en Safari envió a nuestro servidor una solicitud de autorización en Apple.


Para esto usamos PHP con cURL. Ejemplo 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); 

Extraemos PaymentData de la respuesta recibida y la enviamos a nuestra pasarela de pago. Felicitaciones, se aprueba la autorización, puedes remar dinero.


Nota


El destino no me permitió alegrarme por la conexión establecida durante mucho tiempo, y Apple me dio la siguiente respuesta:


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

El texto del mensaje no es lo suficientemente obvio, como nos gustaría. Información en la red, de nuevo, no. Al final resultó que, lo más probable es que esto significa que simplemente ingresó el valor incorrecto en el campo merchantIdentifier.


Resumen


Estaré encantado de escuchar sugerencias, consejos o críticas en los comentarios.


Espero que el artículo beneficie a las mismas almas perdidas que yo.

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


All Articles