NHANWEB

How to: gửi SMS thông qua PHP

Send SMS

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.

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:

 $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:


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ú ý:

Đâ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 = "
                       ".$clientNo."
                       ".clientPass."
                       ".$message."
                       ".$branchName."
                        2 
                       
                       
                         ".$phone."
                       
                       

                  ";
            
          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");
        }
    }

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.

Exit mobile version