Amazon предоставляет приведенный ниже пример кода php для подписки номера на тему. Однако это добавляет только число один за раз.
Как я могу добавить несколько номеров ($endpoint) в одну и ту же тему? Какой код должен быть в конце?
Пример кода PHP:
<?php
// snippet-start:[sns.php.subscribe_text_sms.complete]
// snippet-start:[sns.php.subscribe_text_sms.import]
require 'vendor/autoload.php';
use Aws\Sns\SnsClient;
use Aws\Exception\AwsException;
// snippet-end:[sns.php.subscribe_text_sms.import]
/**
* Prepares to subscribe an endpoint by sending the endpoint a confirmation message.
*
* This code expects that you have AWS credentials set up per:
* https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/guide_credentials.html
*/
// snippet-start:[sns.php.subscribe_text_sms.main]
$SnSclient = new SnsClient([
'profile' => 'default',
'region' => 'us-east-1',
'version' => '2010-03-31'
]);
$protocol = 'sms';
$endpoint = '+1XXX5550100';
$topic = 'arn:aws:sns:us-east-1:111122223333:MyTopic';
try {
$result = $SnSclient->subscribe([
'Protocol' => $protocol,
'Endpoint' => $endpoint,
'ReturnSubscriptionArn' => true,
'TopicArn' => $topic,
]);
var_dump($result);
} catch (AwsException $e) {
// output error message if fails
error_log($e->getMessage());
}
// snippet-end:[sns.php.subscribe_text_sms.main]
// snippet-end:[sns.php.subscribe_text_sms.complete]
// snippet-sourcedescription:[SubscribeTextSMS.php demonstrates how to send a confirmation message as a text message.]
@ smac2020 Я не уверен, что понимаю. Нельзя ли изменить пример кода, чтобы использовать список чисел и добавлять их по одному? Или нет похожего метода?
Нет возможности установить список номеров или любой другой набор номеров. Конечная точка — это одно строковое значение, для которого вы хотите получать уведомления.
@ smac2020 Я понимаю это. Но это так странно, что нет возможности добавить больше чисел одновременно. Я имею в виду, какая разница между тем, что я каждый раз вручную меняю файл или когда код отправляет одни и те же параметры, кроме номера телефона, блок за блоком?
Вы можете использовать цикл for
и вызывать subscribe()
один раз за цикл. Итак, да, ваша программа может добавить несколько подписчиков, используя несколько вызовов subscribe()
API.
@JohnRotenstein Хорошо, Джон! Это именно то, что я ищу. Не могли бы вы помочь мне адаптировать код? Боюсь, у меня нет для этого навыков =(
StackOverflow — это не сайт, где людей просят написать для вас код. Если вы столкнулись с проблемой конкретный, мы будем рады ответить на ваши вопросы. Главное, о чем следует подумать для этого кода — «откуда возьмутся номера телефонов»? Он может быть получен из файла или может быть передан в функцию.
@JohnRotenstein Я думаю, что это обсуждаемо. Это также сайт для учащихся. Многие люди уже «написали» для меня коды, что на самом деле заставило меня многому научиться — так что я думаю, что конечная цель была достигнута. Если ты не хочешь этого делать, ничего страшного, я понимаю. Если бы вы могли хотя бы указать на аналогичный пример в Интернете или на ресурсе, это было бы очень признательно.
Использование цикла все еще не обойти, вы можете добавить только 1 конечную точку за вызов. Это все, что я пытался предложить. Удачи с кодом!
@smac2020 smac2020 Я добавил цикл foreach, и он работал нормально. Скоро выложу решение. Спасибо хоть!
Решение оказалось довольно простым. Мне просто нужно было добавить список чисел (через массив) и создать цикл foreach:
<?php
// snippet-start:[sns.php.subscribe_text_sms.complete]
// snippet-start:[sns.php.subscribe_text_sms.import]
require 'vendor/autoload.php';
use Aws\Sns\SnsClient;
use Aws\Exception\AwsException;
// snippet-end:[sns.php.subscribe_text_sms.import]
/**
* Prepares to subscribe an endpoint by sending the endpoint a confirmation message.
*
* This code expects that you have AWS credentials set up per:
* https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/guide_credentials.html
*/
// snippet-start:[sns.php.subscribe_text_sms.main]
$SnSclient = new SnsClient([
'profile' => 'default',
'region' => 'us-east-1',
'version' => '2010-03-31'
]);
$protocol = 'sms';
$endpoints = array('+1XXX5550100', '+2XXX5550100', '+3XXX5550100');
$topic = 'arn:aws:sns:us-east-1:111122223333:MyTopic';
foreach ($endpoints as $endpoint) {
try {
$result = $SnSclient->subscribe([
'Protocol' => $protocol,
'Endpoint' => $endpoint,
'ReturnSubscriptionArn' => true,
'TopicArn' => $topic,
]);
var_dump($result);
} catch (AwsException $e) {
// output error message if fails
error_log($e->getMessage());
}
}
// snippet-end:[sns.php.subscribe_text_sms.main]
// snippet-end:[sns.php.subscribe_text_sms.complete]
// snippet-sourcedescription:[SubscribeTextSMS.php demonstrates how to send a confirmation message as a text message.]
В объекте запроса нет коллекции, позволяющей задавать сразу несколько значений. Поэтому, основываясь на документах REF, это вызов 1-1. Вы должны вызвать подписаться на каждый номер.