【问题标题】:Update a passbook pass via php通过 php 更新存折通行证
【发布时间】:2014-05-13 19:24:39
【问题描述】:

我通过 PHP 创建了一个 pass,并在 iOS 模拟器和我的 iPhone 上进行了尝试,一切正常。

现在我被“更新我的通行证”任务所困扰,这里的问题是我没有将任何有效负载返回到我的服务器。

我有一个 AlphaSSL 证书。在我的服务器上运行这是 Pass 的 JSON 文件:

JSON:

{ 
    "passTypeIdentifier": "pass.com.XXXXXXX.musterkarte",
    "formatVersion": 1,
    "organizationName": "Melters Werbeagentur GmbH",
    "teamIdentifier": "XXXXXXXX",
    "serialNumber": "test",
    "backgroundColor": "rgb(240,240,240)",
    "logoText": "Hi, there!",
    "description": "testpass",
    "storeCard": {
        "secondaryFields": [
            {
                "key": "balance",
                "label": "BALANCE",
                "value": "$7.36",
                "changeMessage": "change your balance to %@"
            },
            {
                "key": "name",
                "label": "NICKNAME",
                "value": "hello"
            }

        ],
        "backFields": [
            {
                "key": "id",
                "label": "Card Number",
                "value": "test"
            }
        ]
    },
    "barcode": {
        "format": "PKBarcodeFormatPDF417",
        "message": "test",
        "messageEncoding": "iso-8859-1",
        "altText": "test"
    },
    "locations" : [
        {
            "latitude" : 51.222294,
            "longitude" : 6.792051,
        }
    ],
    "authenticationToken":"72aa48d08db9a379f147e38fb23a3901",
    "webServiceURL":"https://melters-server.com/passbook_update/"

    }

这是我的网络服务 index.php:

$request = explode("/", substr(@$_SERVER['REQUEST_URI'], 1));



if (strtoupper($_SERVER['REQUEST_METHOD']) === "POST"

    && isset($_SERVER['HTTP_AUTHORIZATION'])

    && strpos($_SERVER['HTTP_AUTHORIZATION'], 'ApplePass') === 0

    && $request[2] === "devices"

    && $request[4] === "registrations") {



    $auth_key = str_replace('ApplePass ', '', $_SERVER['HTTP_AUTHORIZATION']);



    $device_id = $request[3];

    $pass_id = $request[5];

    $serial = $request[6];



    // Catch the JSON post and decode it

    $dt = @file_get_contents('php://input');

    $device_token = json_decode($dt);

    $device_token = $device_token->pushToken;

    if (!$device_token) die('No Token Found'); // Token wasn't found



    $sql="INSERT INTO token (id, token) VALUES (1, '".$device_token."')";



    mysql_query($sql,$link);

    exit;

}

?>

问题是在我向手机添加了新通行证后,数据库仍然是空的。

我去

https://www.melters-server.com/passbook_update/version/devices/deviceLibraryIdentifier/registrations/passTypeIdentifier/serialNumber

然后我在浏览器中得到这个信息:

获取 443 数组( [0] => passbook_update [1] => 版本 [2] => 设备 [3] => deviceLibraryIdentifier [4] => 注册 [5] => passTypeIdentifier [6] => serialNumber)

【问题讨论】:

  • 仔细检查超级全局 $_SERVER['HTTP_AUTHORiZATION'] 是否已填充。可能是您的服务器配置不支持该变量,因此您的 if 条件没有触发。如果它不检查 PHP 函数 apache_headers,如果不存在,您可以编写自己的函数来获取授权标头。
  • 感谢您的提示,但实际上我删除了 IF-Condition,只保留了 SQL-Statement。数据库仍然是空的。我已经看到几乎所有你的 cmets 来改进我的代码。所以我怀疑,也许我的 iPhone 没有休息风格的请求。你怎么看? PS.我使用 tschoffelen/PHP-PKPass 构建 Pass。
  • 在安装 pass 时遵循控制台日志 - 如果您在设备上有 Passbook 其他日志记录,您将看到设备正在调用您的 Web 服务。另外,请仔细检查您是否正确定义了 webServiceURL 和 authenticationToken ;-)
  • 在日志中:总是通过d[3526] :NSURLConnection/CFURLConnection HTTP 加载失败(kCFStreamErrorDomainSSL,-9813)

标签: passbook


【解决方案1】:

根据您的评论,您的 webServiceURL 您的服务器证书似乎是自签名的,或者无法验证证书链。

如果我通过this validator 运行您的证书,则意味着后者。

在测试设备上的开发人员选项(设置->开发人员)中,打开 PassKit 测试下的“允许 HTTP 服务”并使用 HTTP webServiceURL,或者仔细检查服务器上 SSL 证书的证书链。

【讨论】:

  • 非常感谢,我认为问题可能是服务器端缺少中间证书,现在我期待我的网络服务提供商的一些答案。
  • 再次感谢!问题:服务器端缺少中间证书
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-14
  • 2016-11-14
  • 1970-01-01
相关资源
最近更新 更多