PHP 5.6:从 FCM 旧版 HTTP 迁移到 HTTP v1 协议并通过 Google OAuth2 获取令牌

问题描述 投票:0回答:1

我目前正在将 PHP 5.6 应用程序重建为 Java,预计将持续到 6 月之后。在那之前,我需要通过迁移推送通知来确保它们继续发送。

问题在于,解释使用 Google OAuth2 的用户身份验证服务的“Google App Engine PHP 5 标准环境文档”已于 1 月 30 日终止。对此我有两个问题:

  1. 如何使用 PHP 5.6 版本接收 Google OAuth2 令牌?
  2. 使用 FCM HTTP v1 协议的发送方法如何与 PHP 5.6 配合使用?

通过gpt,我收到了以下来源。但是,我不确定如何获得

$refreshToken
,并且该源是否正常工作也存在不确定性。

function get_access_token($clientId, $clientSecret, $refreshToken) {
    $url = 'https://accounts.google.com/o/oauth2/token';
    $data = [
        'client_id' => $clientId,
        'client_secret' => $clientSecret,
        'refresh_token' => $refreshToken,
        'grant_type' => 'refresh_token',
    ];

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));

    $result = curl_exec($ch);
    curl_close($ch);

    $result = json_decode($result, true);

    if(array_key_exists('access_token', $result)) {
        return $result['access_token'];
    } else {
        return null;
    }
}

function send_notification_common($tokens, $message) {
    $clientId = 'MyClientId';
    $clientSecret = 'MyClientSecret';

    $url = 'https://fcm.googleapis.com/v1/projects/gymgym-4ecef/messages:send';
    $fields = array(
        'message' => array(
            'token' => $tokens,
            'notification' => $message,
            'data' => $message
        )
    );
    $headers = array(
        'Authorization: Bearer ' . get_access_token($clientId, $clientSecret, $refreshToken),
        'Content-Type: application/json'
    );

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($fields));
    $result = curl_exec($ch);
    if ($result === FALSE) {
        die('Curl failed: ' . curl_error($ch));
    }
    curl_close($ch);
    return $result;
}

你能告诉我如何使用这个代码或者是否还有其他方法?

谢谢你。

  1. 访问 Google Cloud Console。
  2. 从顶部的项目下拉列表中,创建一个新项目或选择一个现有项目。
  3. 从侧边栏菜单中,选择“API 和服务”>“凭据”。
  4. 在“凭据”页面上,单击“创建凭据”>“OAuth 客户端 ID”。
  5. 在“创建 OAuth 客户端”屏幕中,选择“Web 应用程序”并单击“创建”。
  6. 在下一个屏幕中,您可以看到客户端 ID ($clientId) 和客户端密钥 ($clientSecret)。

$refreshToken https://accounts.google.com/o/oauth2/auth?redirect_uri=http://localhost&response_type=code&client_id=myClientId&access_type=offline&prompt=consent&scope=https://www.googleapis.com/auth/cloud-platform

此后,它被移至网址

http://localhost/?code=4/0adLIrYehJFAe5XYrzWOAvX9gdkRyB5gJk6pyAeXpgUSMbgV8eLCMjhDHHxN-85_YUyx5SA&scope=https://www.googleapis.com/auth/cloud-platform

我不知道之后我应该做什么

firebase-cloud-messaging
1个回答
0
投票

您需要使用以下命令安装 kreait/firebase-php 库:

composer require kreait/firebase-php

接下来,从 Firebase 下载 service-account.json 文件并将其放置在您的代码可访问的位置。

下载 service-account.json 文件:

转到 Firebase > 项目设置 > 服务帐户。 单击生成新私钥按钮。

获得文件后,您可以使用以下代码发送通知:

require_once('vendor/autoload.php');

use Kreait\Firebase\Factory;
use Kreait\Firebase\Messaging\CloudMessage;
use Kreait\Firebase\Messaging\Notification;

$serviceAccount = './service-account.json';

$factory = (new Factory)->withServiceAccount($serviceAccount);
$messaging = $factory->createMessaging();

$messageSend = CloudMessage::withTarget('token', $token)
    ->withNotification(Notification::create($title, $body));

$response = $messaging->send($messageSend);

if ($response) {
    echo 'Message sent successfully!';
} else {
    echo 'Error sending message: ' . $response->getError()->getMessage();
}

如果遇到任何问题(特别是使用 PHP 7.4 或更低版本时),请尝试安装以下库并再次检查:

composer require guzzlehttp/psr7
© www.soinside.com 2019 - 2024. All rights reserved.