Esta clase proporciona la funcionalidad para crear pases para Wallet en iOS de Apple. Crea, firma y empaqueta el pase como un archivo .pkpass
según la documentación de Apple.
PHP 7.0 o superior (también puede funcionar con versiones anteriores)
Extensión PHP ZIP (a menudo instalada de forma predeterminada)
Acceso al sistema de archivos para escribir archivos de caché temporales
Simplemente ejecute el siguiente comando en el directorio raíz de su proyecto para instalarlo a través de Composer:
composer require pkpass/pkpass
O agregue a su compositor.json: "pkpass/pkpass": "^2.0.0"
Eche un vistazo al archivo ejemplos/example.php para ver un ejemplo de uso. Para obtener más información sobre el JSON del pase y cómo diseñarlo, consulte los documentos en desarrolladores.apple.com.
Ejemplo sencillo
Ejemplo de billete de avión
Ejemplo de tarjeta Starbucks
addFile
: agrega un archivo sin configuración regional como icon.png
addRemoteFile
: agrega un archivo desde una URL sin configuración regional como https://xyz.io/icon.png
addLocaleFile
: agrega un archivo localizado como strip.png
addLocaleRemoteFile
: agrega un archivo localizado desde una URL como https://xyz.io/strip.png
Vaya al portal de aprovisionamiento de iOS.
Cree un nuevo ID de tipo de pase y anote el ID de pase que elija; lo necesitará más adelante.
Haga clic en el botón editar debajo de su ID de tipo de pase recién creado y genere un certificado de acuerdo con las instrucciones que se muestran en la página. Asegúrese de no elegir un nombre para el Certificado, manténgalo vacío.
Descargue el archivo .cer y arrástrelo a Keychain Access.
Busque el certificado que acaba de importar y haga clic en el triángulo de la izquierda para revelar la clave privada.
Seleccione tanto el certificado como la clave privada, luego haga clic derecho en el certificado en Acceso a Llaveros y elija Export 2 items…
.
Elija una contraseña y exporte el archivo a una carpeta.
Cuando aparece el error "No se pudo leer el archivo del certificado". Esto podría estar relacionado con el uso de una versión de OpenSSL que ha dejado de usar algunos hashes más antiguos. Más información aquí: https://schof.link/2Et6z3m Error de OpenSSL: error:0308010C:rutinas de sobre digital::unsupported' esto se debe a que OSX exporta el archivo .p12 usando una versión antigua de OpenSSL. Para solucionar este problema, utilice los siguientes comandos:
openssl pkcs12 -legacy -in key.p12 -nodes -out key_decrypted.tmp
(reemplace key.p12 con su nombre de archivo .p12).
openssl pkcs12 -in key_decrypted.tmp -export -out key_new.p12
(use el archivo key_new.p12 recién generado en la generación de su pase a continuación)
Solicite el certificado Pass ( .p12
) como se describe arriba y cárguelo en su servidor.
Establezca la ruta y contraseña correctas en la línea 22.
Cambie passTypeIdentifier
y teamIndentifier
a los valores correctos en las líneas 29 y 31 ( teamIndentifier
se puede encontrar en el Portal de desarrollador).
Después de completar estos pasos, debería estar listo para comenzar. Sube todos los archivos a tu servidor y navega hasta la dirección del archivo ejemplos/ejemplo.php en tu iPhone.
Si no puede abrir su pase en un iPhone, conecte el iPhone a una Mac y abra la aplicación 'Consola'. A la izquierda, puedes seleccionar tu iPhone. Luego podrá inspeccionar cualquier error que ocurra al agregar el pase:
Trust evaluate failure: [leaf TemporalValidity]
: si ve este error, su pase se firmó con un certificado desactualizado.
Trust evaluate failure: [leaf LeafMarkerOid]
: no dejó el nombre del certificado vacío al crearlo en el portal para desarrolladores.
Versión 2.1.0 - Abril de 2023
Agregue un método alternativo para extraer contenidos P12 para evitar problemas en versiones recientes de OpenSSL.
Versión 2.0.2 - Octubre de 2022
Cambie al método ZipArchive::OVERWRITE
para abrir ZIP debido a la obsolescencia de PHP 8 (#120).
Versión 2.0.1 - Octubre de 2022
Actualice el certificado WWDR a v6 (#118).
Versión 2.0.0 - Septiembre de 2022
Se cambió la firma del constructor para eliminar el tercer parámetro $json
.
Eliminar el método setJSON()
obsoleto.
Se eliminaron los métodos checkError()
y getError()
a favor de excepciones.
Lea las instrucciones anteriores y consulte la documentación de Wallet antes de enviar tickets o solicitar asistencia. También podría valer la pena consultar Stackoverflow, que contiene bastantes preguntas sobre esta biblioteca.
Obtenga soporte profesional para este paquete →
Sesiones de consultoría personalizadas disponibles para soporte de implementación y desarrollo de funciones.