PHP发送AT指令实例代码


Posted in PHP onMay 26, 2016

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

问题: 没有电信猫, 使用免费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()是回车, chr()是Ctrl+Z
dio_write($fd, "AT+CMGF=" . chr()); //设置发送模式为PDU
dio_write($fd, "AT+CMGS=" . $length . chr()); //发送信息长度
dio_write($fd, 'D' . $phone . '' . $message . chr() . chr()); //发送短信息
sleep();
dio_close($fd);
}
function decode_phone($phone) {
$phone = str_replace('+', '', $phone);
if (strlen($phone) % !== ) {
$phone = $phone . 'F';
}
$newPhone = '';
for ($i = ; $i < strlen($phone); $i += ) {
$newPhone = $newPhone . substr($phone, $i + , ) . substr($phone, $i, );
}
return $newPhone;
}
function decode_message_center($phone) {
$newPhone = '' . decode_phone($phone);
$len = strtoupper(dechex(strlen($newPhone) / ));
if (strlen($len) % !== ) {
$len = '' . $len;
}
$newPhone = $len . $newPhone;
return $newPhone;
}
function decode_message($message) {
$newMessage = utf_unicode($message);
$len = strtoupper(dechex(strlen($newMessage) / ));
if (strlen($len) % !== ) {
$len = '' . $len;
}
$newMessage = $len . $newMessage;
return $newMessage;
}
function utf_unicode($name) {
$name = iconv('UTF-', 'UCS-', $name);
$len = strlen($name);
$str = '';
for ($i = ; $i < $len - ; $i = $i + ) {
$c = $name[$i];
$c = $name[$i + ];
if (ord($c) > ) { //两个字节的文字 
$str .= base_convert(ord($c), , ) . str_pad(base_convert(ord($c), , ), , , STR_PAD_LEFT);
} else {
$str .= str_pad(base_convert(ord($c), , ), , , STR_PAD_LEFT);
}
}
$str = strtoupper($str); //转换为大写 
return $str;
}
function get_message_length($phone, $message) {
$str = 'D' . $phone . '' . $message;
$length = strlen($str) / ;
if ($length < ) {
$length = '' . $length;
}
return $length;
}

以上所述是小编给大家介绍的PHP发送AT指令实例代码 ,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

PHP 相关文章推荐
BBS(php &amp; mysql)完整版(六)
Oct 09 PHP
PHP 防恶意刷新实现代码
May 16 PHP
Zend的AutoLoad机制介绍
Sep 27 PHP
『PHP』PHP截断函数mb_substr()使用介绍
Apr 22 PHP
PHP设计模式之命令模式的深入解析
Jun 13 PHP
php获取文章上一页与下一页的方法
Dec 01 PHP
PHP使用memcache缓存技术提高响应速度的方法
Dec 26 PHP
php计算给定时间之前的函数用法实例
Apr 03 PHP
php版微信公众账号第三方管理工具开发简明教程
Sep 23 PHP
PHP基于rabbitmq操作类的生产者和消费者功能示例
Jun 16 PHP
解决Laravel5.2 Auth认证退出失效的问题
Oct 14 PHP
php设计模式之抽象工厂模式分析【星际争霸游戏案例】
Jan 23 PHP
PHP+sqlite数据库操作示例(创建/打开/插入/检索)
May 26 #PHP
php连接oracle数据库的核心步骤
May 26 #PHP
php连接oracle数据库的方法(测试成功)
May 26 #PHP
PHP封装的MSSql操作类完整实例
May 26 #PHP
PHP简单操作MongoDB的方法(安装及增删改查)
May 26 #PHP
基于PHP实现数据分页显示功能
May 26 #PHP
yii2实现根据时间搜索的方法
May 25 #PHP
You might like
允许phpmyadmin空密码登录的配置方法
2011/05/29 PHP
Java中final关键字详解
2015/08/10 PHP
将PHP程序中返回的JSON格式数据用gzip压缩输出的方法
2016/03/03 PHP
详解PHP防止直接访问.php 文件的实现方法
2017/07/28 PHP
SUN的《AJAX与J2EE》全文译了
2007/02/23 Javascript
javascript高亮效果的二种实现方法
2008/09/14 Javascript
增强用户体验友好性之jquery easyui window 窗口关闭时的提示
2012/06/22 Javascript
jQuery 淡入淡出 png图在ie8下有黑色边框的解决方法
2013/03/05 Javascript
JS中typeof与instanceof之间的区别总结
2013/11/14 Javascript
js数字转换为float,取N位小数
2014/02/08 Javascript
javascript的数组和常用函数详解
2014/05/09 Javascript
jQuery选择器源码解读(五):tokenize的解析过程
2015/03/31 Javascript
详解Vue2.0 事件派发与接收
2017/09/05 Javascript
vue生成token保存在客户端localStorage中的方法
2017/10/25 Javascript
mac中利用NVM管理不同node版本的方法详解
2017/11/08 Javascript
javascript实现Emrips反质数枚举的示例代码
2017/12/06 Javascript
vue使用axios时关于this的指向问题详解
2017/12/22 Javascript
Node.js 利用cheerio制作简单的网页爬虫示例
2018/03/01 Javascript
JS使用setInterval实现的简单计时器功能示例
2018/04/19 Javascript
springMvc 前端用json的方式向后台传递对象数组方法
2018/08/07 Javascript
在vue-cli 3中给stylus、sass样式传入共享的全局变量
2019/08/12 Javascript
js实现QQ邮箱邮件拖拽删除功能
2020/08/27 Javascript
[41:37]DOTA2北京网鱼队选拔赛——冲击职业之路
2015/04/13 DOTA
用Python实现大文本文件切割的方法
2019/01/12 Python
解决python replace函数替换无效问题
2020/01/18 Python
Python 实现向word(docx)中输出
2020/02/13 Python
Python编程快速上手——疯狂填词程序实现方法分析
2020/02/29 Python
详解python程序中的多任务
2020/09/16 Python
详解python中的三种命令行模块(sys.argv,argparse,click)
2020/12/15 Python
selenium学习教程之定位以及切换frame(iframe)
2021/01/04 Python
HTML5 canvas实现雪花飘落特效
2016/03/08 HTML / CSS
意大利宠物用品购物网站:Bauzaar
2018/09/15 全球购物
楼面经理岗位职责范本
2014/02/18 职场文书
办护照工作证明
2014/10/01 职场文书
网络营销计划
2015/01/17 职场文书
JS异步堆栈追踪之为什么await胜过Promise
2021/04/28 Javascript