2013-03-24 15 views
5

Sto cercando di creare coupon dinamici per la mia app. Ho un server PHP che li crea. Ma non so perché non funzionano sul libretto degli assegni.Crea pass per il passaporto in php

Se creo il pass da Terminal, funziona correttamente. Ma in PHP con PHP-PKPass.

ho lasciato il codice in PHP sotto di esso in Risorse del computer il pass, ma non aggiunge nel libretto (anche se lo invio via e-mail)

Im sicuro al 100% che passTypeIdentifier, teamIdentifier , certificato e WWDR sono al 100% in modo corretto

Nota: tutte le immagini esiste

<?php 
include ("conexion.php"); 
require('passpk/PKPass.php'); 

if (isset($_GET['cupon']) and $_GET['cupon'] != '' and $_GET['cupon'] > 0) { 

    $cuponID = $_GET['cupon']; 


    $pass = new PKPass\PKPass(); 

    $pass->setCertificate('./Certificate.p12'); // 2. Set the path to your Pass Certificate (.p12 file) 
    $pass->setCertificatePassword('*******');  // 2. Set password for certificate 
    $pass->setWWDRcertPath('./WWDR.pem'); // 3. Set the path to your WWDR Intermediate certificate (.pem file) 


    // Top-Level Keys http://developer.apple.com/library/ios/#documentation/userexperience/Reference/PassKit_Bundle/Chapters/TopLevel.html 
    $standardKeys   = array(
     'description'  => 'Store', 
     'formatVersion'  => 1, 
     'organizationName' => 'Store', 
     'passTypeIdentifier' => 'pass.store.store', // 4. Set to yours 
     'serialNumber'  => $cupon['id'], 
     'teamIdentifier'  => '********'   // 4. Set to yours 
    ); 
    $associatedAppKeys = array(); 
    $relevanceKeys  = array(); 
    $styleKeys   = array(
     'coupon' => array(
      'primaryFields' => array(
       array(
        'key' => 'key', 
        'label' => "Label" 
       ) 
      ), 
      'secondaryFields' => array(
       array(
        'key' => 'name', 
        'label' => 'Tienda', 
        'value' => "Name" 
       ), 
       array(
        'key' => 'date', 
        'label' => 'Válido hasta', 
        'value' => "Vigencia" 
       ) 
      ), 
      'backFields' => array(
       array(
        'key' => 'tienda', 
        'label' => 'Tienda', 
        'value' => "tienda" 
       ), 
       array(
        'key' => 'sucursales', 
        'label' => 'Sucursales', 
        'value' => 'Valido en las sucursales y sus horarios' 
       ), 
       array(
        'key' => 'description', 
        'label' => 'Descripción', 
        'value' => "descr" 
       ), 
       array(
        'key' => 'terms', 
        'label' => 'Términos y Condiciones', 
        'value' => "cupon" 
       ) 
      ) 
     ) 
    ); 
    $visualAppearanceKeys = array(
     'barcode'   => array(
      'format'   => 'PKBarcodeFormatPDF417', 
      'message'   => "cupon", 
      'messageEncoding' => 'iso-8859-1' 
     ), 
     'foregroundColor' => 'rgb(255, 255, 255)', 
     'backgroundColor' => 'rgb(4, 148, 203)', 
     'logoText'  => 'cupon' 
    ); 
    $webServiceKeys  = array(); 

    // Merge all pass data and set JSON for $pass object 
    $passData = array_merge(
     $standardKeys, 
     $associatedAppKeys, 
     $relevanceKeys, 
     $styleKeys, 
     $visualAppearanceKeys, 
     $webServiceKeys 
    ); 

    $pass->setJSON(json_encode($passData)); 

    //creating a temp file called strip.png 
    //generamos un directorio temporal y creamos el strip 
    $uniqID = uniqid('', true); 
    $dir = './tempDir/'.$uniqID; 
    mkdir($dir, 0777); 

    //copiamos el archvio al nuevo directorio 
    copy('../'.$img, './tempDir/'.$uniqID.'/strip.png'); 

    // Add files to the PKPass package 
    $pass->addFile($dir.'/strip.png'); 
    $pass->addFile('images/icon.png'); 
    $pass->addFile('images/[email protected]'); 
    $pass->addFile('images/logo.png'); 
    $pass->addFile('images/[email protected]'); 

    if(!$pass->create(true)) { // Create and output the PKPass 
     echo 'Error: '.$pass->getError(); 
    } 

    //borramos el folder temp 
    unlink($dir.'/strip.png'); 
    rmdir($dir); 
} 
+0

Quando si installa uno dei tuoi passaggi sul dispositivo, cosa vedi nella console (per vedere questo, collegare il vostro iPhone fino a un Mac, lanciare Xcode e fare clic su Window -> Organizer). – PassKit

+0

Nell'iPhone non riesco a installarlo perché appare come cupon.pkpass – Edig

+0

Potrebbe essere che Safari stia scaricando il file perché non lo riconosce come file di passaggio - Lo stai servendo con un 'Content-Type: application/vnd.apple.pkpass' header? – PassKit

risposta

3

Guardando l'output della console, come ho tentato di installare il vostro passaggio, vedo il seguente avviso.

Mar 25 10:45:40 iPhone MobileSafari[279] <Warning>: Invalid data error reading pass pass.cuponice.cuponice/9. Pass dictionary must contain key 'value'. 
Mar 25 10:45:40 iPhone MobileSafari[279] <Warning>: PassBook Pass download failed: The pass cannot be read because it isn't valid. 

Scavando nella vostra pass.json, vedo che il dizionario primaryFields non contiene una chiave di 'valore'.

"primaryFields": [{ 
      "key": "key", 
      "label": "30% de Descuento en Persianas" 
     } 
    ], 

da correggere, modificare il PHP per aggiungere una chiave value al dizionario primaryFields.

$styleKeys = array(
    'coupon' => array(
     'primaryFields' => array(
      array(
       'key' => 'key', 
       'label' => "Label", 
       'value' => "" 
      ) 
     ),       //... 
+0

Grazie a uomini funziona perfettamente. Elimina il "valore" perché non volevo che comparisse. Ma grazie! – Edig