无法接收针对AWS SNS服务的任何已发布数据或订阅URL

时间:2019-11-25 09:31:42

标签: php amazon-web-services amazon-ses

我正在尝试利用SNS服务使用http协议订阅主题。

以下是我在服务器上放置的一段php代码:-

<?php

require 'vendor/autoload.php';
require 'Aws/Sns/Message.php';
require 'Aws/Sns/MessageValidator.php';
require 'GuzzleHttp/Client.php';

use Aws\Sns\Message;
use Aws\Sns\MessageValidator;
use GuzzleHttp\Client;


// Make sure the request is POST
  if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
      file_put_contents("notification.txt", "Error 405\n", FILE_APPEND);
      http_response_code(405);
      die;
  }

try {
    $message = Message::fromRawPostData();
    file_put_contents("notification.txt", "\r\n-------\r\n", FILE_APPEND);
    file_put_contents("notification.txt", $_REQUEST , FILE_APPEND);
    $validator = new MessageValidator();
    $validator->validate($message);
} catch (Exception $e) {
    // Pretend we're not here if the message is invalid.
    file_put_contents("notification.txt", 'SNS Message Validation Error: ' . $e->getMessage() . "\n".$e->getTraceAsString()."\n", FILE_APPEND);
    echo($e);
    http_response_code(404);
    die();
}

/*
if ($message->get('Type') === 'SubscriptionConfirmation') {
    // Send a request to the SubscribeURL to complete subscription
    (new Client)->get($message->get('SubscribeURL'))->send();
    file_put_contents("notification.txt", "Subscription\n", FILE_APPEND);
} elseif ($message->get('Type') === 'Notification') {
    ob_start();
    var_dump($message);
    $result = ob_get_clean();
    file_put_contents("notification.txt", $result, FILE_APPEND);
}
*/

当我尝试通过从AWS Portal调用“确认订阅”来接收呼叫时,但没有包含订阅URL的标头或正文。 谁能帮助我遵循正确的方向?

1 个答案:

答案 0 :(得分:0)

感谢@Damir Kasipovic上面的评论。

中的代码更改
file_put_contents("notification.txt", $_REQUEST , FILE_APPEND); with 

对此

file_put_contents("notification.txt", file_get_contents('php://input') , FILE_APPEND)

帮我从通话中提取数据

{
"Type": "SubscriptionConfirmation",
"MessageId": "cc0fb4d8-***********-542a9f3dbb33",
"Token": "2336412f37fb687f5d51e6************4795716f01db42d3b1",
"TopicArn": "arn:aws:sns:**********Downloaded",
"Message": "You have chosen to subscribe to the topic arn:aws:sns:*****nTo confirm the subscription, visit the SubscribeURL included in this message.",
"SubscribeURL": "https://sns.us-east-1.amazonaws.com/*************1",
"Timestamp": "2019-11-25T12:55:40.335Z",
"SignatureVersion": "1",
"Signature": "L2uX+OF1f39np2******************h0lmw==",
"SigningCertURL": "https://sns.us-east-1.amazonaws.com/*******************.pem"

}