Rumah > Soal Jawab > teks badan
Saya boleh menghantar pemberitahuan melalui Pemesejan Firebase menggunakan permintaan CURL di bawah. Saya sedang menggunakan Taman Permainan OAuth 2.0 untuk mendapatkan token akses. Saya perlu melaksanakan skrip PHP untuk melakukan ini. Bagaimana untuk menjana token akses secara pemrograman dalam PHP?
curl -X POST -k -H 'Authorization: Bearer access_token_goes_here' -H 'Content-Type: application/json' -i 'https://fcm.googleapis.com/v1/projects/projectId/messages:send' --data '{ "message":{ "topic" : "newTopic", "notification" : { "body" : "This is a Firebase Cloud Messaging Topic Message!", "title" : "FCM Message" } } }
P粉7138664252023-12-30 00:15:32
Saya menjumpai banyak penyelesaian, tetapi semuanya memerlukan banyak perpustakaan dan kebergantungan.
Saya membina penyelesaian saya sendiri tanpa kebergantungan tambahan. Ini ialah API untuk mendapatkan token OAuth2: https://developers.google.com/identity/protocols/oauth2/service-account#httprest
Langkah pertama ialah mencipta JWT (Json Web Token). Menggunakan JWT ini, token pembawa boleh diminta.
// php doesn't have build-in support for base64UrlEncoded strings, so I added one myself function base64UrlEncode($text) { return str_replace( ['+', '/', '='], ['-', '_', ''], base64_encode($text) ); } // Read service account details $authConfigString = file_get_contents("path_to_the_json_file_jou_downloaded_from_firebase_console.json"); // Parse service account details $authConfig = json_decode($authConfigString); // Read private key from service account details $secret = openssl_get_privatekey($authConfig->private_key); // Create the token header $header = json_encode([ 'typ' => 'JWT', 'alg' => 'RS256' ]); // Get seconds since 1 January 1970 $time = time(); // Allow 1 minute time deviation $start = $time - 60; $end = $time + 3600; $payload = json_encode([ "iss" => $authConfig->client_email, "scope" => "https://www.googleapis.com/auth/firebase.messaging", "aud" => "https://oauth2.googleapis.com/token", "exp" => $end, "iat" => $start ]); // Encode Header $base64UrlHeader = base64UrlEncode($header); // Encode Payload $base64UrlPayload = base64UrlEncode($payload); // Create Signature Hash $result = openssl_sign($base64UrlHeader . "." . $base64UrlPayload, $signature, $secret, OPENSSL_ALGO_SHA256); // Encode Signature to Base64Url String $base64UrlSignature = base64UrlEncode($signature); // Create JWT $jwt = $base64UrlHeader . "." . $base64UrlPayload . "." . $base64UrlSignature; //-----Request token------ $options = array('http' => array( 'method' => 'POST', 'content' => 'grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&assertion='.$jwt, 'header' => "Content-Type: application/x-www-form-urlencoded" )); $context = stream_context_create($options); $responseText = file_get_contents("https://oauth2.googleapis.com/token", false, $context); $response = json_decode($responseText);
$response
Mengandungi token pembawa. Anda harus menyimpan token ini untuk digunakan oleh permintaan lain dan meminta token pembawa baharu apabila ia hampir tamat tempoh. Jangka hayat maksimum token pembawa ini ialah 1 jam.