Nodejs 发送短信程序避坑指南
前阵子接了个有意思的活,需求根据模板批量发送短信,在强烈兴趣爱好的驱使下决定研究研究,顺便把钱赚了
找教程的时候发现非常少,视频资源都比较老,中英文短信混合发送没有一个教程提及,调通硬件又发现,nodejs 相关的资源就更少了
折腾了两周多,最开始买的板子只支持 2G,想着办 2G 卡结果营业厅说没法办,一通找最后又换成现在这个板子,还有发短信各种失败…
总之最后折腾出来这篇,分享一下踩的坑
硬件准备-
封装好的 4G 模块 (A7680C)

-
USB TO TTL (CH340G) 一般会附赠线


用串口工具,或者使用 serialport 包写个简单的程序连接并发送指令
但注意甄别,我遇到有些工具不会按你的指令,会给你发一些乱七八糟的短信
发送英文短信
-
AT测试命令 -
AT+CMGF=1设置短信格式 -
AT+CMGS=13000000000接收手机以上都需要发送新行,也就是回车
-
>出现箭头后写上短信内容,去掉发送新行并发送 -
切换到
16进制新行发送1A
有的教程说的最后发送 Ctrl + Z 其实说的就是 1A

接收成功的短信

发送中文短信
首先要将手机号、短信内容经过一系列处理
-
801986+ 发送人手机号 +F,进行奇偶反转,如80198613012345678F变为0891683110325476F8 -
86+ 收件人手机号 +F,进行奇偶反转 -
短信内容转为 16 进制
-
11000D91+ 收件人反转的手机号 +0008AA+ 16 进制短信内容 -
计算上一步字符串长度除以二
-
发件人反转手机号 + 第四步的字符串
-
依次执行
AT+CMGF=0、AT+CSCS="GSM、AT+CMGS=字符串长度、上一步的字符串、1A
-
中文短信转 16 进制要 4 位,不足补零,比如
ABC是不行的,必须是0ABC,否则会乱码 -
在
nodejs里1A的发送方式是
serialPort.write(Buffer.from([0x1a]))serialPort.write("\r")
Github: imba97/simple-serialport-gsm
