Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. PHP
Code

Як відправляти текстові повідомлення за допомогою PHP

by
Difficulty:BeginnerLength:LongLanguages:

Ukrainian (українська мова) translation by Elen (you can also view the original English article)

Текстові повідомлення стали неймовірно розповсюдженими по всьому світу з того моменту, коли все більше веб-додатків інтегрували SMS, щоб оповістити користувачів про події, продажі, або купони безпосередньо через мобільні телефони.

В даному уроці ми розглянемо основи відправлення тестових повідомлень за допомогою PHP.


Огляд

Відправляти тестові повідомлення (SMS) насправді дуже просто.

Нижче приведена спрощена схема передачі повідомлень з веб-додатку на безпровідний пристрій.

Ми розібемо її на частини, по одному:

  • Зроблено повідомлення з використанням веб-додатку, яке зберігається та виконується на HTTP-сервері, а потів відправляється через Інтернет («хмара») в якості повідомлення електронної пошти.
  • Лист отримано Шлюзом служби коротких повідомлень (SMS Gateway), який перетворює повідомлення електронної пошти в SMS-повідомлення.
  • Потім SMS-повідомлення передається в центр обслуговування коротких повідомлень (SMSC), який являється сервером, який направляє дані на конкретні мобільні пристрої.
  • Повідомлення, наостанок, передається по безпровідній мережі користувачу.

Більшість безпровідних мереж мають шлюз SMS, за допомогою якого повідомлення електронної пошти можуть відправлятися в вигляді текстових повідомлень на мобільний пристрій.  Це добре, тому що з точки зору розробника він зовсім вільний, проте це не безкоштовний сервіс для кінцевого користувача. Плата з користувача повідомлення знімається, а повідомлення, відправлені по електронній пошті будуть прийматися за текстові повідомлення, відмінні від мережі.


Email на SMS

Чтобы відправити SMS по електронній пошті зазвичай потрібно тільки дві речі:

  • Номер телефону або унікальній ідентифікатор мобільного пристрою, з яким ви хочете зв'язатися.
  • Та доменне ім'я безпровідної мережі (багато з них можуть бути знайдені в цьому списку email на SMS)

Для більшості носіїв можна дотримуватися наступного узгодження:

PhoneNumber – це номер телефону мобільного пристрою, на який відправляється повідомлення, а domainName.com - адреса для SMS Gateway мережі.

Щоб відправити текст Mr. Example, ви можете просто додати 3855550168@vtext.com в будь-який поштовий клієнт, надрукувати повідомлення на натиснути «відправити». Таким чином ви відправите текстове повідомлення на номер телефону +1 (385) 555-0168 по безпровідній мережі Verizon.

Наприклад, я відправляю текстове повідомлення самому собі за допомогою Gmail.

Коли мій телефон отримає повідомлення, це повинно виглядати ось так:

Дійсно чудово!


Функція PHP mail 

Давайте зробимо ще один крок. Використовуючи SMS Gateway, ми можемо відправляти текстове повідомлення по електронній пошті, використовуючи функцію mail PHP. Функція mail має наступний запис:

Ви можете дізнатися про це більше ось тут.

  • $to визначає отримувача або отримувачів повідомлення. Допустимі варіанти:

    • user@example.com
    • user1@example.com, user2@example.com
    • User <user@example.conm>
    • User1 , <user1@example.com>, User2 <user2@example.com>
  • $subject говорить сам за себе, це повинен бути рядок, який містить необхідний об'єкт.  Тим не менше, SMS не потребує цього.
  • $message - це повідомлення, яке потрібно доставити. Як розповідалось в інструкції PHP, "кожен рядок повинен розділятися LF (\n). Рядки не повинні бути довшими, ніж 70 символів". 

В більш ранній версії ми могли б написати наступний PHP-код:


Тест-драйв

Проведемо тест з PHP, щоб переконатися, що все налаштовано правильно, та що функція mail  дійсно відправить текстове повідомлення. Використовуючи наступний код ми можемо запустити:

Коли мій телефон отримує повідомлення, це виглядає наступним чином:

Якщо ви отримуєте повідомлення про помилку, подивіться розділ troubleshooting.

Як видно на зображенні вище, повідомлення показую, що воно відправлене з Gmail. Це відбувається тому, що я передаю всі вихідні повідомлення з мого локального сервера через дану службу. На жаль, на момент написання цієї статті мені не вдалося змінити From, щоб відобразити альтернативну адресу. Здається, що заголовки електронної пошти видалені та замінені заголовками, підготовленими SMS gateway. Якщо хтось знає, як це можна обійти, будь ласка, залиште свій коментар і нехай інші також дізнаються!


Додаємо юзабіліті

Розмітка

Уникаючи основи, давайте розглянемо дану ідею і обгорнемо навколо неї інтерфейс користувача. Спочатку ми створимо просту форму:

Стиль

Далі – трошки вкраплюємо CSS:

Це дасть нам наступну просту форму:


Скрипт

Найбільш важливою частиною являється скрипт PHP. Зараз ми напишемо цей фрагмент коду:

  • Спочатку скрипт перевіряє, чи була подана форма.
  • Якщо так, він перевіряє, чи були відправлені змінні, phoneNumbercarrier і smsMessage.   Це корисно в випадку, коли на сторінці декілька форм.
  • Якщо phoneNumbercarrier і smsMessage доступні, а phoneNumber і carrier не є пустими, можна відправляти повідомлення.
  • Аргумент повідомлення в mail повинен складатися з 70 символів в кожному рядку. Ви можете розрізати повідомлення на частини по 70 символів кожен, використовуючи функцію wordwrap.
  • PhoneNumber та carrier об'єднуються і потім повідомлення відправляється за допомогою команди mail.
  • Якщо дані відсутні або не можуть бути перевірені, скрипт просто повертає Not all information was submitted.
  • Під кінець, mail повертає логічне значення, яке показує, було воно успішним, чи ні. Значення зберігається в $result, на той випадок, якщо я захочу підтвердити, що повідомлення дійсно було відправлено.

Примітка: метод mail тільки повідомляє, чи було відправлено повідомлення. Це не дає можливості перевірити, чи було повідомлення успішно прийнято сервером-отримувачем або поштовою скринькою.


Кінцевий код 


Виправлення помилок

Помилка локального домена

Щоб використовувати функцію mail, у вас повинен бути поштовий сервер. Якщо ви запускаєте це на web host, то, вірогідно, все добре. Але, якщо ви не впевнені, я рекомендую переговорити з адміністратором. Це відноситься і до персональних комп'ютерів. Але якщо ви отримаєте такі помилки, як…

...вам доведеться встановити та налаштувати поштовий сервер. Але це питання не входить в рамки даного уроку. Проте, якщо ви працюєте на своєму локальному пристрої, перехід на XAMPP, або щось подібне, може вирішити дану проблему.  В якості альтернативи, спробуйте встановити Mercury Mail разом з WAMPMAMP, або LAMP (або SAMP чи OAMP та ін.).

PHPMailer

Інший варіант (я віддаю перевагу цьому методу) – це використання PHPMailer. Нижче представлено приклад використання PHPMailer для підключення до SMTP-сервера Gmail та відправлення повідомлення.

Його настільки ж легко використовувати, як включити клас в ваш скрипт.

Це повинно роздруковуватись приблизно так:

Залежно від вашої ситуації може знадобитися трохи більше, щоб встановити з'єднання.  Якщо ви плануєте використовувати Gmail, Google представив інформацію щодо з'єднання.


Закінчення

Існує безліч методів для виконання завдання по відправленню SMS через веб-додаток.  Цей метод дійсно призначений для відправлення повідомлень в малих об'ємах (переважно до 1000 повідомлень за місяць), тому розробники прагнуть спробувати нові методи без зайвих затрат. Інші варіанти включають:

  • Використання SMS Gateway Provider

    • Пошук в Google представить вам багато варіантів.
    • Більшість SMS gateway провайдерів включають API для відправлення повідомлення через веб-додаток.
    • Зазвичай ви можете оформити підписку на використання сервера за досить розумну ціну, якщо ви плануєте відправляти не менше 1000 повідомлень на місяць.
    • Ви можете взяти в оренду короткий кодовий номер.
  • Використання GSM модему

    • Це може коштувати дорого, та займати багато часу, щоб купити модем та укласти договір з компанією безпровідної мережі.
    • Вам також потрібно буде використовувати AT (Hayes) command set.
  • Використовуйте пряме підключення до безпровідної мережі, для чого потрібні будуть переговори та багато грошей.

Даний урок абсолютно не являється всестороннім оглядом методів відправлення текстових повідомлень через PHP; але можливо, він допоможе вам просто почати! Сподіваюсь, даний урок був цікавим для вас. Велике спасибі за те, що прочитали його! 

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.