【发布时间】: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;
}
?>
问题是在我向手机添加了新通行证后,数据库仍然是空的。
我去
然后我在浏览器中得到这个信息:
获取 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