短信功能

该模块提供短信功能相关方法,包括读取、发送、删除短信等方法。

以下型号不支持此模块功能,对于定制版本,根据实际功能为准:

EC800GCN_LD/EC800GCN_LB/EC800MCN_LE/EC800MCN_GA/EC600MCN_LF/EC600MCN_LA/EC800MCN_GD/EC600MCN_CC/EG810MCN_GA/EC600MCN_LE/BC25/EC600GCN_LD/EC600KCN_LC/EC800MCN_LF/EC600GCN_LD。

发送短信

sms.sendTextMsg

sms.sendTextMsg(phoneNumber, msg, codeMode)

该方法用于发送TEXT类型的消息(不支持发送空短信)。

参数描述:

  • phoneNumber - 接收方手机号码,字符串类型,最大长度不超过20字节。
  • msg - 待发送消息,字符串类型,单条短信长度不超过140个字节。
  • codeMode -使用的字符编码方式,字符串类型,取值范围如下:
含义
'GSM' GSM编码方式,用于发送英文短信
'UCS2' UCS2编码方式,可以用于发送中文短信以及英文短信

返回值描述:

返回一个整型值, 0 表示发送成功, -1 表示发送失败。

仅以下系列支持长短信:

EC600N/EG912N/EG915N/EC200A系列短信内容UCS2编码最多支持420字节,GSM编码最多支持960个字节长度。

EC200U/EC600U/EG912U/EG915U/BG95系列短信内容UCS2编码最多支持280个字节,GSM编码最多支持640个字节的短信长度。

其余系列短信内容UCS2编码最多支持70个字节,GSM编码最多支持160个字节的短信长度。

示例:

# -*- coding: UTF-8 -*-
import sms

sms.sendTextMsg('18158626517', '这是一条中文测试短信!', 'UCS2')
sms.sendTextMsg('18158626517', 'Hello, world.', 'GSM')
sms.sendTextMsg('18158626517', '这是一条夹杂中文与英文的测试短信,hello world!', 'UCS2')

sms.sendPduMsg

sms.sendPduMsg(phoneNumber, msg, codeMode)

该方法用于发送PDU类型的消息(不支持发送空短信)。

参数描述:

  • phoneNumber - 接收方手机号码,字符串类型,最大长度不超过20字节。
  • msg - 待发送消息,字符串类型,单条短信长度不超过140个字节。
  • codeMode -使用的字符编码方式,字符串类型,取值范围如下:
含义
'GSM' GSM编码方式,用于发送英文短信
'UCS2' UCS2编码方式,可以用于发送中文短信以及英文短信

返回值描述:

返回一个整型值, 0 表示发送成功, -1 表示发送失败。

仅以下系列支持长短信:

EC600N/EG912N/EG915N/EC200A系列短信内容UCS2编码最多支持420字节,GSM编码最多支持960个字节长度。

EC200U/EC600U/EG912U/EG915U/BG95系列短信内容UCS2编码最多支持280个字节,GSM编码最多支持640个字节的短信长度。

其余系列短信内容UCS2编码最多支持70个字节,GSM编码最多支持160个字节的短信长度。

示例:

# -*- coding: UTF-8 -*-
import sms

sms.sendPduMsg('18158626517', 'send pdu msg by GSM mode.', 'GSM')
sms.sendPduMsg('18158626517', 'send pdu msg by UCS2 mode.', 'UCS2')
sms.sendPduMsg('18158626517', '这是一条中文测试短信!通过PDU-UCS2模式', 'UCS2')   

删除短信

sms.deleteMsg

sms.deleteMsg(index [, delmode])

该方法用于删除指定索引的消息。

参数描述:

  • index - 索引号,整型值,需要删除短信的索引号。
  • delmode - 模式,整型值,可选参数,当不写时默认为0,具体如下:
说明
0 删除指定 index 索引的短信
4 删除全部短信

返回值描述:

返回一个整型值, 0 表示删除成功, -1 表示删除失败。

EC600G/EC800G系列仅支持sms.deleteMsg(index)方式调用,不支持sms.deleteMsg(index,delmode)方式调用。

示例:

>>> import sms
>>> sms.deleteMsg(2)  #删除索引号为2的那一条短信
0
>>> sms.deleteMsg(1,4)  #删除所有短信
0

短信存储位置配置

sms.setSaveLoc

sms.setSaveLoc(mem1, mem2, mem3)

该方法用于设置短信的存储位置。

参数描述:

  • mem1 - 读取和删除消息所在的位置,字符串类型,支持如下参数:
含义
"SM" SIM消息存储
"ME" 移动设备信息存储
"MT" 暂不支持
  • mem2 - 写入和发送消息所在的位置,字符串类型,支持参数同上 mem1 的值。
  • mem3 - 接收消息的存储位置,字符串类型,支持参数同上 mem1 的值。

返回值描述:

返回一个整型值, 0 表示设置成功, -1 表示设置失败。

更改短信存储位置时,请保持 mem1 mem2 mem3 的内容统一,均为 SM ME

示例:

>>> import sms
>>> sms.setSaveLoc('SM', 'SM', 'SM')
0

sms.getSaveLoc

sms.getSaveLoc()

该方法用于获取当前模块短信存储位置相关信息。

返回值描述:

成功: 返回元组数据,格式 ([loc1, current_nums, max_nums],[loc2, current_nums, max_nums],[loc3, current_nums, max_nums]) ,如下表:

参数 类型 含义
loc1 字符串 读取和删除消息所在的位置,具体含义同 `sms.setSaveLoc `mem1 的值
loc2 字符串 写入和发送消息所在的位置,具体含义同 `sms.setSaveLoc `mem1 的值
loc3 字符串 接收消息的存储位置,具体含义同 `sms.setSaveLoc `mem1 的值
current_nums 整型 当前空间已有短信数量
max_nums 整型 当前空间最大短信存储数量

失败:返回 -1

示例:

>>> sms.getSaveLoc()
(['SM', 2, 50], ['SM', 2, 50], ['SM', 2, 50])
>>> sms.setSaveLoc('ME','ME','ME')
0
>>> sms.getSaveLoc()
(['ME', 14, 180], ['ME', 14, 180], ['ME', 14, 180])

获取短信的数量

sms.getMsgNums

sms.getMsgNums()

该方法用于获取短信的数量。

返回值描述:

成功: 返回短信数量值。失败: 返回 -1

示例:

>>> import sms
>>> sms.getMsgNums() # 执行本行前,先发送一条短信到模块
1

获取短信内容

sms.searchPduMsg

sms.searchPduMsg(index)

该方法用于以PDU方式获取短信内容。

参数描述:

  • index - 需要获取短信的索引,整型值,范围 0 ~ MAX-1 MAX 为模块存储短信的最大数量。

返回值描述:

成功: 返回字符串类型的PDU数据,为短信内容,包含收到短信的时间,所以相同短信内容的PDU数据是不同的。

失败: 返回整型 -1

示例:

>>> import sms
>>> sms.sendPduMsg('+8618226172342', '123456789aa', 'GSM') # 自己给自己发送一条短信
>>> sms.searchPduMsg(0) # 以PDU方式获取短信内容,下面PDU格式短信需要解码后才能正常显示短信内容
'0891683110305005F0240BA19169256015F70000022141013044230B31D98C56B3DD70B97018'

sms.searchTextMsg

sms.searchTextMsg(index)

该方法用于以TEXT方式获取短信内容。

参数描述:

  • index - 需要获取短信的索引,整型值,范围 0 ~ MAX-1 MAX 为模块存储短信的最大数量。

返回值描述:

成功: 返回元组数据,格式 (phoneNumber, msg, msgLen) ,具体参数如下:

参数 类型 含义
phoneNumber 字符串 短信来源手机号
msg 字符串 短信内容
msgLen 整型 短信消息长度

失败: 返回整型值 -1

示例:

>>> import sms
>>> sms.sendPduMsg('+8618226172342', '123456789aa', 'GSM') # 自己给自己发送一条短信
>>> sms.searchTextMsg(0) # 以TEXT方式获取短信内容
('+8618226172342', '123456789aa', 22)

PDU短信解码

sms.getPduLength

sms.getPduLength(pduMsg)

该方法用于获取指定PDU短信的长度。

参数描述:

  • pduMsg - PDU短信,字符串类型。

返回值描述:

成功: 返回PDU短信长度,整型值。

失败: 返回 -1

示例:

>>> import sms
>>> sms.searchPduMsg(0)
'0891683108501505F0040D91688122162743F200000211529003332318C16030180C0683C16030180C0683E170381C0E87'
>>> sms.getPduLength(sms.searchPduMsg(0)) #注意,是获取PDU短信长度,不是上面字符串的长度
40

sms.decodePdu

sms.decodePdu(pduMsg, pduLen)

该方法用于PDU解码,解析 `sms.searchPduMsg() `接口读取到的PDU数据。

参数描述:

  • pduMsg - PDU短信,字符串类型。
  • pduLen - PDU短信长度,整型值。

返回值描述:

成功: 返回元组数据,格式 (phoneNumber, msg, time, msgLen) ,具体参数如下:

参数 类型 含义
phoneNumber 字符串 短信来源手机号
msg 字符串 短信内容
time 整型 收到短信的时间
msgLen 整型 短信消息长度

失败: 返回整型值 -1

示例:

>>> import sms
>>>sms.decodePdu('0891683110305005F00405A10110F000081270319043442354516C76CA77ED4FE1FF1A00320030003200315E7496328303975E6CD596C68D445BA34F2067086D3B52A863D09192FF1A4E3B52A88FDC79BB975E6CD596C68D44FF0C5171540C5B8862A47F8E597D751F6D3B3002',20)
>>>('10010', '公益短信:2021年防范非法集资宣传月活动提醒:主动远离非法集资,共同守护美好生活。', '2021-07-13 09:34:44', 118)

短信中心号码配置

sms.getCenterAddr

sms.getCenterAddr()

该方法用于获取短信中心号码。

返回值描述:

成功: 返回字符串类型的短信中心号码。

失败: 返回整型值 -1

示例:

>>> import sms
>>> sms.getCenterAddr()
'+8613800551500'
# 如果设置的短信中心号码不带+,实际查询和使用默认添加 +

sms.setCenterAddr

sms.setCenterAddr(addr)

该方法用于设置短信中心号码。若无特殊需求,不建议更改短信中心号码。

参数描述:

  • addr - 需要设置的短信中心号码,字符串类型。

返回值描述:

返回一个整型值, 0 表示设置成功, -1 表示设置失败。

中国移动 中国联通 中国电信短信中心号码查询表:

以下是推推看科技整理列表按省级行政区首字母拼音顺序列出,也可按 Ctrl+F 输入所在城市来快速查询短信中心号码

安徽移动短信中心号码
合肥、巢湖、滁州、池州、六安、安庆、蚌埠 +8613800551500
芜湖、马鞍山、铜陵、宣城、黄山 +8613800553500
阜阳、淮北、淮南、宿州 +8613800558500

北京移动短信中心号码
+8613800100500

重庆移动短信中心号码
+8613800230500

福建移动短信中心号码
福州 +8613800591500 漳州 +8613800596500
厦门 +8613800592500 龙岩 +8613800597500
宁德 +8613800593500 三明 +8613800598500
莆田 +8613800594500 南平 +8613800599500
泉州 +8613800595500

甘肃移动短信中心号码
+8613800931500

广东移动短信中心号码
深圳 +8613800755500 珠海 +8613800756500
江门 +8613800750500 阳江 +8613800662500
惠州 +8613800752500 河源 +8613800762500
中山 +8613800760500 湛江 +8613800759500
茂名 +8613800668500 广州 +8613800200500
韶关 +8613800751500 清远 +8613800763500
汕头 +8613800754500 潮州 +8613800768500
揭阳 +8613800663500 佛山 +8613800757500
顺德 +8613800765500 肇庆 +8613800758500
云浮 +8613800766500 东莞 +8613800769500
汕尾 +8613800660500 梅州 +8613800753500

广西移动短信中心号码
南宁 +8613800771500 柳州 +8613800772500
桂林 +8613800773500 梧州 +8613800774500
玉林 +8613800775500 百色 +8613800776500
钦州 +8613800777500 河池 +8613800778500
防城港 +8613800770500 北海 +8613800779500

贵州移动短信中心号码
+8613800851500

海南移动短信中心号码
+8613800898500

河北移动短信中心号码
+8613800311500

河南移动短信中心号码
郑州 +8613800371500 许昌 +8613800374500
开封 +8613800378500 商丘 +8613800370500
漯河 +8613800395500 周口 +8613800394500
平顶山 +8613800375500 信阳 +8613800376500
南阳 +8613800377500 洛阳 +8613800379500
焦作 +8613800391500 新乡 +8613800373500
鹤壁 +8613800392500 驻马店 +8613800396500
濮阳 +8613800393500 安阳 +8613800372500
三门峡 +8613800398500

黑龙江移动短信中心号码
哈尔滨 +8613800451500
齐齐哈尔 +8613800452500
牡丹江、鸡西、七台河 +8613800453500
佳木斯、鹤岗、双鸭山 +8613800454500
绥化、伊春 +8613800455500
黑河、大兴安岭 +8613800456500
大庆 +8613800459500

湖北移动短信中心号码
武汉 +8613800270500 鄂州 +8613800711500
孝感 +8613800712500 黄冈 +8613800713500
咸宁 +8613800715500 襄樊 +8613800710500
黄石 +8613800714500 十堰 +8613800719500
恩施 +8613800718500 宜昌 +8613800717500
荆州 +8613800716500 江汉 +8613800728500
随州 +8613800722500

湖南移动短信中心号码
长沙 +8613800731500 娄底 +8613800738500
湘潭 +8613800732500 邵阳 +8613800739500
株洲 +8613800733500 岳阳 +8613800730500
衡阳 +8613800734500 自治州 +8613800743500
郴州 +8613800735500 张家界 +8613800744500
常德 +8613800736500 怀化 +8613800745500
益阳 +8613800737500 永州 +8613800746500

吉林移动短信中心号码
长春 +8613800431500 白城 +8613800436500
吉林 +8613800432500 辽源 +8613800437500
延吉 +8613800433500 松源 +8613800438500
四平 +8613800434500 白山 +8613800439500
通化 +8613800435500

江苏移动短信中心号码
南京 +8613800250500 镇江 +8613800511500
扬州 +8613800514500 苏州 +8613800512500
无锡 +8613800510500 常州 +8613800519500
南通 +8613800513500 徐州 +8613800516500
淮阴 +8613800517500 盐城 +8613800515500
连云港 +8613800518500 泰州 +8613800523500
宿迁 +8613800527500

江西移动短信中心号码
+8613800791500

辽宁移动短信中心号码
+8613800240500

内蒙古移动短信中心号码
+8613800471500

宁夏移动短信中心号码
+8613800951500

山东移动短信中心号码
济南 +8613800531500 青岛 +8613800532500
淄博 +8613800533500 德州 +8613800534500
烟台 +8613800535500 潍坊 +8613800536500
济宁 +8613800537500 泰安 +8613800538500
临沂 +8613800539500 东营 +8613800546500
威海 +8613800631500 莱芜 +8613800634500
聊城 +8613800635500

山西移动短信中心号码
太原 +8613800351500 忻州 +8613800350500
大同 +8613800352500 阳泉 +8613800353500
晋中 +8613800354500 长治 +8613800355500
临汾 +8613800357500 吕梁 +8613800358500
运城 +8613800359500 朔州 +8613800349500
晋城 +8613800356500

陕西移动短信中心号码
+8613800290500

上海移动短信中心号码
+8613800210500

四川移动短信中心号码
成都 +8613800280500 广安 +8613800826500
资阳 +8613800832500 巴中 +8613800827500
眉山 +8613800833500 泸州 +8613800830500
德阳 +8613800838500 宜宾 +8613800831500
广元 +8613800839500 内江 +8613800832500
绵阳 +8613800816500 雅安 +8613800835500
攀枝花 +8613800812500 乐山 +8613800833500
自贡 +8613800813500 凉山彝族自治州 +8613800834500
南充 +8613800817500 甘孜藏族自治州 +8613800836500
达州 +8613800818500 阿坝藏族羌族自治州 +8613800837500
遂宁 +8613800825500

天津移动短信中心号码
+8613800220500

新疆移动短信中心号码
+8613800471500

云南移动短信中心号码
+8613800871500

浙江移动短信中心号码
杭州 +8613800571500 湖州 +8613800572500
嘉兴 +8613800573500 宁波 +8613800574500
绍兴 +8613800575500 台州 +8613800576500
温州 +8613800577500 丽水 +8613800578500
金华 +8613800579500 衢州 +8613800570500
舟山 +8613800580500


中国移动短信中心号码计算方法
设基本号码为+861380xxxx500,其中xxxx是所在地电话区号,将区号填入基本号码即为所在地短信中心号码,不足4位就在后面补0
比如
合肥区号0551 换算得+8613800551500
武汉区号027 补0是0270 换算得+8613800270500
上海区号021 补0是0210 换算得+8613800210500

当然这只是一般计算方法,也有部分省份的情况不同,多个城市会共用一个短信中心号码,实际情况请按表中为准


联通短信中心号码

北京 8613010112500 或008613010112500
上海 8613010314500 或008613010314500
深圳 8613010888500 或008613010888500
山东 8613010171500 或008613010171500
江苏 8613010341500 或008613010341500
浙江 8613010360500 或008613010360500
福建 8613010380500 或008613010380500
四川 8613010811500 或008613010811500
重庆 8613010831500 或008613010831500
海南 8613010501500 或008613010501500
黑龙江 8613010980500 或008613010980500
吉林 8613010911500 或008613010911500
天津 8613010130500 或008613010130500
河北 8613010180500 或008613010180500
内蒙古 8613010950500 或008613010950500
山西 8613010701500 或008613010701500
安徽 8613010305500 或008613010305500
新疆 8613010969500 或008613010969500
青海 8613010776500 或008613010776500
甘肃 8613010879500 或008613010879500
宁夏 8613010796500 或008613010796500
贵州 8613010788500 或008613010788500
云南 8613010868500 或008613010868500
湖南 8613010731500 或008613010731500
湖北 8613010710500 或008613010710500
广东 8613010200500 或008613010200500
广西 8613010591500 或008613010591500
河南 8613010761500 或008613010761500
江西 8613010720500 或008613010720500
辽宁 8613010240500 或008613010240500


电信短信中心号码

电信短信中心:

1、正确短信中心号码一:+316540942002或+8613334113200,归属地分布包括:北京、黑龙江、吉林、辽宁、河北、山西、内蒙古、陕西、甘肃、宁夏、青海、新疆、天津、山东;

2、正确短信中心号码二:+316540942001或+8613344181200,归属地分布包括:上海、江苏、浙江、安徽、福建、江西;

3、正确短信中心号码三:+316540942000或+8613334262200,归属地分布包括:广东、广西、海南、湖南、湖北、河南、云南、贵州、西藏、四川、重庆。

回调注册功能

sms.setCallback

sms.setCallback(usrFun)

该方法用于注册监听回调函数,当接收到短信时,调用此方法注册的回调函数。

参数描述:

  • usrFun - 回调函数名,回调函数格式以及回调函数的参数说明如下:
def usrFun(args):
    pass
参数 类型 参数说明
args[0] 整型 当前SIM卡卡槽的simId
args[1] 整型 短信索引
args[2] 字符串 短信存储位置

返回值描述:

返回一个整型值, 0 表示设置成功, -1 表示设置失败。

示例:

# 示例一
import sms

def cb(args):
    index = args[1]
    storage = args[2]
    print('New message! storage:{},index:{}'.format(storage, index))

sms.setCallback(cb)

# 示例二
# 2021-09-09之前发布的版本使用方法不同,如下所示,参照示例二:
import sms

def cb(args):
    ind_flag = args[0]
    if ind_flag == 4097:
        mes_buf, mes_len = args[1], args[2]
    	print('New message! ind_flag:{},mes_buf:{},mes_len:{}'.format(ind_flag, mes_buf, mes_len))
    elif ind_flag == 4099:
        mes_type, storage, index = args[1], args[2], args[3]
        print('New message! ind_flag:{},mes_type:{},storage:{},index:{}'.format(ind_flag, mes_type, storage, index))
    elif ind_flag == 4100:
        mes_buf = args[1]
        print('New message! ind_flag:{},mes_buf:{}'.format(ind_flag, mes_buf))
    elif ind_flag == 4101:
    	storage,index = args[1], args[2]
        print('New message! ind_flag:{},storage:{},index:{}'.format(ind_flag, storage, index))

sms.setCallback(cb)