2017-11-24 1 views
0

를 사용하여 .p8 파일을 사용하여 전송 알림을 밀어 여기IOS 내가 IOS는 PHP 5.6 에 .p8 파일을 사용하여 알림을 밀어하려고하지만, 이러한 유형의 오류를 줄이 PHP 코드

@@uUnexpected HTTP/1.x request: POST /3/device/

내 코드

$keyfile = 'C:/xampp/htdocs/aromanew/apns.p8'; 
        $keyid = 'B6U2K4SKZP'; 
        $teamid = 'BD88DGKDD2'; 
        $bundleid = 'com.gatewaytechnolabs.aromaDemo'; 
        $url = 'https://api.development.push.apple.com'; 
        $token = 'DB347143360A0C70F5B69A424979243D01568073144C4408E99B7E2FC7C3D36E'; 
        $message = '{"aps":{"alert":"Congratulations New Message Has been Published","sound":"default"}}'; 

        $key = openssl_pkey_get_private('file://'.$keyfile); 

        $header = ['alg'=>'ES256','kid'=>$keyid]; 
        $claims = ['iss'=>$teamid,'iat'=>time()]; 
        $header_encoded = rtrim(strtr(base64_encode(json_encode($header)), '+/', '-_'), '='); 
        $claims_encoded = rtrim(strtr(base64_encode(json_encode($claims)), '+/', '-_'), '='); 
        $signature = ''; 
        openssl_sign($header_encoded . '.' . $claims_encoded, $signature, $key, 'sha256'); 
        $jwt = $header_encoded . '.' . $claims_encoded . '.' . base64_encode($signature); 


        // only needed for PHP prior to 5.5.24 
        if (!defined('CURL_HTTP_VERSION_2_0')) { 
          define('CURL_HTTP_VERSION_2_0', 3); 
         } 

        $http2ch = curl_init(); 
        curl_setopt_array($http2ch, array(
         CURLOPT_URL => "$url/3/device/$token", 
         CURLOPT_PORT => 443, 
         CURLOPT_HTTPHEADER => array(
          "apns-topic: {$bundleid}", 
          "authorization: bearer $jwt" 
         ), 
         CURLOPT_POST => TRUE, 
         CURLOPT_POSTFIELDS => $message, 
         CURLOPT_RETURNTRANSFER => TRUE, 
         CURLOPT_TIMEOUT => 30, 
         CURLOPT_HEADER => 1 
        )); 

       $result = curl_exec($http2ch); 

       if ($result === FALSE) { 
        throw new Exception("Curl failed: ".curl_error($http2ch)); 
       } 

        $status = curl_getinfo($http2ch, CURLINFO_HTTP_CODE); 

답변

1

.p8 파일을 사용하려면 서버에 HTTP/2 (CURL)가 설치되어 있어야합니다. 이것을 확인하는 가장 쉬운 방법은 php_info 파일을 생성하고 cURL 섹션을 보는 것입니다. 기본적으로 cURL은 HTTP/2로 컴파일되지 않습니다.