在存折中没有打开PKPASS

  • 本文关键字:PKPASS passbook passkit
  • 更新时间 :
  • 英文 :


我是第一次使用存折。我使用PHP-PKPass库创建了一个web应用程序来为Passbook创建通行证。我使用了必要的许可证。当我提交创建表单时,它创建了一个通行证,但是这个通行证在passbook上不起作用。如果我把它作为电子邮件附件发送,它显示为空。它在android上运行良好。我使用的是Windows PC,所以我无法使用iphone模拟器查看日志。这是我创建的一个通行证的链接http://tanvir.tennisads.com/passbook/passes/pass - 36252. - pkpass

有没有人能帮我找出通行证有什么问题?提前谢谢。

更新:我已经删除了信标和位置部分,但有同样的问题。以下是生成的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 = 'abcdefghijklmnopqrstuvwxyz0123456789';
        $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 PKPassPKPass();
    $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/icon@2x.png');
    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>

下面是我尝试从iphone下载通行证时的截图:https://i.stack.imgur.com/gnP2r.jpg

看看你的pass.json,我可以看到两个错误。

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

第一个错误是您的信标字典包含无效条目。您没有提供proximityUUIDrelevantText

第二个错误被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.

当纬度和经度值需要以小数形式提供时,您将它们作为字符串提供。

把信标数组和引号放在后期和长值周围,你应该没问题。


你的新通行证很好。它没有在手机上加载,因为您的web服务器没有应用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头文件添加到该文件中,您应该会发现它加载正常。

有关如何添加标题的更多信息,请参阅此问题的答案

相关内容

  • 没有找到相关文章