2015-06-27 12 views
13

Uso Push Notifs nell'app PHP Laravel. Ho creato un file PEM e l'ho testato. Quando lo si utilizza sulla mia macchina dev, spinge correttamente sul dispositivo mobile. Quando ora spingo l'intero progetto sul mio server di produzione e avvio la chiamata pushnotif, viene visualizzato l'errore: Failed to enable cryptoErrore notifica criptazione

Devo creare un file Pem speciale mentre si trova sul server di produzione? E non sto parlando di "certificati di produzione" Ho ancora voglia di usare la sandbox per i test

<?php 

namespace App\Helpers; 
use Carbon\Carbon; 
use Illuminate\Support\Facades\Config; 

class PushNotificationHelper { 
    public function pushToResponder($deviceToken) { 
     // Set device token of mobile device and the passphrase for certification 
     $pushToken = $deviceToken; 
     $passphrase = Config::get('MFConfig.PushNotificationTest.passPhrase'); 
     $APNS = Config::get('MFConfig.PushNotificationTest.APNS'); 

     // Open new context for streaming and set certificate as well as passphrase 
     $ctx = stream_context_create(); 
     stream_context_set_option($ctx, 'ssl', 'local_cert', '../App/Certificates/ck.pem'); 
     stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase); 
     stream_context_set_option($ctx, 'ssl', 'cafile', '../App/Certificates/entrust_2048_ca.cer'); 

     // Open connection to APNS 
     $fp = stream_socket_client($APNS, $err, $errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx); 

     // If no connection could be made then fail with error, otherwise connect 
     if (!$fp) { 
      exit("Failed to connect: $err, $errstr" . PHP_EOL); 
     } 

     echo 'Connected to APNS' . PHP_EOL; 

     // Create the payload body 
     $body['aps'] = array(
      'alert' => "MEDIFAKTOR Einsatz", 
      'sound' => 'default' 
     ); 

     // Encode the payload as JSON 
     $payload = json_encode($body); 

     // Build the binary notification 
     $msg = chr(0) . pack('n', 32) . pack('H*', $pushToken) . pack('n', strlen($payload)) . $payload; 

     // Send to server 
     $result = fwrite($fp, $msg, strlen($msg)); 

     // If no result is available, the message was not delivered. 
     if(!$result) { 
      echo 'Message not delivered.' . PHP_EOL; 
     } else { 
      echo 'Message successfully delivered.' . PHP_EOL; 
     } 

     // Close connection 
     fclose($fp); 

    } 
} 

ho testato la connessione con:

openssl s_client -connect gateway.sandbox.push.apple.com:2195 -cert ck.pem -debug -showcerts -CAfile entrust_2048_ca.cer 

e restituisce lo stato 0 (ok), che va bene Credo? ma quando chiamo la funzione ottengo: failed loading cafile stream

+0

https://github.com/immobiliare/ApnsPHP/ avete controllato questo repository. – Ugur

risposta

4

Non sono sicuro su questo, ma potrebbe essere le impostazioni di php nell'ambiente di sviluppo.

cercare di individuare il file cacert.pem.

Se si utilizza un sistema Linux è possibile provare locate cacert.pem utilizzando il terminale.

quando si trova la posizione trovare il file php.ini e trovare questa linea:

;openssl.cafile =

e cambiare questo per openssl.cafile= percorso da localizzare cacert.pem command o la posizione del .pem si trova effettivamente.

Riportare su come è andata.

Problemi correlati