このURLを確認 し、手順に従ってp12ファイルからpemファイルを生成しました。以下は、pemファイルを生成するためのコードです。
....
if ($this->file->save($uploadDirectory . $filename . '.' . $ext)) {
$filenamewithpath = $uploadDirectory . $filename . '.' . $ext;
$handle = fopen($filenamewithpath, 'r');
$p12buf = fread($handle, filesize($filenamewithpath));
fclose($file);
$password = @$p12pwd;
$results = array();
$worked = openssl_pkcs12_read($p12buf, $results, $password);
//d($results); exit;
if ($worked) {
//echo '<pre>', print_r($results, true), '</pre>';
$new_password = null;
$result = null;
$worked = openssl_pkey_export($results['pkey'], $result, $new_password);
if($worked) {
//echo "<pre>It worked! Your new pkey is:\n", $result, '</pre>';
file_put_contents( $uploadDirectory . $filename . '.pem',$result);
return array(
'success' => true,
'filename'=>$filename . '.pem',
'uploaddir' =>$uploadDirectory,
);
} else {
return array('error' => openssl_error_string());
}
} else {
return array('error' => openssl_error_string());
}
}
....
正常に動作し、生成されたpemファイルは指定されたディレクトリに保存されます。今、私はこのpemファイルをプッシュ通知に使用しようとしています。以下のコードを確認してください。
<?php
$apnsHost = 'gateway.sandbox.push.apple.com';
//$apnsHost = 'gateway.push.apple.com';
$apnsCert = 'test.pem';
$apnsPort = 2195;
$streamContext = stream_context_create();
stream_context_set_option($streamContext, 'ssl', 'local_cert', $apnsCert);
$apns = stream_socket_client('ssl://' . $apnsHost . ':' . $apnsPort, $error, $errorString, 2, STREAM_CLIENT_CONNECT, $streamContext);
$payload['aps'] = array('alert' => 'this is test!', 'badge' => 1, 'sound' => 'default');
$output = json_encode($payload);
$token = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
$token = pack('H*', str_replace(' ', '', $token));
$apnsMessage = chr(0) . chr(0) . chr(32) . $token . chr(0) . chr(strlen($output)) . $output;
//var_dump($apnsMessage); exit;
fwrite($apns, $apnsMessage);
@socket_close($apns);
fclose($apns);
?>
このコードを実行すると、以下のエラーが発生しました。
Warning: stream_socket_client(): Unable to set local cert chain file `test.pem'; Check that your cafile/capath settings include details of your certificate and its issuer in /var/www/html/myserver/apns/test.php on line 13
Warning: stream_socket_client(): failed to create an SSL handle in /var/www/html/myserver/apns/test.php on line 13
Warning: stream_socket_client(): Failed to enable crypto in /var/www/html/ela/apns/test.php on line 13
Warning: stream_socket_client(): unable to connect to ssl://gateway.sandbox.push.apple.com:2195 (Unknown error) in /var/www/html/myserver/apns/test.php on line 13
Warning: fwrite() expects parameter 1 to be resource, boolean given in /var/www/html/myserver/apns/test.php on line 20
Warning: fclose() expects parameter 1 to be resource, boolean given in /var/www/html/myserver/apns/test.php on line 23
この問題を修正するためのアドバイスをお願いします。