• 技术文章 >后端开发 >php教程

    PHP发送AT指令,phpat指令_PHP教程

    2016-07-12 08:51:36原创416

    PHP发送AT指令,phpat指令


    需求: 发送短信到用户输入手机, 要求可以自定义信息内容

    问题: 没有电信猫, 使用免费api接口无法自定义短信内容

    解决方案: 通过4G网卡, 接在服务器上, 通过AT指令操作网卡, 发送短信

    查阅发现, AT质量发送需要对信息进行多重编码, 而且发送超时, 但实际发送成功, 问题还未完全解决

    代码如下:

      1 php
      2 send_message('8613800138000', '您好, 你正在申请注册服务平台, 您的验证码是: 97431');
      3  
      4 function send_message($phone, $message) {
      5     $phone = decode_phone($phone);
      6      
      7     $message_center = decode_message_center('+8613010200500'); //此步骤似乎没用
      8      
      9     $message = decode_message($message);
     10      
     11     $length = get_message_length($phone, $message);
     12      
     13     set_time_limit(0);
     14      
     15     //根据情况选择COM口, 此处为COM4, 在管理设备中, 查看网络解调器的COM口
     16 
     17     exec('mode COM4: baud=115200 data=8 stop=1 parity=n xon=on');
     18      
     19     $fd = dio_open('COM4:', O_RDWR);
     20      
     21     $ff = dio_stat($fd);
     22      
     23     if (!$fd) {
     24         die("failed open com4");
     25     }
     26      
     27     //chr(13)是回车, chr(16)是Ctrl+Z
     28      
     29     dio_write($fd, "AT+CMGF=0" . chr(13)); //设置发送模式为PDU
     30      
     31     dio_write($fd, "AT+CMGS=" . $length . chr(13)); //发送信息长度
     32      
     33     dio_write($fd, '11000D91' . $phone . '000800' . $message . chr(26) . chr(13)); //发送短信息
     34      
     35     sleep(2);
     36      
     37     dio_close($fd);
     38 }
     39  
     40 function decode_phone($phone) {
     41     $phone = str_replace('+', '', $phone);
     42      
     43     if (strlen($phone) % 2 !== 0) {
     44         $phone = $phone . 'F';
     45     }
     46      
     47     $newPhone = '';
     48     for ($i = 0; $i < strlen($phone); $i += 2) {
     49         $newPhone = $newPhone . substr($phone, $i + 1, 1) . substr($phone, $i, 1);
     50     }
     51      
     52     return $newPhone;
     53 }
     54  
     55 function decode_message_center($phone) {
     56     $newPhone = '91' . decode_phone($phone);
     57      
     58     $len = strtoupper(dechex(strlen($newPhone) / 2));
     59      
     60     if (strlen($len) % 2 !== 0) {
     61         $len = '0' . $len;
     62     }
     63      
     64     $newPhone = $len . $newPhone;
     65      
     66     return $newPhone;
     67 }
     68  
     69 function decode_message($message) {
     70     $newMessage = utf8_unicode($message);
     71      
     72     $len = strtoupper(dechex(strlen($newMessage) / 2));
     73      
     74     if (strlen($len) % 2 !== 0) {
     75         $len = '0' . $len;
     76     }
     77      
     78     $newMessage = $len . $newMessage;
     79      
     80     return $newMessage;
     81 }
     82  
     83 function utf8_unicode($name) {
     84     $name = iconv('UTF-8', 'UCS-2', $name);
     85     $len = strlen($name);
     86     $str = '';
     87      
     88     for ($i = 0; $i < $len - 1; $i = $i + 2) {
     89         $c = $name[$i];
     90         $c2 = $name[$i + 1];
     91         if (ord($c) > 0) { //两个字节的文字  
     92             $str .= base_convert(ord($c), 10, 16) . str_pad(base_convert(ord($c2), 10, 16), 2, 0, STR_PAD_LEFT);
     93         } else {
     94             $str .= str_pad(base_convert(ord($c2), 10, 16), 4, 0, STR_PAD_LEFT);
     95         }
     96     }
     97      
     98     $str = strtoupper($str); //转换为大写  
     99     return $str;
    100 }
    101  
    102 function get_message_length($phone, $message) {
    103     $str = '11000D91' . $phone . '000800' . $message;
    104      
    105     $length = strlen($str) / 2;
    106      
    107     if ($length < 10) {
    108         $length = '0' . $length;
    109     }
    110      
    111     return $length;
    112 }

    www.bkjia.comtruehttp://www.bkjia.com/PHPjc/1129314.htmlTechArticlePHP发送AT指令,phpat指令 需求: 发送短信到用户输入手机, 要求可以自定义信息内容 问题: 没有电信猫, 使用免费api接口无法自定义短信内容...

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:php
    上一篇:适用于PHP初学者的学习线路和建议,php初学者_PHP教程 下一篇:php 判断数组是一维,二维,还是多维,php判断数组多维_PHP教程
    VIP课程(WEB全栈开发)

    相关文章推荐

    • 【腾讯云】年中优惠,「专享618元」优惠券!• 用PHP来统计在线人数的四个方法详解• 装配mysql出错Can't connect to MySQL server on 'localhost' (10061 • [原创]替找房方便 ,将sohu焦点的 rss 改成全文的 • php中应用GD2库创建图形在浏览器中显示不出来 • 求伪静态的 PHP 程序解决办法!
    1/1

    PHP中文网