2013-03-24 2 views
5

Im пытается создать динамические купоны для моего приложения. У меня есть сервер PHP, который их создает. Но я не знаю, почему они не работают в сберегательной книжке.Создать пропуск для сберегательной книги в php

Если я создаю пропуск из терминала, он отлично работает. Но в PHP с PHP-PKPass.

Я оставил код в PHP под ним появляются в моем компьютере проход, но он не добавляет в сберкнижки (также, если я отправить его по электронной почте)

Im 100% уверен, что passTypeIdentifier, teamIdentifier , сертификат и ВДРВР 100% правильно

Примечание: все изображения существует

<?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

При установке одного из ваших проходов на устройстве, что вы видите в консоли (чтобы увидеть это, подключить ваш iPhone до Mac, запустите Xcode и нажмите Window -> Организатор). – PassKit

+0

В iPhone я не могу установить его, потому что он выглядит как cupon.pkpass – Edig

+0

Возможно, Safari загружает файл, потому что он не распознает его как файл прохода. Вы обслуживаете его с помощью приложения Content-Type:/vnd.apple.pkpass' заголовок? – PassKit

ответ

3

Глядя на выходе консоли, как я попытался установить пропуск, я вижу следующее предупреждение.

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. 

копаться в pass.json, я вижу, что ваш primaryFields словарь не содержит ключ «значение».

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

Чтобы исправить, изменить PHP добавить value ключ к вашему primaryFields словаря.

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

Спасибо, что он отлично работает, я исключаю «ценность», потому что я не хотел, чтобы он появился. Но спасибо! – Edig