我通过 PHP 创建了一个通行证,并在 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] => 序列号 )
从您的评论来看,您的
webServiceURL
服务器证书似乎是自签名的或无法验证证书链。
如果我通过此验证器运行您的证书,则意味着后者。
在测试设备上的开发人员选项(设置 -> 开发人员)中,打开 PassKit 测试下的“允许 HTTP 服务”并使用 HTTP
webServiceURL
,或者仔细检查服务器上 SSL 证书的证书链。