Fer*_*ago 21 amazon-web-services amazon-sns
我一直在网上搜索,没有任何明确的答案来确认亚马逊SNS的订阅请求.我已经将订阅从亚马逊控制台发送到我的网站,但下一步是什么?我使用amazon EC2作为我的PHP服务器.
Lan*_*Lan 17
在通过AWS管理控制台配置HTTP/HTTPS端点订阅之前,您需要确保PHP网站的HTTP或HTTPS端点能够处理Amazon SNS生成的HTTP POST请求.有几种类型的SNS消息:SubscriptionConfirmation,Notification和UnsubscribeConfirmation.您的PHP代码需要从请求中获取标头x-amz-sns-message-type并根据消息类型对其进行处理.对于SubscriptionConfirmation消息,您的PHP应用程序需要处理POST消息正文,这是一个JSON文档.要订阅主题,您的PHP代码需要访问JSON正文中指定的"SubscriberURL".(可选)您应该在订阅主题之前验证签名以确保消息的真实性.
您可以在AWS文档中找到更多详细信息:http://docs.aws.amazon.com/sns/latest/dg/SendMessageToHttp.html
您指定的端点将从 AWS SNS 端点验证服务获取数据,同一端点将用于验证端点并从 aws 获取通知,
只需将 AWS SNS 发送的输入转储到一个文本文件中,例如,
$json_write_to_text = json_decode(file_get_contents("php://input"));
Run Code Online (Sandbox Code Playgroud)
您将找到 AWS SNS 发送的所有数据,但只需找到SubscriptionUrl
(特定于具有有效令牌的端点),在浏览器中打开它,您将获得 SubscriptionConfirmation 状态。就是这样
享受。
这是一个确认SNS订阅的快速应用程序(Node.js):
const express = require('express')
const request = require('request')
// parse urlencoded request bodies into req.body
const bodyParser = require('body-parser')
const app = express()
const port = 8080
app.use(bodyParser.urlencoded({ extended: false }))
app.use(bodyParser.json())
app.post('/', (req, res) => {
let body = ''
req.on('data', (chunk) => {
body += chunk.toString()
})
req.on('end', () => {
let payload = JSON.parse(body)
if (payload.Type === 'SubscriptionConfirmation') {
const promise = new Promise((resolve, reject) => {
const url = payload.SubscribeURL
request(url, (error, response) => {
if (!error && response.statusCode == 200) {
console.log('Yess! We have accepted the confirmation from AWS')
return resolve()
} else {
return reject()
}
})
})
promise.then(() => {
res.end("ok")
})
}
})
})
app.listen(port, () => console.log('Example app listening on port ' + port + '!'))
Run Code Online (Sandbox Code Playgroud)
要使用它,需要安装所需的软件包:
yarn add express request body-parser
Run Code Online (Sandbox Code Playgroud)
确认订阅后,AWS将向POST
服务器发送以下内容的请求:
{
"Type": "SubscriptionConfirmation",
"MessageId": "XXXXXXXX-1ee3-4de3-9c69-XXXXXXXXXXXX",
"Token": "SECRET_TOKEN",
"TopicArn": "arn:aws:sns:us-west-2:XXXXXXXXXXXX:ses-test",
"Message": "You have chosen to subscribe to the topic arn:aws:sns:us-west-2:XXXXXXXXXXXX:ses-test. To confirm the subscription, visit the SubscribeURL included in this message.",
"SubscribeURL": "https://sns.us-west-2.amazonaws.com/?Action=ConfirmSubscription&TopicArn=arn:aws:sns:us-west-2:XXXXXXXXXXXX:ses-test&Token=SECRET_TOKEN",
"Timestamp": "2018-11-21T19:48:08.170Z",
"SignatureVersion": "1",
"Signature": "SECRET",
"SigningCertURL": "https://sns.us-west-2.amazonaws.com/SimpleNotificationService-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.pem"
}
Run Code Online (Sandbox Code Playgroud)
有效负载包含SubscribeURL
服务器请求的内容。
归档时间: |
|
查看次数: |
15981 次 |
最近记录: |