Apple Pay

El comercio deberá registrarse en la plataforma de Apple Pay, como resultado, se generará un identificador de comercio (merchantId) y un certificado cuya clave privada se utilizará para el posterior desencriptado de los datos del medio de pago.

Enrolamiento del Comercio con Apple Pay


Creación de merchantID.

1. Acceder a la Consola de Apple y crear un nuevo MerchantId que identifique al Comercio. Para registrar un Merchant ID:

2. Seleccionar Certificates, Identifiers & Profiles.

3. Debajo de los identificadores, selecciona Merchant IDs.

4. Clic en el botón de añadir (+) en la esquina superior derecha.

5. Escribe una descripción y un identificador, y haz clic en continuar.

6. Revise la configuración y haga clic en Registrarse.

7. Haga clic en Listo.

Más información en https://developer.apple.com/documentation/applepaywebmerchantregistrationapi/registering_with_apple_pay_and_applying_to_use_the_api


Creación de Merchant Identity Certificate.

1. Se genera una clave privada RSA2048 y una solicitud de firma de certificado (CSR) con dicha clave utilizando la herramienta OpenSSL:

openssl req -new -newkey rsa:2048 -nodes -keyout merchant_id.key -out merchant_id.csr -subj '/O=NombreComercio /C=ES'

2. Esta acción generará un fichero merchant_ir.csr que deberá utilizarse para generar el certificado final por parte de Apple

3. En el centro de miembros , haga clic en “Certificates, Identifiers & Profiles”. Haga clic en “Identifiers” y luego seleccione “Merchant IDs” en el menú desplegable de la derecha. Haz clic en el Merchant ID de la tabla.

4. En la parte inferior de la página, haga clic en “Create Certificate” bajo el título “Apple Pay Merchant Identity Certificate”

5. Cargue el archivo merchant_id.csr generado y haga clic en “Continue”

6. Haga clic en “Download” para descargar un archivo llamado merchant_id.cer

7. Se debe convertir el archivo *.cer en un archivo *.pem usando el siguiente comando en la herramienta OpenSSL:

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

Generación del Certificate Signing Request (CSR)

Una vez generado el Merchant Id y el Merchant Identity Certificate, es necesario generar un Certificate Signing Request utilizado para el descifrado de la mensajería a partir de una clave privada. Dicha clave Privada será la que el comercio deba configurar en el Portal de Administración del TPV Virtual

1. Generar par de claves en un archivo de claves de curva elíptica con la herramienta OpenSSL:

openssl ecparam -genkey -name prime256v1 -out ecckey.key

2. Formatear la clave a formato PKCS8:

openssl pkcs8 -topk8 -inform PEM -outform PEM -nocrypt -in ecckey.key -out ecckey_pkcs8.key

*El contenido del fichero resultante deberá introducirse, junto al merchantId, en el portal de administración del TPV Virtual.

3. Generar CSR a partir del par de claves en el archivo de claves

openssl req -new -sha256 -key ecckey.key -out ecccertreq.csr -subj /CN=www.dominiocomercio.com

4. En el centro de miembros, selecciona Certificates, Identifiers & Profiles.

5. Debajo de los identificadores, selecciona Merchant IDs.

6. Selecciona un Merchant ID de la lista y haz clic en Editar.

7. En la sección Certificados de procesamiento de pagos, haga clic en Crear certificado. Siga las instrucciones para obtener o generar su solicitud de firma de certificado (CSR) y haga clic en Continuar.

8. Haga clic en Elegir archivo, seleccione su CSR y haga clic en Generar.

9. Descargue el certificado haciendo clic en Descargar y haga clic en Listo.

Más información en https://help.apple.com/developer-account/#/devb2e62b839?sub=devf31990e3f

Integración con el TPV Virtual

En primer lugar, debes solicitar el alta del método de pago a tu entidad bancaria.

Una vez activado, en la operación de autorización enviada al TPV Virtual, se deben añadir los siguientes parámetros adicionales:

Parámetro long/tipo Descripción
DS_XPAYDATA 10000 / A-N Obligatorio. Campo en el que se incluye el valor del objeto “paymentData” enviado por Apple en formato Hexadecimal
DS_XPAYTYPE 10 / A-N Obligatorio. Valor fijo "Apple"
DS_XPAYORIGEN 5 / A-N Obligatorio
  • InApp - Si la integración es sobre una App móvil
  • WEB - Si la integración es Web

Ejemplo de respuesta de autenticación recibida de Apple. En negrita se indica el objeto JSON "paymentData" que ha de convertirse a formato Hexadecimal.


{
	"token":{
		"paymentData":{
			"data":"CZOOPbi/R7UBdW3as7T…0YYWuQ1iZhvtjAfx+A==",
			"signature":"MIAGCSqGSIb3DQEHAqCA…3gAtcDwfdZIAAAAAAAA=",
			"header":{
				"publicKeyHash":"i4BsP3h7AdaM3DU30UA2pucLcPYT1J9bAj3gi8eAOzw=",
				"ephemeralPublicKey":"MFkwEwYHKoZIzj0CAQYI…OyHpyVnRod+CpBTMxQ==",
				"transactionId":"a9bf8e71ca58173d42af5f24b57ce047528fb285759b296c12f3d8f2e5926644"
			},
			"version":"EC_v1"
		},
		"paymentMethod":{
			"displayName":"Visa 0492",
			"network":"Visa",
			"type":"debit"
		},
		"transactionIdentifier":"A9BF8E71CA58173D42AF5F24B57CE047528FB285759B296C12F3D8F2E5926644"
	}
} 
 

A continuación se incluye un ejemplo de petición al TPV Virtual

	                		
{
  "DS_MERCHANT_AMOUNT": "145",
  "DS_MERCHANT_CURRENCY": "978",
  "DS_MERCHANT_MERCHANTCODE": "999008881",
  "DS_MERCHANT_ORDER": "1446068581",
  "DS_MERCHANT_TERMINAL": "1",
  "DS_MERCHANT_TRANSACTIONTYPE": "0",
  "DS_XPAYDATA":"7B2276657273696F6E223A2245435F7631222C2264617461223A224875317531503941437030594A53316C2B57746B6D63306268575448385578554842596174466D36555836345159785966624D4846757964674D4136414B465556676C693869746C462B7965495A704532572B686E6E796A56446F74714644472F483850425579526A737847436F782B4B71726741756A504B314656557859544830472F7A427862763556506174316C34454E7132635A6D6A686251377341504C7A39584E415039756C3463384668697834652F473848447A6A5139307770616A6D4E57342B4A71444B72516F7A504B4B6B5672366161727276512B4746594230594976447458744251586A57494E424B774B524B4E524A6B532F6445507A736770456245684374333336426E4D53493555306C7131466B3873724676412B554B526B77466572446E617479465A4F764A6B5942624D424C30434531726C6C6842466E6670595A6F70772B764652725A356749413531484E2F52486E6D4F4C313839767A6B30652F50514F37412B2B54754F…..",
  "DS_XPAYTYPE":"Apple",
  "DS_XPAYORIGEN":"InApp"
}