2015-06-10 2 views
0

Я новичок в сберегательной книжке. Я создал веб-приложение с использованием библиотеки PHP-PKPass для создания пропусков для Passbook. Я использовал необходимые лицензии. Когда я отправляю для создания формы, она создает пропуск, но пропуск не работает в сберегательной книжке. Если я отправлю его в виде вложения электронной почты, он отобразит нуль. Он отлично работает на Android. Я на ПК с ОС Windows, поэтому я не могу использовать симулятор iphone для просмотра журналов. Вот ссылка на проспект, созданный мной - http://tanvir.tennisads.com/passbook/passes/pass-36252.pkpassPKPASS not opennig in Passbook

Может кто-нибудь, пожалуйста, помогите мне определить, что не так с проходом? Заранее спасибо.

Обновление: Я удалил маяки и местонахождение, но имел ту же проблему. Вот сгенерированный код json.

{ 
    "description": "Kenedy Store", 
    "formatVersion": 1, 
    "organizationName": "Kenedy Store", 
    "passTypeIdentifier": "pass.com.retailness.testing.passbook", 
    "serialNumber": "449925", 
    "teamIdentifier": "NBN8H8W46L", 
    "coupon": { 
    "primaryFields": [ 
     { 
     "key": "offer", 
     "label": "Any purchase", 
     "value": "25% off" 
     } 
    ], 
    "auxiliaryFields": [ 
     { 
     "key": "expires", 
     "label": "EXPIRES", 
     "value": "30-06-2015" 
     } 
    ], 
    "backFields": [ 
     { 
     "key": "terms", 
     "label": "TERMS AND CONDITIONS", 
     "value": "tos" 
     } 
    ] 
    }, 
    "backgroundColor": "rgb(255,255,255)", 
    "foregroundColor": "rgb(15, 15, 15)", 
    "labelColor": "rgb(85, 85, 85)", 
    "logoText": "Kenedy Store" 
} 

Вот PHP код, который я использовал для создания прохода ...

<html> 
<head> 
    <title>Passbook Demo</title> 
    <meta charset="UTF-8"> 
    <meta name="viewport" content="width=device-width, initial-scale=1"> 
    <link rel="stylesheet" href="styles/bootstrap.min.css"> 
    <link rel="stylesheet" href="styles/smoke.min.css"> 
    <link rel="stylesheet" href="styles/custom.css"> 
    <script src='scripts/jquery.min.js'></script> 
    <script src='scripts/bootstrap.min.js'></script> 
    <script src='scripts/smoke.min.js'></script> 
</head> 
<body> 
<?php 

    function RandomString($length) 
    { 
     $characters = 'abcdefghijklmnopqrstuvwxyz'; 
     $randstring = ''; 
     for ($i = 0; $i < $length; $i++) { 
      $randstring .= $characters[rand(0, strlen($characters))]; 
     } 
     return $randstring; 
    } 

    $flag = false; 

    $name = urldecode($_POST['name']); 
    $amount = urldecode($_POST['amount']); 
    $message = urldecode($_POST['message']); 
    $expires = urldecode($_POST['expires']); 
    $email = urldecode($_POST['email']); 
    $uuid = urldecode($_POST['uuid']); 
    $major = urldecode($_POST['major']); 
    $minor = urldecode($_POST['minor']); 
    $tos = urldecode($_POST['tos']); 
    $appURL = urldecode($_POST['appURL']); 
    $lat = urldecode($_POST['lat']); 
    $lon = urldecode($_POST['lon']); 
    $beacon_msg = urldecode($_POST['beacon_msg']); 
    $location_msg = urldecode($_POST['location_msg']); 

    $target = ""; 

    if($_FILES['file']['name']){ 

     $flag = true; 
     $file = $_FILES['file']; 
     $n = $file['name']; 
     $ext = end((explode(".", $n))); 

     $target = "images/up/logo." .$ext; 
     move_uploaded_file($file['tmp_name'], $target); 

    } 

    require 'includes/PKPass/PKPass.php'; 

    $pass = new PKPass\PKPass(); 

    $pass->setCertificate('certificates/Certificate.p12'); 
    $pass->setCertificatePassword('tanvir123'); 
    $pass->setWWDRcertPath('certificates/AppleWWDRCA.pem'); 


    $standardKeys   = array(
     'description'  => "{$name}", 
     'formatVersion'  => 1, 
     'organizationName' => "{$name}", 
     'passTypeIdentifier' => 'pass.com.retailness.testing.passbook', // 4. Set to yours 
     'serialNumber'  => RandomString(6), //CHANGE IT TO RANDOMIZE 
     'teamIdentifier'  => 'NBN8H8W46L' 
    ); 

    $associatedAppKeys = array(
    ); 
    $relevanceKeys  = array(
    ); 
    $styleKeys   = array(
     'coupon' => array(
      'primaryFields' => array(
       array(
        'key' => 'offer', 
        'label' => "{$message}", 
        'value' => "{$amount}% off" 
       ) 
      ), 
      'auxiliaryFields' => array(
       array(
        'key' => 'expires', 
        'label' => 'EXPIRES', 
        'value' => "{$expires}" 
       ) 
      ), 
      'backFields' => array(
       array(
        'key' => 'terms', 
        'label' => 'TERMS AND CONDITIONS', 
        'value' => "{$tos}" 
       ) 
      ) 
     ) 
    ); 

    $visualAppearanceKeys = array(
     'backgroundColor' => 'rgb(255,255,255)', 
     'foregroundColor' => 'rgb(15, 15, 15)', 
     'labelColor' => 'rgb(85, 85, 85)', 
     'logoText'  => "{$name}" 

    ); 

    $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)); 

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

    if($flag == false) $pass->addFile('images/logo.png'); 
    else $pass->addFile($target); 
    $pass->addFile($target); 

    $data = $pass->create(true); 
    $path = 'passes/pass-'.RandomString(5).'.pkpass'; 

    file_put_contents($path, $data); 
    //unlink($new_file_path); 

    $fullpath = 'http://' . $_SERVER['SERVER_NAME'] . '/passbook/' . $path; 

    ?> 

    <div class="container"> 
     <div class="row"> 
      <div class="col-md-12"> 
       <div class="col-md-2"> 
        <img src="images/logo.png" height="93" width="156" alt=""> 
       </div> 
       <div class="col-md-10 text-center"> 
        <h2>Passbook/iBeacon Demo</h2> 
       </div> 
      </div> 
     </div> 
     <div class="col-md-6 col-md-offset-3 text-center"> 
      <a href="<?php echo $fullpath; ?>">Download</a> the pass.<br> 
      Or use the QR Code instead: <br> 
    <?php 
     require 'includes/phpqrcode/qrlib.php'; 
     QRCode::png($fullpath, $path . '.png'); 
    ?> 
      <img src="<?php echo $path . '.png'; ?>" width=500> 

     </div> 
    </div> 
</body> 
</html> 

А вот скриншот того, что hapenning, когда я пытаюсь скачать минует Iphone: http://i.imgur.com/5NLAl3g.jpg

ответ

0

Глядя на ваш pass.json Я вижу две ошибки.

"beacons": [{ 
    "proximityUUID": "", 
    "relevantText": "", 
    "major": "0", 
    "minor": "0" 
}], 
"locations": [{ 
    "longitude": "90.42607140943142", 
    "latitude": "23.7636902410487", 
    "relevantText": "office" 
}], 

Первая ошибка заключается в том, что словарь маяков содержит недопустимую запись. Вы не поставили proximityUUID или relevantText.

Вторая ошибка улавливается Xcode.

Jun 10 09:09:02 pfr MobileSafari[4660] <Warning>: Invalid data error reading pass pass.com.retailness.testing.passbook/314548. Value for key 'latitude' must be of class NSNumber, but is actually of class __NSCFString. 

Вы предоставляете свои значения широты и долготы в виде строк, когда они должны быть представлены в виде десятичных знаков.

Опустите массив маяков и кавычки вокруг значений lat и long, и вы должны быть в порядке.


Update

Ваш новый проход хорошо. Это не загрузка по телефону, потому что ваш веб-сервер не применяет заголовок Content-Type, и поэтому iOS не распознает этот файл как пропуск.

HTTP/1.1 200 OK 
Date: Fri, 12 Jun 2015 17:25:58 GMT 
Server: Apache 
Last-Modified: Thu, 11 Jun 2015 07:44:56 GMT 
Accept-Ranges: bytes 
Content-Length: 20604 

Добавить Content-Type: application/vnd.apple.pkpass заголовок в этот файл, и вы должны найти, что он загружает нормально.

Для получения дополнительной информации о том, как добавить заголовок, см. Ответы на вопрос this question.

+0

Спасибо за ответ. Я попробовал, но все та же проблема. Я даю json-файл. Я также добавлю PHP-код и снимок экрана о том, что происходит при попытке загрузить пропуск на iphone. –

+0

Можете ли вы загрузить свой новый пропуск? – PassKit

+0

Я создал новый ... [ЗДЕСЬ] (http://tanvir.tennisads.com/passbook/passes/pass-9487.pkpass) –

Смежные вопросы