@asscarnival

Какой сертификат используется для отправки сообщений вебпушей через APNS?

$ctx = stream_context_create();
stream_context_set_option($ctx, 'ssl', 'local_cert', $certDir);


Для установления соединения необходим pem сертификат, но из чего конкретно его сделать? Для подписок у меня есть cer и сделанный из него p12 WebPush сертификат, который эпл называет website aps production. Я подумал, что один из этих сертифкатов необходимо переделать в pem. Пробовал .p12 в pem, также пробовал cer подписать приватным ключом от .p12, оба таких сертификата проходят верификацию
openssl s_client -connect gateway.push.apple.com:2195 -cert cert.pem

но пуши так и не приходят. Думаю, что проблема именно в сертификате, ниже прилагаю код
$certDir = 'cert.pem';

		$address =  'gateway.push.apple.com:2195';
		$deviceToken = 'D1BF307920AEA35AA1E2C3F4B38863FC801F08EEC9BA00FABDDBCFF3C517DAB6';

		$ctx = stream_context_create();
		stream_context_set_option($ctx, 'ssl', 'local_cert', $certDir);
		stream_context_set_option($ctx, 'ssl', 'passphrase', '***');

		$socketClient = stream_socket_client(
			$address,
			$errno,
			$errstr,
			60,
			STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT,
			$ctx
		);
		var_dump($errstr);
		$payload = array(
			'aps'    => array(
				'alert'    => array(
					'title'    => 'Foo',
					'body'   => 'bar',
					'action' => 'view',
				),
			)
		);

		$encodedPayload = json_encode($payload);

//		$binaryMessage = chr(0).
//			chr(0).
//			chr(32).
//			pack('H*', $deviceToken).
//			chr(0).chr(strlen($encodedPayload)).
//			$encodedPayload;

		$binaryMessage =  chr(0) . pack('n', 32) . pack('H*', $deviceToken) . pack('n', strlen($encodedPayload)) .$encodedPayload;

		$result = fwrite($socketClient,  $binaryMessage, strlen($binaryMessage));

		var_dump($result);

		while(!feof($socketClient)) {
			var_dump(fgets($socketClient,64));
		}

		fclose($socketClient);


$errstr = string(0) ""
$result = int(119)
var_dump(fgets($socketClient,64)) = bool(false)
  • Вопрос задан
  • 134 просмотра
Пригласить эксперта
Ответы на вопрос 1
doniys_a
@doniys_a
Backend-разработчик (Php, node.js, python, ruby)
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы