首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 透過 AT 指令控制 4G 網卡發送簡訊實作範例

     編輯:PHP 相關知識

PHP 透過 AT 指令控制 4G 網卡發送簡訊實作範例

需求: 發送簡訊至使用者輸入的手機號碼,並能自訂簡訊內容。

問題: 缺乏電信數據機,使用免費 API 介面無法自訂簡訊內容。

解決方案: 透過 4G 網卡連接伺服器,利用 AT 指令操作網卡發送簡訊。

經查閱資料,AT 指令發送簡訊需對資訊進行多重編碼,且存在發送逾時但實際發送成功的情況,問題尚未完全解決。

核心程式碼

<?php
send_message('', '您好, 您正在申請註冊服務平台, 您的驗證碼是: ');

function send_message($phone, $message) {
    $phone = decode_phone($phone);
    $message_center = decode_message_center('+'); // 此步驟似乎無效
    $message = decode_message($message);
    $length = get_message_length($phone, $message);
    set_time_limit(); // 依情況選擇 COM 埠,此處為 COM,在裝置管理員中查看網路調制解調器的 COM 埠
    exec('mode COM: baud= data= stop= parity=n xon=on');
    $fd = dio_open('COM:', O_RDWR);
    $ff = dio_stat($fd);
    if (!$fd) {
        die("failed open com");
    }
    // chr(13) 為換行,chr(26) 為 Ctrl+Z
    dio_write($fd, "AT+CMGF=" . chr(13)); // 設定發送模式為 PDU
    dio_write($fd, "AT+CMGS=" . $length . chr(13)); // 發送訊息長度
    dio_write($fd, 'D' . $phone . '' . $message . chr(13) . chr(26)); // 發送簡訊
    sleep(1);
    dio_close($fd);
}

function decode_phone($phone) {
    $phone = str_replace('+', '', $phone);
    if (strlen($phone) % 2 !== 0) {
        $phone = $phone . 'F';
    }
    $newPhone = '';
    for ($i = 0; $i < strlen($phone); $i += 2) {
        $newPhone = $newPhone . substr($phone, $i + 1, 1) . substr($phone, $i, 1);
    }
    return $newPhone;
}

function decode_message_center($phone) {
    $newPhone = '' . decode_phone($phone);
    $len = strtoupper(dechex(strlen($newPhone) / 2));
    if (strlen($len) % 2 !== 0) {
        $len = '0' . $len;
    }
    $newPhone = $len . $newPhone;
    return $newPhone;
}

function decode_message($message) {
    $newMessage = utf_unicode($message);
    $len = strtoupper(dechex(strlen($newMessage) / 2));
    if (strlen($len) % 2 !== 0) {
        $len = '0' . $len;
    }
    $newMessage = $len . $newMessage;
    return $newMessage;
}

function utf_unicode($name) {
    $name = iconv('UTF-8', 'UCS-2', $name);
    $len = strlen($name);
    $str = '';
    for ($i = 0; $i < $len - 1; $i = $i + 2) {
        $c1 = $name[$i];
        $c2 = $name[$i + 1];
        if (ord($c1) > 0) { // 兩個位元組的文字
            $str .= base_convert(ord($c1), 10, 16) . str_pad(base_convert(ord($c2), 10, 16), 2, '0', STR_PAD_LEFT);
        } else {
            $str .= str_pad(base_convert(ord($c1), 10, 16), 2, '0', STR_PAD_LEFT);
        }
    }
    $str = strtoupper($str); // 轉換為大寫
    return $str;
}

function get_message_length($phone, $message) {
    $str = 'D' . $phone . '' . $message;
    $length = strlen($str) / 2;
    if ($length < 10) {
        $length = '0' . $length;
    }
    return $length;
}
?>

以上介紹 PHP 發送 AT 指令實例代碼,希望對大家有所幫助。若有任何疑問歡迎留言,小編會及時回覆。感謝大家對幫客之家網站的支持!

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved