【问题标题】:How to respond for getting pass task如何响应获得通过任务
【发布时间】:2013-04-08 06:59:22
【问题描述】:

我正在做一个用于更新通行证的网络服务器。我通过打开或关闭自动更新的切换来测试更新。这是我从控制台得到的:
Apr 8 13:19:47 CamMobs-iPod4 passd[21] <Warning>: Get pass task (pass type pass.cam-mob.passbookpasstest, serial number 0001, if-modified-since (null); with web service url http://192.168.1.202:8888/passesWebserver/) encountered error: Server response was malformed (Missing response data) 这是我使用的代码:

if (strtoupper($_SERVER['REQUEST_METHOD']) === "GET" && $request[3]==='passes'){

$passTypeID = $request[4];

$serial = $request[5];

 $auth_key = str_replace('ApplePass ', '', $headers['Authorization']);

$querySelect = mysql_query("select * from registration");
$row = mysql_fetch_array($querySelect);
if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])){
    if ($passTypeID == $row['passTypeID'] && $serial ==$row['serialNo']){
        $pkpass_file = '/Applications/MAMP/htdocs/passesWebserver/DigiClubCard.pkpass';

        header("Pragma: no-cache");
        header("Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0");
        header("Content-type: application/vnd.apple.pkpass; charset=UTF-8");
        header('Content-Disposition:attachment; filename="genericPass.pkpass"');
        clearstatcache();
        $filesize = filesize($pkpass_file);
        if ($filesize)
            header("Content-Length: ". $filesize);
            header('Content-Transfer-Encoding: binary');
        if (filemtime($pkpass_file)) {
            date_default_timezone_set("UTC");
            header('Last-Modified: ' . date("D, d M Y H:i:s", filemtime($pkpass_file)) . ' GMT');
        }
        flush();
        readfile($pkpass_file);
    } } }`

【问题讨论】:

    标签: web-services ios6 passbook


    【解决方案1】:

    您正在从注册表中选择所有 (*) 到 $row,但随后处理 $row,就像它是 MySQL 行一样,而它实际上是 MySQL 结果。

    因此,您的 if 语句没有触发,因此您的代码没有发回任何内容,而不是 passbook 所期望的 .pkpass 包。

    【讨论】:

    • 现在当pass已经更新了,我的服务器可以响应304,但是为什么还有一些错误?这是我从控制台得到的:Apr 9 14:28:21 CamMobs-iPod4 passd[3521] :获取 pass 任务(pass 类型 pass.cam-mob.passbookpasstest,序列号 0001,if-modified-since Tue, 2013 年 4 月 9 日 02:04:07 GMT;使用 Web 服务 url 192.168.1.202:8888/passesWebserver) 得到代码 304 的响应
    • Apr 9 14:28:21 CamMobs-iPod4 passd[3521] :pass.cam-mob.passbookpasstest (192.168.1.202:8888/passesWebserver) 的 Web 服务错误:服务器请求更新序列号 ' 0001',但通行证没有改变。
    • 这是因为您回复了一系列序列号,但是当设备请求使用该序列号通过时,您发送了304。如果 pass 没有改变,那么你需要发送一个 204 到 get serials 方法和一个 304 到 Get latest version of a pass 方法。如果您的 phd_error.log 中没有任何内容,请检查您的日志重写规则并检查您的日志记录代码是否正常工作。
    • 我获取序列号的条件是:$updateTag = array($row['max(updateTag)']); $标签 = ''; if(!empty($request[7]) && $request[7] === "passesUpdatedSince"){ $tag = $request[8]; error_log('标签:' .$tag,0); } if ($updateTag > $tag) { echo json_encode(array('lastUpdated' => (string)time(), 'serialNumbers' => $serialsArray)); }else { response204(); }
    • 在调用204之前,我不能通过,现在我可以通过第一次更新。对于下一次更新,我得到响应 200 以获得串行和 304 获得通过
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-03
    • 2019-04-27
    • 1970-01-01
    • 2012-11-08
    • 2019-09-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多