短信验证开发的方案分享

王志勇 发表于 2017年11月26日 22:01

最近做的项目中,需要验证用户的手机号码。很多的运营者都是采用106端口向用户发送短信的方式,如果是用第三方的短信服务,那么运营者需要支付0.05元/条,也就是向用户发送1万条验证码,需要支付500元,以此类推。如果是申请一个独立的106端口,对资质、资金的要求都非常高。

也有的运营商是采用用户主动发送验证信息的方式,例如申请QQ、或微信解封的时候需要向1069端口发送一条短信。(在去年,移动、联通手机发送106短信都不收费,电信收费;今年,移动、联通用户发106短信都要收费了,0.1元/条)
这种方式,运营商可以减少很多的短信成本,短信费用均由用户支付。

起初我是这样构思的:运营者可以为项目申请一个固定电话、或手机号转无线固定接入,连接电话录音机。当需要验证用户的手机号码时,用户拨打这个号码,来电显示里就记录了这个号码。然后,再人工通过验证,这样十分繁琐。

现在,终于试验成功了,用户发短信至一个专用的手机号(选择一个较好的号码、靓号,手机卡可以是任意运营商、任意归属地或国家),然后短信会自动连接网站的数据进行验证,无需任何人工操作。方案和步骤如下,已调试成功:

1. 手机卡放在一个安卓4.0以上的手机里,安装AndroPHP,让手机能运行PHP程序。因为后面要用到SQLite3,安卓手机安装SQLite3相当繁琐,并且安卓手机里的Shell命令远不如用PHP程序来控制文件方便得多。所以手机上安装PHP,作用是将短信数据库发送给远程VPS。
2. 这个手机接收的短信,是存放在/data/data/com.android.providers.telephony/databases/mmssms.db 。首先安卓手机必须Root(最好的Root软件,推荐Kingroot、或360 Root),用R.E.管理器,将mmssms.db的权限改为777,否则很可能这个文件无法被PHP访问。
3. 写一段PHP程序,让其检测这个mmssms.db的修改时间,并记录最后的修改时间,让其隔30-60秒检测一次,一旦修改时间发生改变,则执行步骤4。
4. 需要一台VPS,安装FTP。系统建议用Ubuntu12,因为安装SQLite3很顺利。给它安装vsftpd。
然后,在步骤3里,一旦修改时间发生改变,则让PHP执行将这个mmssms.db文件通过FTP上传至VPS(PHP的FTP上传程序可在网上搜索到)。
5. 这个VPS,需要事先安装好SQLite3、Apache、PHP5。
SQLite3的安装方法,只要这个命令就可以,测试通过:
apt-get -y install sqlite sqlite3

6. 为什么不给PHP安装SQLite3?因为时间的关系,没有调试成功(我的电脑无法安装Apache2.4)。
只能暂时让Ubuntu12安装SQLite3,然后PHP程序里通过exec()函数调用Shell命令来执行SQLite3。
7. Ubuntu12下,显示数据库里所有的短信内容的命令是:
sqlite3 mmssms.db
select * from sms;
8. Shell命令传给VPS上的PHP程序就是:
<?exec('sqlite3 mmssms.db && select * from sms;');?>
9. 步骤1里的手机,需要24小时开机。需要将手机电池取下,然后用TP4056从5V转4.1V给手机供电,或者用LM2596S、或MP2307DN将直流转为3.9~4.18V,给手机24小时×365天供电。不可将5V直接给手机电池输入供电,可能会烧坏主板。
10. 这个方案,电脑无需开机。只要手机保持开机、手机一直连接WIFI、AndroPHP保持在手机后台运行。

这样,手机会自动在接到新短信时,将短信的数据库上传给远程的VPS服务器,并被VPS上的PHP程序读取并分析用户的手机号码、短信的内容、验证码是否正确。PHP程序远比Shell命令易调试、功能多得多,所以能用PHP完成,就尽量交给PHP程序。

3条评论:
1   豆子 2017-12-13 14:22
很棒哦,看你的博客跟新的挺勤快的
2   自由勇 2018-09-23 11:30
Trackback来自《为什么写技术

因此,当我尝试去记录这些思路时,并发布在博客,比如近期的几篇“原创干货分享”,短信验证开发的方案分享,等等,这些既是等待有缘人来交流,也是给自己看,当自己再次去看这些文章,发现思路竟是如此清晰,很多自己彻底忘记的内容,能够在这些文章找到。

3   自由勇 2018-11-24 07:56
Trackback来自《Eonval帐号的登录方式和安全思考

从去年开始,我就采购了一些用于手机号验证的硬件设备,比如录音电话、电话交换机、GSM无线接入平台,并在去年完成把手机做成web服务器,可将手机接收到的短信,自动上传到远程的服务器上,以判断用户是否发了上行的短信。并从今年8月开始,大力开发短信验证的程序。

4   自由勇 2019-05-13 07:37
Trackback来自《PHP多种开发环境的区别:Windows+Apache、Linux+Apache、安卓手机的AndroPHP、OPENWRT

我当时安装AndroPHP,是为了让手机定时把收到的短信,上传给远程服务器,让远程的Ubuntu服务器通过PHP+SQLite3读取短信的内容,后来完美完成。方案是编写一段PHP程序,然后定时上传/data/data/com.android.providers.telephony/databases/mmssms.db文件。

发表评论:
名字: (*必填)
博客: (可省)

正文:

  记住信息?

王志勇:1980-09-26 (44周岁)
程序设计,前端设计。

版权声明:本博客所有文章,均符合原创的定义,禁止转载,违者将必究;正确的方法是贴原文的标题和网址即可。

与此相关的链接
自由勇专栏

Blog存档 Archives

2022年07月
2022年06月(15)
2022年05月(20)
2022年04月(16)
2022年03月(9)
2022年02月(9)
2022年01月(10)
2021年 +

2020年 +
2019年 +
2018年 +
2016年-2017年(9)
2014年06月-09月(10)
2013年 +
2012年 +
2011年 +
2010年 +
2009年 +
2008年 +
2007年 +
2006年 +
2005年09月(4)

Copyright © 2006-2024 auiou.com All rights reserved.
此Blog程序由王志勇编写