Công nghệ ngày một phát triển và nhu cầu gửi SMS thông qua web ngày một nhiều như để xác thực tài khoản, gửi thông báo, gửi mã OPT…vì vậy website của bạn cũng phải tiến thêm một bước nữa để theo kịp thời đại. Trong bài viết này chúng ta sẽ tìm hiểu phương pháp gửi SMS thông qua PHP.
Trước khi thực hiện việc này, bạn cần phải hiểu chúng ta cần có môt nhà cung cấp dịch vụ SMS có kết nối API chứ bản thân PHP không thể kết nối và gửi dữ liệu SMS được(mất phí mà). Bạn nào làm global thì có thể tìm hiểu thêm các nhà cung cấp dịch vụ SMS có thể gửi SMS tới tất cả các quốc gia với chi phí thấp như Twilio, Nexmo, MSG91, Textlocal…Nếu ở VN bạn có thể sử dụng eSMS chẳng hạn – mình cũng sử dụng dịch vụ của bạn này cho một số site thương mại điện tử VN.
Bài viết này sẽ hướng tới việc gửi SMS global nên mình xây dựng SMS với Twilio, Nexmo and MSG91 SMS API. Hầu hết các nhà cung cấp SMS đều có một tí tin nhắn SMS miễn phí để bạn thử nghiệm và kiểm tra dịch vụ nên chúng ta có thể tận dụng số lượng ít ỏi này để test kết nối dịch vụ và gửi tin nhắn mẫu. Cuối bài viết mình có bổ sung một đoạn mã gửi SMS ở môi trường Việt Nam để bạn nào quan tâm có thể sử dụng.
Phụ mục
Gửi SMS sử dụng Twilio SMS API
Sau khi đăng ký sử dụng dịch vụ, bạn có thể xây dựng đoạn mã sau để gửi SMS:
function send_twilio_sms($id, $token, $from, $to, $body) { $url = "https://api.twilio.com/2010-04-01/Accounts/".$id."/SMS/Messages"; $data = array ( 'From' => $from, 'To' => $to, 'Body' => $body, ); $post = http_build_query($data); $x = curl_init($url ); curl_setopt($x, CURLOPT_POST, true); curl_setopt($x, CURLOPT_RETURNTRANSFER, true); curl_setopt($x, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($x, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); curl_setopt($x, CURLOPT_USERPWD, "$id:$token"); curl_setopt($x, CURLOPT_POSTFIELDS, $post); $y = curl_exec($x); curl_close($x); return $y; } ?> |
Cách sử dụng như sau:
send_twilio_sms($id, $token, $from, $to, $body) |
Dĩ nhiên đoạn mã trên có 2 thứ quan trọng bạn cần được cung cấp từ Twilio là Twilio SID, Twilio token. Hai thông số này do bên Twilio cung cấp cho bạn để giám sát và gửi mã.
Gửi SMS sử dụng Nexmo SMS API
Hàm dưới đây sử dụng cho Nexmo để gửi SMS:
<?php function cspd_send_nexmo_sms($key,$secret,$to_number,$from_number,$sms_text) { $url = 'https://rest.nexmo.com/sms/json?' . http_build_query([ 'api_key' => $key, 'api_secret' => $secret, 'to' => $to_number, 'from' => $from_number, 'text' => $sms_text ]); $ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); return curl_exec($ch); } ?> |
Gửi SMS sử dụng MSG91 SMS API
Nhà cung cấp này còn cung cấp phương pháp đơn giản hơn cho bạn để gửi SMS, bạn chỉ cần gửi một SMS đến nhà cung cấp thông qua một URL
http://api.msg91.com/api/sendhttp.php?route=4&sender=TESTIN&mobiles=PHONE_NUMBER&authkey=AUTH_KEY&message=Hello! This is a test message&country=0&response=json
Đoạn mã cụ thể dưới này sẽ giúp bạn xây dựng một hàm gửi SMS:
<?php $send_msg91_sms = file_get_contents("http://api.msg91.com/api/sendhttp.php?route=4&sender=TESTIN&mobiles=PHONE_NUMBER&authkey=AUTH_KEY&message=Hello! This is a test message&country=0&response=json"); $response = json_decode($send_msg91_sms); ?> |
Gửi SMS ở VN
Ở Việt Nam hiện tại cũng có nhiều nhà cung cấp dịch vụ gửi SMS chủ động cho khách hàng nhưng có một số điều bạn cần chú ý:
- Đọc kỹ giá dịch vụ, các loại hình dịch vụ như brandname, đầu số, gửi tin nhắn chăm sóc khách hàng, gửi tin nhắn quảng cáo…
- Theo quy định của bộ Thông tin và Truyền thông, bạn cần phải đăng ký mẫu tin nhắn cần gửi đến các nhà mạng trước và đợi duyệt. Thời gian duyệt là tầm 1 ngày. Việc này có thể nhờ bên cung cấp dịch vụ hướng dẫn thêm hoặc hỗ trợ thêm. Mình toàn nhờ bên đó đăng ký dùm cho nhanh.
- Đọc kỹ Document của API để gửi chính xác và nhanh chóng nhất
- Hiện nay các nhà cung cấp có cung cấp luôn phần tin nhắn thoại hoặc cuộc gọi tự động – nếu có cơ hội bạn cũng nên dùng thử.
Đây là đoạn code gửi SMS của nhà cung cấp Esms.VN mà có thể bạn cần đến hoặc quan tâm đến:
function Esms($clientNo, $clientPass, $branchName, $phone = "", $message = ""){ $ch = curl_init(); if($phone!="" && $message!=""){ $url = $this->SMSCONFIG["uri"]; $data = "<RQST> <APIKEY>".$clientNo."</APIKEY> <SECRETKEY>".clientPass."</SECRETKEY> <CONTENT>".$message."</CONTENT> <BRANDNAME>".$branchName."</BRANDNAME> <SMSTYPE>2</SMSTYPE> <CONTACTS> <CUSTOMER> <PHONE>".$phone."</PHONE> </CUSTOMER> </CONTACTS> </RQST>"; curl_setopt($ch, CURLOPT_URL, $this->SMSCONFIG["uri"]); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1 ); curl_setopt($ch, CURLOPT_POST, 1 ); curl_setopt($ch, CURLOPT_POSTFIELDS, $data ); curl_setopt($ch, CURLOPT_HTTPHEADER,array('Content-Type: text/plain')); $result=curl_exec ($ch); $xml = simplexml_load_string($result); if ($xml === false) { die('Error parsing XML'); } return $xml->CodeResult; }else{ die("Thông tin gửi SMS bị thiếu"); } } |
- $clientNo và $clientPass là do bên Esms cung cấp tương ứng với tài khoản khách hàng của bạn để gửi tin và đối soát số lượng tin nhắn.
- $branchName là dạng tin nhắn thương hiệu, nếu bạn không có nhu cầu sử dụng bạn có thể bỏ qua.
- Lưu ý thêm phần SMSTYPE ở trong đoạn mã trên vì nó sẽ xác định bạn gửi tin nhắn qua đầu số, qua tên thương hiệu hoặc là tin nhắn quảng cáo. Phần này bạn tham khảo thêm trong tài liệu của nhà cung cấp nhé.
Lời kết
Mình mong là bài viết này tương đối dễ hiểu và đơn giản cho bạn nào có ý định triển khai dịch vụ SMS trên website của mình để phục vụ những mục đích cụ thể như nhắn tin xác nhận, nhắn tin chăm sóc khách hàng, nhắn tin gửi mã OPT trên website… như bạn thấy, điều này được thực hiện tương đối đơn giản với các dịch vụ có sẵn được cung cấp bởi nhiều nhà cung ứng.
Mong là những đoạn mã trên giúp ích cho nhiều bạn.