Nodejs 发送短信程序避坑指南

imba久期

共 1309字,需浏览 3分钟

 · 2024-03-21

前面的废话

前阵子接了个有意思的活,需求根据模板批量发送短信,在强烈兴趣爱好的驱使下决定研究研究,顺便把钱赚了

找教程的时候发现非常少,视频资源都比较老,中英文短信混合发送没有一个教程提及,调通硬件又发现,nodejs 相关的资源就更少了

折腾了两周多,最开始买的板子只支持 2G,想着办 2G 卡结果营业厅说没法办,一通找最后又换成现在这个板子,还有发短信各种失败…

总之最后折腾出来这篇,分享一下踩的坑

硬件准备
  • 封装好的 4G 模块 (A7680C)

    baa771a87dd117124492293eedd3ac17.webp

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

    78e583404eaed034d7d0151611821435.webp

接线参考

c43929da9d490227f612410cbb1f860d.webp

测试

用串口工具,或者使用 serialport 包写个简单的程序连接并发送指令

但注意甄别,我遇到有些工具不会按你的指令,会给你发一些乱七八糟的短信

发送英文短信

  • AT 测试命令

  • AT+CMGF=1 设置短信格式

  • AT+CMGS=13000000000 接收手机

    以上都需要发送新行,也就是回车

  • > 出现箭头后写上短信内容,去掉发送新行并发送

  • 切换到 16进制 新行发送 1A

有的教程说的最后发送 Ctrl + Z 其实说的就是 1A

5467ee6658861968048a1f5b024518a7.webp

接收成功的短信

d120835b83b6e6f305ab0ebae3fd6247.webp

发送中文短信

首先要将手机号、短信内容经过一系列处理

  • 801986 + 发送人手机号 + F,进行奇偶反转,如 80198613012345678F 变为 0891683110325476F8

  • 86 + 收件人手机号 + F,进行奇偶反转

  • 短信内容转为 16 进制

  • 11000D91 + 收件人反转的手机号 + 0008AA + 16 进制短信内容

  • 计算上一步字符串长度除以二

  • 发件人反转手机号 + 第四步的字符串

  • 依次执行 AT+CMGF=0AT+CSCS="GSMAT+CMGS=字符串长度、上一步的字符串、1A

避坑
  1. 中文短信转 16 进制要 4 位,不足补零,比如 ABC 是不行的,必须是 0ABC,否则会乱码

  2. 在 nodejs 里 1A 的发送方式是

      
        serialPort.write(Buffer.from([0x1a]))
      
      
        serialPort.write("\r")
      
    


Github: imba97/simple-serialport-gsm

浏览 12
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报