Php APNS服务器响应状态为8-invalid-token,但设备正在正确注册
我正在为我的iOS应用程序实现存折功能。我使用php作为服务器端语言来生成pass并分发到设备。pass正在设备上成功安装,我还能够使用pull to referesh手动更新pass。 当我尝试从服务器端自动更新pass时,我得到响应状态8-invalid-token,并显示消息“Identifier是导致问题的数据库中的rowID(index)。Apple将断开您的连接…”。 我不明白为什么会这样。设备正在正确注册,其他端点也正常工作。如果pass最初不正确,则不应将其安装在设备上。我使用与发送推送通知相同的通行证类型id证书签署了通行证。我还使用下面列出的命令检查了我的证书 我在沙盒和生产环境中对其进行了treid,并且没有显示任何错误。 我使用生产url发送推送通知以更新通行证;这是我发送推送的代码Php APNS服务器响应状态为8-invalid-token,但设备正在正确注册,php,apple-push-notifications,passbook,coupon,wallet,Php,Apple Push Notifications,Passbook,Coupon,Wallet,我正在为我的iOS应用程序实现存折功能。我使用php作为服务器端语言来生成pass并分发到设备。pass正在设备上成功安装,我还能够使用pull to referesh手动更新pass。 当我尝试从服务器端自动更新pass时,我得到响应状态8-invalid-token,并显示消息“Identifier是导致问题的数据库中的rowID(index)。Apple将断开您的连接…”。 我不明白为什么会这样。设备正在正确注册,其他端点也正常工作。如果pass最初不正确,则不应将其安装在设备上。我使用与
$apnsHost = 'gateway.push.apple.com';
$apnsPort = 2195;
$apnsCert = base_path().'/path/to/ptypeidcert.pem';//converted using ssl from passtypeid.p12 certificated
$push_token = $token;
$passIdentify = 'pass.myidentifier.coupon';
$payload = '{}';
$msg = chr(0) . pack('n', 32) . pack('H*', $push_token) . pack('n', strlen($payload)) . $payload . pack('n', strlen($passIdentify)) . $passIdentify;
$streamContext = stream_context_create();
stream_context_set_option($streamContext, 'ssl', 'cafile', base_path().'/path/to/entrust_2048_ca.cer');
stream_context_set_option($streamContext, 'ssl', 'local_cert', $apnsCert);
stream_context_set_option($streamContext, 'ssl', 'passphrase', 'export_password');
$apns = stream_socket_client('ssl://' . $apnsHost . ':' . $apnsPort, $error, $errorString, 2, STREAM_CLIENT_CONNECT, $streamContext);
fwrite($apns, $msg);
PushNotifications::checkAppleErrorResponse($apns);// Just created a class to read response from apn server
@socket_close($apns);
fclose($apns);
对进一步调试的任何帮助都将非常感谢。要调试我的证书吗?
注意:我的API端点在http协议上提供只是为了测试目的,将更新为https协议。我已在设备上启用HTTP服务以安装pass-on passbook
=============更新=============
以下是生成我的证书的步骤
.p12
扩展。该优惠券正在设备上成功安装李>
.p12
转换为.pem
。使用命令
openssl pkcs12-in path.p12-out newfile.pem如果我的证书生成有任何问题,请指出。Wallet仅使用生产APNS端点。沙盒将给您一个“8”错误。是否确实从生产终结点收到“8”个错误?如果是这样,请检查您是否正确编写和发送了有效负载。@PassKit,您可以看到我使用的是
$apnsHost='gateway.push.apple.com'代码>要推送通知的生产端点。我的PassTypeId证书与我用来签署通行证的证书相同,只是在命令行中使用openssl将其转换为.pem。请尝试此$payload=json_encode(['aps'=>[])$msg=chr(0)。chr(0)。chr(32)。包装('H*',str_替换('',$push_标记))。chr(0)。chr(mb_strlen($payload))$有效载荷代码>@PassKit我尝试了您的建议,但无法使其工作。设备上似乎没有显示任何内容。但无效优惠券错误已消失。Wallet仅使用生产APNS终结点。沙盒将给您一个“8”错误。是否确实从生产终结点收到“8”个错误?如果是这样,请检查您是否正确编写和发送了有效负载。@PassKit,您可以看到我使用的是$apnsHost='gateway.push.apple.com'代码>要推送通知的生产端点。我的PassTypeId证书与我用来签署通行证的证书相同,只是在命令行中使用openssl将其转换为.pem。请尝试此$payload=json_encode(['aps'=>[])$msg=chr(0)。chr(0)。chr(32)。包装('H*',str_替换('',$push_标记))。chr(0)。chr(mb_strlen($payload))$有效载荷代码>@PassKit我尝试了您的建议,但无法使其工作。设备上似乎没有显示任何内容。但无效优惠券错误已经消失。
$apnsHost = 'gateway.push.apple.com';
$apnsPort = 2195;
$apnsCert = base_path().'/path/to/ptypeidcert.pem';//converted using ssl from passtypeid.p12 certificated
$push_token = $token;
$passIdentify = 'pass.myidentifier.coupon';
$payload = '{}';
$msg = chr(0) . pack('n', 32) . pack('H*', $push_token) . pack('n', strlen($payload)) . $payload . pack('n', strlen($passIdentify)) . $passIdentify;
$streamContext = stream_context_create();
stream_context_set_option($streamContext, 'ssl', 'cafile', base_path().'/path/to/entrust_2048_ca.cer');
stream_context_set_option($streamContext, 'ssl', 'local_cert', $apnsCert);
stream_context_set_option($streamContext, 'ssl', 'passphrase', 'export_password');
$apns = stream_socket_client('ssl://' . $apnsHost . ':' . $apnsPort, $error, $errorString, 2, STREAM_CLIENT_CONNECT, $streamContext);
fwrite($apns, $msg);
PushNotifications::checkAppleErrorResponse($apns);// Just created a class to read response from apn server
@socket_close($apns);
fclose($apns);